我已经设置了一个使用IPN的PayPal网站,但我无法让PayPal将GET变量发送到我指定的返回网址。它将用户的浏览器发送到返回URL,但没有通过GET或POST传递任何内容。
我将PayPal商业帐户中的一个设置更改为:“付款数据传输(可选)”到On,在PayPal网站上生成“身份令牌”。
我还收到了来自PayPal的自动电子邮件说:
---------- Forwarded message ----------
From: service@paypal.com <service@paypal.com>
Subject: Payment Data Transfer (PDT) Has Been Enabled
This email is to inform you that you have successfully enabled Payment Data Transfer.
PDT's primary function is to display payment transaction details to buyers when they are redirected back to your site upon payment completion. However, there are cases, such as with pending transactions, where you won't receive notification of all transactions. For this reason, PayPal strongly recommends that you also enable Instant Payment Notification (IPN).
To learn more about enabling and setting up IPN:
https://www.paypal.com/us/cgi-bin/?cmd=p/xcl/rec/ipn-intro-outside
To learn more about Payment Data Transfer, including setup instructions and a complete list of variables:
https://www.paypal.com/us/cgi-bin/?cmd=p/xcl/rec/pdt-intro-outside
Sincerely,
PayPal
单击第二个链接并单击“技术概述”(https://www.paypal.com/us/cgi-bin/webscr?cmd=p/xcl/rec/pdt-techview-outside)显示:
您的POST应该发送给 https://www.paypal.com/cgi-bin/webscr。 您必须发布交易令牌 使用变量“tx”和值 之前的事务令牌 收到(例如 “tx = transaction_token”)和 特殊身份令牌使用 变量at和PDT的值 身份令牌(例如 “在= identity_token”)。你也会 需要附加一个名为“cmd”的变量 值为“_notify-synch”,用于 示例“cmd = _notify-synch”,到 POST字符串。
但是,我根本没有通过身份令牌,但一切正常!
(a) Is this a problem?
(b) Why is it working if the documentation implies that it shouldn't?
(c) Is this a consequence of specifying an outdated API version (58.0)? What is the value I should be using?
答案 0 :(得分:1)
在我看来,身份令牌应该是必需的参数,因为这是Paypal可以验证您所做的请求是否有效的唯一方式。否则,其他人可以简单地猜测一个交易ID(即使它不是针对他们的账户)并从Paypal获取该交易的详细信息。
我猜这是你遇到的一个错误。您是在Paypal沙箱中还是在实时环境中进行测试?
答案 1 :(得分:1)
意识到 OP 可能在 9 年后不再需要答案,但其他人可能仍然需要:
交易 ID 和身份令牌的 POST 纯粹是为了验证原始交易通知(通过 GET 方法传递到商家的返回 URL)实际上来自 PayPal。
这就好像是在对 PayPal 说,“我的网站刚刚收到了客户付款的假设确认。这里又是交易 ID 和我的卖家 ID。这是合法匹配吗?”
事实上,在 https://developer.paypal.com/docs/api-basics/notifications/payment-data-transfer/ 中,当谈到设置测试时,它只谈到让您的脚本准备好接收、解析和显示 GET 数据。它没有提到向 PayPal 发回邮件(尽管在其他地方提到了这一点)。所以,是的,PDT 功能应该可以工作,而无需在之后将 POST 返回 PayPal 并等待 SUCCESS 或 FAIL 的响应,但是...
任何知道自己在做什么的人都可以转到卖家的 URL 并附加带有正确变量组合的查询字符串,以伪造与 PayPal PDT 系统最初发送的相同类型的 GET 请求,无论交易 ID 是否为是真的。