在哪里输入paypal IPN url以及如何传递自定义数据?

在哪里输入paypal IPN url以及如何传递自定义数据?,paypal,paypal-sandbox,paypal-ipn,Paypal,Paypal Sandbox,Paypal Ipn,这似乎是一组非常幼稚的问题,但我真的找不到 问题1)我正在尝试为PayPal实施IPN。我想输入侦听器URL,但找不到位置。我在网上搜索过,所有的回复都是旧的。我可以把它放在哪里 问题2)我正在使用以下代码,我希望传递自定义数据,以便在IPN向我发回事务消息时,它将在其中包含该自定义数据。我需要传递2个自定义数据。下面的代码如何实现这一点?我在文件里也找不到这个 <template> <div id="paypal-button-container"></div

这似乎是一组非常幼稚的问题,但我真的找不到

问题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>

导出默认值{
道具:[“金额”],
安装的(){
让自我=这个;
贝宝
.按钮({
createOrder:函数(数据、操作){
//设置事务
return actions.order.create({
购买单位:[
{
金额:{
值:self.amount,
}
}
],
});
},
onApprove:功能(数据、操作){
//从交易中获取资金
返回actions.order.capture().then(函数(详细信息){
//向买家显示成功消息
控制台日志(详细信息);
self.$emit(“paypalPaySuccess”{
订单号:details.id,
})
警报(“交易由“+详细信息.付款人.名称.给定名称”完成);
}).catch((错误)=>{
})
}
})
.render(“贝宝按钮容器”);
}
};
添加一些问题 我正在使用仪表板中的所有事件

我需要补充一些问题,因为我找不到我需要的信息

问题3)在客户端,我制作
action.orders.capture()。然后
。这意味着我可以立即获得资金。当Webhook出现在我的后端时,有两个Webhook用于一次性付款。(
PAYMENT.CAPTURE.PENDING and CHECKOUT.ORDER.APPROVED
)。a) 为什么PAYMENT.CAPTURE.COMPLETED不能作为webhook事件到达?b) 如果我想得到拒绝事件怎么办?如果
PAYMENT.CAPTURE.COMPLETED
未到达,
PAYMENT.CAPTURE.DENIED
也不会到达

问题4)正如我所说,在我的后端出现了两个用于单次付款的webhook事件。第一个里面有id。假设我将其作为id和状态(待定)存储在数据库中。然后又出现了另一个事件,即CHECKOUT.ORDER.APPROVED。现在,这个和前一个有不同的id。所以我不能返回数据库并更新状态,因为它有不同的id。我该怎么办?我注意到的一点是,第二个事件在捕获的对象中的某处也有另一个id(前一个事件)。这是我应该用的吗?哪一个是最终交易id

问题5)结果是发票id每次都应该是唯一的。所以我想传递user_id,但我想我也应该生成随机字符串,并将其附加到user_id,如下所示:invoice_id:'7,randomstring'。对吧?


问题6)同一事件有时会发生两次。为什么呢?我是否应该返回状态200,以便同一事件不再发生?何时返回该状态比较好?我想在我更新数据库之后,对吗?

Q1:IPN已被弃用。您应该使用Webhook,例如CHECKOUT.ORDER.APPROVED

Q2:似乎没有任何特定的方式来传递自定义数据

备选案文1:

我最后做的是在采购单位中使用发票id字段。我测试并发现我可以通过一个相当长的字符串,而且它们不必是唯一的。这似乎有点像黑客,但它是有效的

当您实现CHECKOUT.ORDER.APPROVED webhook时,您就可以解析purchase\u unit invoice\u id中的数据

备选案文2:

我考虑的另一个不需要破解发票id的想法是,使用javascript中捕获事件的细节将数据发送到服务器,将定制信息与订单id一起存储在数据库中,然后在webhook出现时,将订单id与保存的id交叉匹配以检索信息

我更喜欢选项1,但您的需求可能会有所不同

这很好地说明了整个PayPal API的设计有多么糟糕。在实现方面存在巨大的差距,文档很少,支持率为零


我还必须实现Stripe。整个实施过程花了我3天时间。同样的PayPal实现花了我3个多星期!缺少文档、必须不断尝试,以及沙箱实现的不一致性都是实时杀手。

需要在您的商户帐户设置中输入IPN Url。也许这个文件会帮助你。但我不确定IPN是否会与Paypal Express结帐按钮一起工作。你找到的这些答案可能是旧的,但不会使它们出错。传递自定义数据的方法是使用名为err的POST参数,
custom
。这些都在PayPal IPN指南中有记录。IPN已被弃用。请查看我上面的代码。我认为没有任何方法可以将自定义数据放在那里。非常感谢。我非常感激。你是英雄。我又增加了两个问题。你可以救我。仔细看看。也许你可以再帮我一次。