react-paypal-button-v2 返回错误的订单 ID
Posted
技术标签:
【中文标题】react-paypal-button-v2 返回错误的订单 ID【英文标题】:react-paypal-button-v2 returning the wrong order id 【发布时间】:2021-11-30 03:31:51 【问题描述】:我试图调试与使用订单 ID(之前存储的)退款 Paypal 订单(在沙盒环境中)相关的问题。每次我尝试退款时,Paypal API 都会返回一个INVALID_RESOURCE_ID
错误,这意味着不存在这样的订单。经过多次调试,我对存储该订单ID时的初始过程做出了启示。以下方法是我检索和存储所述订单 ID 的方式:
const onApprove = (data, actions) =>
// Redux method of saving checkout in backend with order ID via using data.orderID
dispatch(saveCheckout(data.orderID);
return actions.order.capture();
<PayPalButton
amount=totalPrice
currency= "AUD"
createOrder=(data, actions) => createOrder(data, actions)
onApprove=(data, actions) => onApprove(data, actions)
options=
clientId: "<placeholder>",
currency: "AUD"
/>
我正在使用文档中推荐的 data.orderID
,但是,在检查网络选项卡时,显示以下内容:
"id":"5RJ421191B663801G","intent":"CAPTURE","status":"COMPLETED","purchase_units":["reference_id":"default","amount":"currency_code":"AUD","value":"24.00","payee":"email_address":"sb-sg4zd7438633@business.example.com","merchant_id":"EJ7NSJGC6SRXQ","shipping":"name":"full_name":"John Doe","address":"address_line_1":"1 Cheeseman Ave Brighton East","admin_area_2":"Melbourne","admin_area_1":"Victoria","postal_code":"3001","country_code":"AU","payments":"captures":["id":"7A2856455D561633D","status":"COMPLETED","amount":"currency_code":"AUD","value":"24.00","final_capture":true,"seller_protection":"status":"ELIGIBLE","dispute_categories":["ITEM_NOT_RECEIVED","UNAUTHORIZED_TRANSACTION"],"create_time":"2021-10-11T00:40:58Z","update_time":"2021-10-11T00:40:58Z"]],"payer":"name":"given_name":"John","surname":"Doe","email_address":"sb-432azn7439880@personal.example.com","payer_id":"KMEQSKCLCLUZ4","address":"country_code":"AU","create_time":"2021-10-11T00:40:48Z","update_time":"2021-10-11T00:40:58Z","links":["href":"https://api.sandbox.paypal.com/v2/checkout/orders/5RJ421191B663801G","rel":"self","method":"GET"]
onApprove
保存的id是5RJ421191B663801G
,但是captures
和id
下还有一个ID是7A2856455D561633D
。这是我需要保存的 实际 订单 ID,以便以后进行退款。但是,我正在努力如何检索该值,因为该 id 值似乎只能通过网络看到。通过 onApprove 和 action.order.get()
方法返回的对象只返回第一个“假”id。任何建议将不胜感激。
【问题讨论】:
【参考方案1】:这是两种不同类型的 ID,订单 ID(仅在买家结帐批准期间使用)和付款/交易 ID(仅在捕获订单之后存在,并且是用于以后的退款或会计目的)
由于您在客户端使用actions.order.capture()
进行捕获,因此您需要在此处添加.then(function(data) ... )
来处理捕获数据(尤其是data.purchase_units[0].payments.captures[0].id
)。这是您用于退款的 ID。
在实际的最佳实践中,如果需要对捕获 ID 执行任何重要操作(例如将其存储在数据库中以供参考),则不应在客户端创建和捕获订单,而是调用服务器将执行数据库写入的端集成。
按照Set up standard payments 指南在您的服务器上创建两条路线,一条用于“创建订单”,一条用于“捕获订单”documented here。两个路由都应该只返回 JSON 数据(没有 html 或文本)。在第二条路线中,当捕获 API 成功时,您应该将其生成的付款详细信息存储在您的数据库中(特别是前面提到的purchase_units[0].payments.captures[0].id
,这是 PayPal 交易 ID)并执行任何必要的业务逻辑(例如发送确认电子邮件或预订product) 立即在将您的返回 JSON 转发给前端调用者。
将这 2 条路由与前端审批流程配对:https://developer.paypal.com/demo/checkout/#/pattern/server
或者react,使用官方react-paypal-js
【讨论】:
您好,感谢您的帮助。我已听从您的建议,并设法检索所述交易 ID 以进行退款并将其存储在我的后端。但是,当我尝试执行退款时,它现在会给出RESOURCE_NOT_FOUND
错误响应。任何想法为什么会这样?
很可能是错误的帐户凭据以上是关于react-paypal-button-v2 返回错误的订单 ID的主要内容,如果未能解决你的问题,请参考以下文章