捕获用于使用 PayPal 支付的支付方式 Checkout/Orders API

Capture payment method used to pay with PayPal Checkout/Orders API

我正在使用 PayPal Checkout 的标准集成(通过订单 API),并希望获取客户支付的实际付款方式——我相信 PayPal 称之为“资金来源”与,以便我可以将此值传递到我的服务器并将其保存到我的数据库中。

我需要调用什么 API 对象来获取此信息?

当使用 JS SDK buttons 调用您的服务器时,您可以通过传递 onClick 函数来跟踪您网站上的哪个按钮被点击;它的第一个参数将是一个 fundingSource 设置为例如的对象。 “paypal”、“venmo”、“卡”、“paylater”。将其存储到全局或 w/e,然后您可以将其包含在从 onApprove 捕获订单时发送到服务器的 JSON 正文中。

但是,付款人最终使用的实际资金方式可能与最初的点击选择不对应,并且不会返回;此信息和所有其他账单信息在设计上对 PayPal 中的付款人保密。

这是一种与普雷斯顿概述的方法类似的方法,同样它的局限性是它仅returns最初选择的按钮的资金来源 而不是用户实际支付的那个(因为这可以由用户从 PayPal 模式中更改)。

这似乎是目前使用 Standard integration of PayPal Checkout can get to obtaining the payment method the user actually paid with because, for some reason, PayPal only sees it necessary to expose that information (which does exist in the API) to developers who have implemented the Advanced 集成的最接近的。

如果您像我一样投入大量时间来集成标准集成,却发现为时已晚(由于集成和 API 的文档不完善),这将令人失望标准集成只能访问数据有限的 API 的残缺版本。


在您的 client-side JavaScript, 中添加 fundingSource: fundingSource 和您想要从订单数据中获取的任何其他变量:

paypal.Buttons({

...

onApprove: function (data, actions) {
    return fetch("/route/to/paypal/capture", {
        method: "POST",
        headers: {
            "Content-Type": "application/json",
        },
        body: JSON.stringify({
            fundingSource: fundingSource, 
            // Add any other variables you need here
        }),
    })

...

然后,在您的服务器上获取付款时,使用:

$data = json_decode($request->getContent(), true);
...
$payment_method = $data["fundingSource"];