Paypal 退款服务抛出 TRANSACTION_REFUSED 错误

Posted

技术标签:

【中文标题】Paypal 退款服务抛出 TRANSACTION_REFUSED 错误【英文标题】:Paypal refund service throws TRANSACTION_REFUSED error 【发布时间】:2019-07-18 13:26:51 【问题描述】:

我正在尝试使用 paypal 的退款服务。我正在使用沙盒环境进行测试。我使用沙盒进行付款(基于订阅),出于某种原因,贝宝需要将近一天的时间来执行付款。我们的系统工作方式如下: 1) 创建基于订阅的计划 2) 支付订阅费用 3) Paypal 返回一个 billingAgreementId 以及返回 URL,保存该 Id 4) 由于paypal耗时较长,使用Webhook Simulator触发“Payment Sale Completed”事件类型进行支付。

所以,由于模拟器每次发送相同的虚拟 sale_id(并且会抛出无效 ID 错误),我无法测试退款 API(如下所示),所以我使用了来自的 transaction_id(与 sale_id 相同)沙箱环境并静态使用它进行退款。但即使那样,它也会引发错误,尽管我使用了有效的 sale_id。错误如下所示:

httpStatusCode: 400
response:
debug_id: "83878fa1bdb27"
httpStatusCode: 400
information_link: "https://developer.paypal.com/docs/api/payments/#errors"
message: "Request was refused.You can not do a partial refund on this transaction"
name: "TRANSACTION_REFUSED"

我的代码:

if (refundServiceResult.refundAmount > 0) 
      //CALL PAYPAL REFUND SDK
      var data = 
          amount: 
            currency: "USD",
            total: refundServiceResult.refundAmount
          
        ,
        // saleId = body.resource.id;
        saleId = "88M48196CV276711X";
      let refunded = await new Promise((resolve, reject) => 
        paypal.sale.refund(saleId, data, (error, refund) => 
          if (error) 
            throw new Error(error);
           else 
            console.log("Refund Sale Response");
            console.log(JSON.stringify(refund));
            resolve(refund);
          
        );
      );
      console.log("Refunded Response", refunded);

我做了一些研究,发现如果货币未在沙盒设置中列出,但我在所有地方都使用美元并且“付款审核”选项也被切换为关闭,则可能会发生这种情况。但我仍然收到此错误。可能是什么原因?

【问题讨论】:

【参考方案1】:

所以,我使用的是买家的 transaction_id(sale_id) 而不是卖家。在沙盒环境中,您可以在卖家和买家的账户中找到最新付款的 transaction_id。您应该使用卖家账户的 transaction_id 进行退款。

【讨论】:

以上是关于Paypal 退款服务抛出 TRANSACTION_REFUSED 错误的主要内容,如果未能解决你的问题,请参考以下文章

PayPal:从付款中退款

如何使用贝宝以编程方式退款?

Magento 1.7.0.2 退款不与 PayPal 同步

如何在 ios 中使用 Paypal 退款?

Paypal自适应退款

PayPal 订阅 - 跟踪退款