将用户 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_event
中resource
内部没有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 交易详情中可见。
我正在使用 @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_event
中resource
内部没有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 交易详情中可见。