【发布时间】:2019-06-28 10:01:30
【问题描述】:
标题:我的服务器出错时是否无法取消交易
我尝试做paypal checkout docs。 这是客户端代码
import React, { Component } from 'react';
import axios from 'axios';
import SmartPaymentButtons, { PayPalSDKWrapper } from 'react-smart-payment-buttons';
class PayPal extends Component {
render() {
return (
<PayPalSDKWrapper clientId="<client_ID>">
<SmartPaymentButtons
createOrder={(data, actions) => {
return actions.order.create({
purchase_units: [{
amount: {
currency_code: "USD",
value: "0.09"
}
}]
});
}}
onApprove={ (data, actions) => {
return actions.order.capture()
.then(async (details) => {
alert("Transaction completed by " + details.payer.name.given_name);
return axios({
method: 'POST',
url: 'http://localhost:5002/paypal/paypal-transaction-complete',
data: {
orderID: data.orderID
},
}).then(res => {
return res.data;
})
});
}}
/>
</PayPalSDKWrapper>
);
}
}
export default PayPal;
这是 nodejs 代码
const checkoutNodeJssdk = require('@paypal/checkout-server-sdk');
const payPalClient = require('../Common/payPalClient');
module.exports = async function handleRequest(req, res) {
const orderID = req.body.orderID;
let request = new checkoutNodeJssdk.orders.OrdersGetRequest(orderID);
let order;
try {
order = await payPalClient.client().execute(request);
} catch (err) {
console.error(err);
return res.send(500);
}
// sending error on purpose
if (order.result.purchase_units[0].amount.value !== '220.00') {
return res.send(400);
}
// Save the transaction in your database
// <...saving orderID code...>
return res.send(200);
}
我故意在我的服务器上犯了一个错误。所以orderID 没有保存。这是我所期望的。但是paypal付了钱。我没有在我的数据库中获得 orderID,但已经在 paypal 中付款。
有没有办法解决这个问题?
【问题讨论】:
-
我认为唯一的解决方案是使用退款 API。也许你每天或每小时运行一次 cronjob 来找出这类请求。然后为这些订单运行退款 API。大多数公司通过支持人员这样做