nodeJS Paypal REST API 修改计划给破损但工作 link

nodeJS Paypal REST API to revise plan give broken but working link

我正在尝试将 Paypal 集成到我的 NodeJS 应用程序中。我正在使用 REST API,因为官方的 npm 数据包已被弃用。 假设我有一个产品有两个计划,planAplanB,这是订阅等定期付款所必需的。假设客户订阅 planA,费用为 10 美元。一段时间后,他想切换到花费 20 美元的 planB,以解锁平台中的高级内容。

我找到了API:POST/v1/billing/subscriptions/{id}/revise 使用哪一个应该能够发送 planID planB 以切换到它。您还可以发送 effective_time 字段来指定更改何时生效。调用此 API 后,Paypal 回复了 6 个链接,我使用第一个 (approve) 将客户重定向到 Paypal 域以确认其是否愿意切换计划。用户登录后,确认并点击“接受并订阅”新计划,页面总是给我以下错误:Things don't appear to be working at the moment. Please try again later. ,尽管计划变更顺利(我可以通过仪表板验证)。

我想知道如何避免该错误。 我想澄清一下,在设置中,通过仪表板,在 Account settings -> Website payments -> Website preferences 下,我暂时可以选择 Block non-encrypted website paymentOff . 提前谢谢大家!

设置“阻止non-encrypted网站支付”与此问题无关,不会有任何效果。它仅适用于 legacy HTML-only payments,您不必担心。


编辑:是的,重定向集成需要 application_context 和 return_url。对于 SDK 的使用,没有使用 redirect_url,因此 API.

不需要该字段

之前的回答如下:


您描述的问题似乎是 PayPal 站点的问题,并且可能仅在沙盒模式或某些 browsers/cookies 中出现。您可以根据需要进行测试,如有需要请联系 PayPal 支持。

也可以使用 JS SDK 进行修改而不是重定向。对于 client-side-only 集成(没有 API),可以使用 actions.subscription.revise 完成。在 the SDK reference.

中搜索该文本

要将 JS SDK 与您正在使用的 API 调用相结合,请让您的按钮代码从您的服务器获取修改后的订阅 ID。这是一个创建示例,您可以将其改编为修订版,因为它本质上是相同的(您可能只是使用 /revise 端点 /path/on/your/server)

  <script src="https://www.paypal.com/sdk/js?client-id=..........&amp;vault=true&amp;intent=subscription"></script>

  <div id="paypal-button-container"></div>

  <script>
    paypal.Buttons({
      style: {
          label:'subscribe'  //Optional text in button
      },
      createSubscription: function(data, actions) {
          return fetch('/path/on/your/server/paypal/subscription/create/', {
              method: 'post'
          }).then(function(res) {
              return res.json();
          }).then(function(serverData) {
              console.log(serverData);
              return serverData.id;
          });
      },

      onApprove: function(data, actions) {
      /*  Optional: At this point, notify your server of the activated subscription...

          fetch('/path/on/your/server/paypal/subscription/activated/' + data.subscriptionID , {
              method: 'post'
          }).then(function(res) {
              return res.json();
          }).then(function(serverData) {
              //
          });
      */
          //You could additionally subscribe to a webhook for the BILLING.SUBSCRIPTION.ACTIVATED event (just in case), as well as other future subscription events
          //Ref: https://developer.paypal.com/docs/api-basics/notifications/webhooks/event-names/#subscriptions

          // Show a message to the buyer, or redirect to a success page
          alert('You successfully subscribed! ' + data.subscriptionID);
      }

    }).render('#paypal-button-container');
  </script>