如何从 Paypal 的按钮捕获并安全地验证付款完成情况?

问题描述

按照 https://www.paypal.com/buttons 中的代码,我点击“智能按钮”链接生成并复制代码,因此我将以下内容添加到我们的付款页面(使用我们的实际客户 ID 而不是 XXXXXX.... ):

<div id="smart-button-container">
  <div style="text-align: center;">
    <div id="paypal-button-container"></div>
  </div>
</div>
<script src="https://www.paypal.com/sdk/js?client-id=XXXXXXXXXXXXXXXXX&currency=USD" data-sdk-integration-source="button-factory"></script>
<script>
  function initPayPalButton() {
    paypal.Buttons({
      style: {
        shape: 'rect',color: 'gold',layout: 'vertical',label: 'paypal',},createOrder: function(data,actions) {
      return actions.order.create({
        purchase_units: [{"description":"Subscription to our service","amount":{"currency_code":"USD","value":10}}]
      });
    },onApprove: function(data,actions) {
      return actions.order.capture().then(function(details) {
        alert('Transaction completed by ' + details.payer.name.given_name + '!');
      });
    },onError: function(err) {
      console.log(err);
    }
    }).render('#paypal-button-container');
  }
initPayPalButton();
</script>

问题:我如何实际记录(在服务器端)付款已完成?我似乎遗漏了一些谜题——根据上述代码,我看到的唯一选择是从 onApprove 代码调用服务器端脚本;但我不知道如何安全地做到这一点:用户根本无法进行任何付款并调用传递相同参数的相同脚本。

我在相关问题上看到 webhooks 似乎是答案;但是,我发现 here 都是服务器端的,这对我来说没有任何意义(我希望作为 JavaScript 的一部分,我会给 Paypal 我服务器上的 URL,我希望他们在付款完成)。任何提示或指示将不胜感激。

解决方法

我如何实际记录(在服务器端)付款已完成?

使用服务器端集成。

创建两条路线,一条用于“创建订单”,另一条用于“捕获订单”,如下所述:https://developer.paypal.com/docs/business/checkout/server-side-api-calls/#server-side-api-calls

与您的两条路线配对的前端批准代码是https://developer.paypal.com/demo/checkout/#/pattern/server