Nik*_*ili 3 paypal paypal-sandbox paypal-ipn
这似乎是一组很幼稚的问题,但我真的找不到。
问题 1)我正在尝试为 PayPal 实施 IPN。我想输入侦听器 URL,但找不到位置。我在互联网上搜索过,所有的回答都很旧。我可以把它放在哪里?
问题 2)我正在使用以下代码,我想传递自定义数据,以便当 IPN 向我发送回交易消息时,它会包含该自定义数据。我需要传递 2 个自定义数据。下面的代码怎么可能呢?我真的在文档中也找不到这个。
<template>
<div id="paypal-button-container"></div>
</template>
<script>
export default {
props: ["amount"],
mounted() {
let self = this;
paypal
.Buttons({
createOrder: function(data, actions) {
// Set up the transaction
return actions.order.create({
purchase_units: [
{
amount: {
value: self.amount,
}
}
],
});
},
onApprove: function(data, actions) {
// Capture the funds from the transaction
return actions.order.capture().then(function(details) {
// Show a success message to your buyer
console.log(details);
self.$emit("paypalPaySuccess", {
order_id: details.id,
})
alert("Transaction completed by " + details.payer.name.given_name);
}).catch((err)=>{
})
}
})
.render("#paypal-button-container");
}
};
</script>
Run Code Online (Sandbox Code Playgroud)
我正在使用仪表板中的所有事件。
我需要补充一些问题,因为我找不到我需要的信息。
问题 3) 在客户端,我使action.orders.capture().then. 这意味着我会立即获取资金。当 webhooks 来到我的后端时,有 2 个 webhooks 用于单次付款。( PAYMENT.CAPTURE.PENDING and CHECKOUT.ORDER.APPROVED) 。a) 为什么PAYMENT.CAPTURE.COMPLETED没有作为 webhook 事件到达?b) 如果我想获得 DENIED 事件怎么办?如果PAYMENT.CAPTURE.COMPLETED没有到达,PAYMENT.CAPTURE.DENIED也不会到达。
问题 4)正如我所说,在我的后端出现了 2 个单笔付款的 webhook 事件。第一个里面有id。假设我将其作为 id 和 status(PENDING) 存储在我的数据库中。然后另一个事件是CHECKOUT.ORDER.APPROVED。现在,这个和前一个有不同的 id。所以我无法真正返回数据库并更新状态,因为它具有不同的 ID。我该怎么办?我注意到的一件事是第二个发生的事件在捕获的对象中的某处还有另一个 id(前一个发生的事件)。这是我应该使用的吗?哪个是最终的transaction_id?
问题 5)结果 invoice_id 每次都应该是唯一的。所以我想传递 user_id 但我想我也应该生成随机字符串并将其附加到 user_id 像这样:invoice_id: '7,randomstring'。对?
问题 6)同一事件有时会出现两次。这是为什么?我是否应该返回状态 200 以使同一事件不再发生?什么时候可以恢复那个状态?我想在我更新数据库后,对吧?
问题 1:不推荐使用 IPN。您应该使用 webhooks,例如 CHECKOUT.ORDER.APPROVED
Q2:似乎没有任何特定的方式来传递自定义数据。
选项1:
我最终做的是使用purchase_units 中的invoice_id字段。我测试并发现我可以传递相当长的字符串并且它们不必是唯一的。这似乎有点黑客,但它的工作原理。
当您实现 CHECKOUT.ORDER.APPROVED webhook 时,您可以解析purchase_unit invoice_id 中的数据。
选项 2:
我考虑的另一个不需要破解invoice_id的想法是使用javascript中捕获事件的详细信息将数据发送到服务器,存储该自定义信息以及数据库中的订单ID,然后当webhook 发生时,将订单 ID 与保存的订单 ID 交叉匹配以检索信息。
我更喜欢选项 1,但您的需求可能会有所不同。
尽管整个 PayPal API 的设计很糟糕,但这很能说明问题。实施存在巨大差距,文档很少,支持为零。
我也必须实施 Stripe。整个实施花了我 3 天时间。同样的 PayPal 实施花了我 3 个多星期!缺乏文档、必须不断地尝试,以及沙箱实现的不一致是实时杀手。
| 归档时间: |
|
| 查看次数: |
590 次 |
| 最近记录: |