贝宝退款服务引发TRANSACTION_REFUSED错误

时间:2019-02-25 07:14:58

标签: node.js paypal-sandbox paypal-ipn paypal-rest-sdk paypal-subscriptions

我正在尝试使用贝宝的退款服务。我正在使用沙盒环境进行测试。我使用沙箱进行付款(基于订阅),由于某种原因,贝宝需要近一天的时间来执行付款。我们的系统的工作方式如下: 1)创建基于订阅的计划 2)支付订阅费用 3)Paypal会返回billingAgreementId以及返回URL,并保存该ID 4)由于Paypal需要花费大量时间,因此请使用Webhook模拟器来触发“付款销售已完成”事件类型并进行付款。

因此,由于模拟器每次都发送相同的虚拟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 个答案:

答案 0 :(得分:0)

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