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 - 缺少数据的主要内容,如果未能解决你的问题,请参考以下文章
是否有一个等效的 REST API 函数来获取 Paypal 帐户的余额,类似于 NVP 获取余额 API? [关闭]
PayPal NVP API SetExpressCheckout ALLOWNOTE 不起作用
Paypal API (NVP) TransactionSearch 给出错误 10004 - 开始日期无效