PayPal在退货时不发送交易信息

PayPal在退货时不发送交易信息,paypal,Paypal,我正在尝试实现PayPal支付,但无论到目前为止我找到了什么选项或答案,它仍然不会将交易信息发送回成功回调url(tx、st、amt和cc) 我已经将自动返回设置为on,PDT设置为on,尝试将rm设置为所有可能的值(0、1和2),但仍然没有成功 令人困惑的是,PayPal的文档清楚地提到,我应该在所有情况下获得它们,除非我使用的是rm 1并且包含返回url,但我就是没有 返回URL行为。如果设置为“1”且“返回”值为 提交后,付款完成后,将向买方发送 使用GET方法返回返回URL,并且没有事务

我正在尝试实现PayPal支付,但无论到目前为止我找到了什么选项或答案,它仍然不会将交易信息发送回成功回调url(tx、st、amt和cc)

我已经将自动返回设置为on,PDT设置为on,尝试将rm设置为所有可能的值(0、1和2),但仍然没有成功

令人困惑的是,PayPal的文档清楚地提到,我应该在所有情况下获得它们,除非我使用的是rm 1并且包含返回url,但我就是没有

返回URL行为。如果设置为“1”且“返回”值为 提交后,付款完成后,将向买方发送 使用GET方法返回返回URL,并且没有事务 变量将被提交。如果设置为“2”且“返回”值为 提交后,买家将使用 POST方法,所有可用的事务变量都将 也可以张贴。如果省略或设置为“0”,将使用GET方法 用于所有订阅交易和立即购买、捐赠或 未启用IPN的PayPal购物车交易。 其余部分将使用带有变量的POST方法

它确实返回到成功页面,但不包含事务信息(顺便说一句,即使将rm设置为2并具有适当的返回url,它仍然执行GET而不是POST,这就是为什么我怀疑文档已过时或沙盒环境已安装错误)

值得一提的是,以下是我的相关表单字段

<input type="hidden" name="business" value="sb-h7plu24373@business.example.com" />
<input type="hidden" name="return" value="@(Url.Action("Success", "Paypal", null, "https", (string) ViewBag.host))">
<input type="hidden" name="cancel_return" value="@(Url.Action("Failed", "Paypal", null, "https", (string) ViewBag.host))">
<input type="hidden" name="rm" value="2" />

你知道我错过了什么吗?我一直在考虑完全抛弃PDT并依赖IPN webhook,但我想我会先问一下


另外,我已经用一个实际的主机名进行了测试,现场调试,但仍然发生了相同的情况,它返回到返回url,但没有事务信息,我甚至检查了browser network(浏览器网络)选项卡来检查请求,以确保它在我的站点上没有什么可笑的地方,并且它确实在发送请求时没有事务信息

在沙箱环境中测试可能与您的PDT问题有关;它可能只是在现场工作。但这种设计和使用PDT更容易被忽视的一个问题是,回报率实际上从未得到保证。根据买家的地点和环境(例如客人结账),PayPal可能有义务向买家出示收据,在这种情况下,除非买家点击按钮退货,否则退货不是自动的。或者,买家的浏览器可能会在交易完成后但在退货发生之前崩溃或网络连接中断。因此,在实践中,PDT绝对不可靠,只能用于信息目的(例如,向客户显示感谢信息)您的任何业务逻辑(没错,没有)都不应该依赖PDT实际工作。

相反,正如您所提到的,您可以围绕IPN或Webhook构建您的设计,尽管这也可能是异步和延迟的


最健壮的解决方案是服务器端设计,通过对PayPal的API调用捕获数据,并根据服务器端API调用的响应立即通知成功/失败。下面是一个骨架演示:

请注意,在服务器端点的
fetch(
XHR)之前,不会发生PayPal事务,然后服务器端点必须对PayPal执行自己的捕获API调用