PayPal Java NVP API GetExpressCheckoutDetails - 缺少数据

Posted

技术标签:

【中文标题】PayPal Java NVP API GetExpressCheckoutDetails - 缺少数据【英文标题】:PayPal Java NVP API GetExpressCheckoutDetails - Missing Data 【发布时间】:2013-09-16 03:20:53 【问题描述】:

我正在通过 Java Web 应用程序的“快速结帐”流程调用 PayPal 沙箱。第一次调用 ('SetExpressCheckout') 成功,我按预期收到了一个 Token。

第二次调用 ('GetExpressCheckoutDetails') 在获得 ACK=Success 答案方面也成功。但是缺少所有付款人信息数据,例如 FIRSTNAME、LASTNAME 或 SHIPTOCITY。

这是我使用参数调用的 URL:

https://api-3t.sandbox.paypal.com/nvp?TOKEN=__MY_TOKEN__&VERSION=106.0&SIGNATURE=__MY_SIGNATURE__&METHOD=GetExpressCheckoutDetails&PWD=__MY_PASSWORD__&USER=__MY_USERNAME__

这是我得到的响应正文:

TOKEN=__MY_TOKEN__&CHECKOUTSTATUS=PaymentActionNotInitiated&TIMESTAMP=2013%2d09%2d11T20%3a56%3a36Z&CORRELATIONID=bb3916c14aa78&ACK=Success&VERSION=106%2e0&BUILD=7645184&CURRENCYCODE=USD&AMT=12%2e00&SHIPPINGAMT=0%2e00&HANDLINGAMT=0%2e00&TAXAMT=0%2e00&INSURANCEAMT=0%2e00&SHIPDISCAMT=0%2e00&PAYMENTREQUEST_0_CURRENCYCODE=USD&PAYMENTREQUEST_0_AMT=12%2e00&PAYMENTREQUEST_0_SHIPPINGAMT=0%2e00&PAYMENTREQUEST_0_HANDLINGAMT=0%2e00&PAYMENTREQUEST_0_TAXAMT=0%2e00&PAYMENTREQUEST_0_INSURANCEAMT=0%2e00&PAYMENTREQUEST_0_SHIPDISCAMT=0%2e00&PAYMENTREQUEST_0_INSURANCEOPTIONOFFERED=false&PAYMENTREQUEST_0_ADDRESSNORMALIZATIONSTATUS=None&PAYMENTREQUESTINFO_0_ERRORCODE=0

如果我将相同的请求 URL 放入 Firefox,我会收到预期的响应:

TOKEN=__MY_TOKEN__&CHECKOUTSTATUS=PaymentActionNotInitiated&TIMESTAMP=2013%2d09%2d11T20%3a37%3a31Z&CORRELATIONID=7804316ba643d&ACK=Success&VERSION=106%2e0&BUILD=7645184&EMAIL=mne%2dcustomer2%40m%2dn%2de%2ede&PAYERID=QRZ57KR8PHVF4&PAYERSTATUS=verified&FIRSTNAME=Frank&LASTNAME=Forest&COUNTRYCODE=US&SHIPTONAME=Frank%20Forest&SHIPTOSTREET=1%20Main%20St&SHIPTOCITY=San%20Jose&SHIPTOSTATE=CA&SHIPTOZIP=95131&SHIPTOCOUNTRYCODE=US&SHIPTOCOUNTRYNAME=United%20States&ADDRESSSTATUS=Confirmed&CURRENCYCODE=USD&AMT=15%2e00&SHIPPINGAMT=0%2e00&HANDLINGAMT=0%2e00&TAXAMT=0%2e00&INSURANCEAMT=0%2e00&SHIPDISCAMT=0%2e00&PAYMENTREQUEST_0_CURRENCYCODE=USD&PAYMENTREQUEST_0_AMT=15%2e00&PAYMENTREQUEST_0_SHIPPINGAMT=0%2e00&PAYMENTREQUEST_0_HANDLINGAMT=0%2e00&PAYMENTREQUEST_0_TAXAMT=0%2e00&PAYMENTREQUEST_0_INSURANCEAMT=0%2e00&PAYMENTREQUEST_0_SHIPDISCAMT=0%2e00&PAYMENTREQUEST_0_INSURANCEOPTIONOFFERED=false&PAYMENTREQUEST_0_SHIPTONAME=Frank%20Forest&PAYMENTREQUEST_0_SHIPTOSTREET=1%20Main%20St&PAYMENTREQUEST_0_SHIPTOCITY=San%20Jose&PAYMENTREQUEST_0_SHIPTOSTATE=CA&PAYMENTREQUEST_0_SHIPTOZIP=95131&PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE=US&PAYMENTREQUEST_0_SHIPTOCOUNTRYNAME=United%20States&PAYMENTREQUEST_0_ADDRESSSTATUS=Confirmed&PAYMENTREQUEST_0_ADDRESSNORMALIZATIONSTATUS=None&PAYMENTREQUESTINFO_0_ERRORCODE=0

此预期答案包含 PAYERID、FIRSTNAME、LASTNAME、SHIPTOSTREET、SHIPTOCITY 等。

我尝试使用从 java 调用 PayPal 沙箱

Apache HttpClient GET 请求 Apache HttpClient POST 请求 javax.net.ssl.HttpsURLConnection java.net.URLConnection

我尝试在 mac OS X 上的 JBoss 7.1.1 和 win8 上的 JBoss 7.2.0 中运行 webapp。

我还尝试将端口号明确地放在 URL 中 (https://api-3t.sandbox.paypal.com:443)

结果总是一样的。当我从 java 调用时,付款人信息(姓名、地址)丢失。

有人知道出了什么问题吗?

更新:从 Eclipse 调用 PayPal 沙箱(Apache HttpClient GET 请求)返回正确的响应。所以我认为这可能与 JBoss AS 有关。

【问题讨论】:

【参考方案1】:

致电 SetExpressCheckout 后,您必须将买家重定向到 PayPal (https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=__MY_TOKEN__) 并让他们登录并批准付款。在他们完成此操作并返回您的网站后,调用 GetExpressCheckoutDetails 以检索他们的信息。

【讨论】:

谢谢马特,我实际上有错误的顺序 1. SetExpressCheckout 2. GetExpressCheckoutDetails 3. 将用户重定向到 PayPal。正确的是 1. SetExpressCheckout,2. 将用户重定向到 PayPal,3. 返回我的页面后 GetExpressCheckoutDetails。 使用沙盒 - 正如文森特所做的那样 - 我建议重定向到沙盒 URL:https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=__MY_TOKEN__

以上是关于PayPal Java NVP API GetExpressCheckoutDetails - 缺少数据的主要内容,如果未能解决你的问题,请参考以下文章

PayPal NVP API:创建定期付款

是否有一个等效的 REST API 函数来获取 Paypal 帐户的余额,类似于 NVP 获取余额 API? [关闭]

PayPal NVP API SetExpressCheckout ALLOWNOTE 不起作用

Paypal API (NVP) TransactionSearch 给出错误 10004 - 开始日期无效

Paypal Refund NVP API : 您无权退款此交易

PayPal NVP API - 获取快速结帐令牌