将用户 ID 和产品 ID 传递给 Paypal Button

Passing both user ID and product ID to Paypal Button

我正在使用 @paypal/react-paypal-js 显示 PayPal 按钮并创建订单。我对处理信用卡付款特别感兴趣。一旦我的 Django 后端收到来自 PayPal 的付款捕获完成事件,它就需要存储有关拥有特定产品的特定用户的信息。因此,通知必须同时包含用户 ID(即电子邮件)和产品 ID。

这就是我试图在前端传递这两条信息的方式:

createOrder={(data, actions) => {
    return actions.order.create({
        purchase_units: [
            {
                amount: {
                    value: course.price,
                    currency_code: course.currency,
                },
                custom_id: course.title,
            },
        ],
        payer: {
            email_address: userEmail,
        }
    });
}}

这是我的 onApprove:

onApprove={(data, actions) => onSuccess(data, actions)}

其中onSuccess实现如下:

const onSuccess= (data, actions) => {
    return actions.order.capture().then(
        function (details) {
            toast.success('Payment completed. Thank you, ' + 
                          details.payer.name.given_name,
                          {duration: 6000})
        }
    );
}

用户电子邮件地址会自动填写到表单中。但是,服务器中的 webhook_event 事件不包含此信息。即webhook_eventresource内部没有payer字段。

我也试过将 payee: {email_address: userEmail} 添加到 purchase_units,但是在按下 PayPal 按钮后没有使用信用卡支付的选项。该选项已被创建 PayPal 帐户的选项所取代。

如何将这两条信息传递到webhook_event中? (我想避免将两个部分连接成 custom_id 的丑陋解决方案)

I also tried adding payee: {email_address: userEmail} into purchase_units, but then there was no option to pay with credit card after pressing on the PayPal button. That option got replaced by the option to create a PayPal account.

payee 设置哪个帐户接收 PayPal 付款。如果收款人的 PayPal 帐户存在并已确认,黑色借记卡或信用卡按钮通常可用于客人付款。

How can I pass the two pieces of information so as to get them in webhook_event?

如果你绝对必须将两条信息存储为自定义值的一部分(通常只对订阅有用,尽管即使对于订阅也有更好的解决方案涉及使用你自己的数据库),你可以编码一个 JSON 使用 json.dumps({'email': somevalue, 'product': somevalue} 对象并将该 json 字符串值存储在 custom_id 中——然后在收到后使用 json.loads.

对其进行解码

然而,需要做这样的事情并不常见,尤其是对于一次性订单付款。您应该从您自己的服务器路由实现订单创建和捕获,并在成功捕获后立即将必要的信息存储在您自己的数据库中,然后再将捕获结果返回给按钮JavaScript。请参阅 Set up standard payments.

中的服务器集成信息

在这种情况下根本不需要 Webhook,更不用说从 Webhook 检索项目信息了。但是,您可以并且应该通过 items 数组将商品信息作为信息的一部分包含在 PayPal 交易中。这也会在结帐时在右上角的购物车下拉菜单中向付款人显示,并在已完成的 paypal.com 交易详情中可见。