【问题标题】:react-paypal-button-v2 returning the wrong order idreact-paypal-button-v2 返回错误的订单 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,但是capturesid下还有一个ID是7A2856455D561633D。这是我需要保存的 实际 订单 ID,以便以后进行退款。但是,我正在努力如何检索该值,因为该 id 值似乎只能通过网络看到。通过 onApprove 和 action.order.get() 方法返回的对象只返回第一个“假”id。任何建议将不胜感激。

【问题讨论】:

    标签: reactjs paypal paypal-sandbox


    【解决方案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 错误响应。任何想法为什么会这样?
    • 很可能是错误的帐户凭据
    猜你喜欢
    • 2020-03-29
    • 1970-01-01
    • 2020-05-26
    • 2022-01-05
    • 1970-01-01
    • 2021-06-22
    • 2021-09-18
    • 2020-11-12
    • 2011-11-02
    相关资源
    最近更新 更多