【发布时间】:2014-07-02 06:15:08
【问题描述】:
我正在尝试使用 Express Checkout NVP API 实现定期付款。在成功流程 SetExpressCheckout -> 重定向到 PayPal 并接受 -> GetExpressCheckoutDetails -> CreateRecurringPaymentsProfile 后,当我尝试通过调用 SetExpressCheckout 获取新令牌(假设我尝试为另一个用户重复流程时),我收到错误:
{ TIMESTAMP: '2014-05-14T09:09:17Z',
CORRELATIONID: '9072df3650d68',
ACK: 'Failure',
VERSION: '113',
BUILD: '10958405',
L_ERRORCODE0: '10413',
L_SHORTMESSAGE0: 'Transaction refused because of an invalid argument. See additional error messages for details.',
L_LONGMESSAGE0: 'The totals of the cart item amounts do not match order amounts.',
L_SEVERITYCODE0: 'Error' }
如果我从请求中删除 PAYMENTREQUEST_0_AMT: 0,我会收到另一个错误,但这个错误带有令牌(每个请求都相同):
{ TOKEN: 'EC-2U787650918701539',
TIMESTAMP: '2014-05-14T09:13:09Z',
CORRELATIONID: 'd3f276219cab9',
ACK: 'Failure',
VERSION: '113',
BUILD: '10958405',
L_ERRORCODE0: '10410',
L_SHORTMESSAGE0: 'Invalid token',
L_LONGMESSAGE0: 'Invalid token.',
L_SEVERITYCODE0: 'Error' }
所以 PayPal 给了我一个令牌,但说它无效。我想这不是参数或其值的问题,而是令牌的问题。出于某种原因,PayPal 在第一次成功流程后停止发出新令牌以响应 SetExpressCheckout 请求。
完整流程:
1) 设置ExpressCheckout
USR: [...],
PWD: [...],
SIGNATURE: [...],
VERSION: 113,
METHOD: 'SetExpressCheckout',
PAYMENTREQUEST_0_AMT: 0,
MAXAMT: 5.0,
L_BILLINGTYPE0: 'RecurringPayments',
L_BILLINGAGREEMENTDESCRIPTION0: [...],
REQCONFIRMSHIPPING: 0,
NOSHIPPING: 1,
BRANDNAME: [...],
EMAIL: [...],
LANDINGPAGE: 'Login',
cancelUrl: [...],
returnUrl: [...]
2) 重定向到https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=TOKEN,用户接受计费协议。
3) GetExpressCheckoutDetails(步骤 1 中的凭据、方法和令牌)。
4) 创建RecurringPaymentsProfile
USR: [...],
PWD: [...],
SIGNATURE: [...],
VERSION: 113,
METHOD: 'CreateRecurringPaymentsProfile',
TOKEN: [from the step 1],
PAYERID: [from the step 3],
PROFILESTARTDATE: [ISO date string],
DESC: [...],
BILLINGPERIOD: 'Month',
BILLINGFREQUENCY: 1,
AMT: 5.0,
AUTOBILLOUTAMT: 'AddToNextBilling',
CURRENCYCODE: 'USD',
MAXFAILEDPAYMENTS: 1,
L_PAYMENTREQUEST_0_ITEMCATEGORY0: 'Digital',
L_PAYMENTREQUEST_0_NAME0: [...],
L_PAYMENTREQUEST_0_AMT0: 5.0,
L_PAYMENTREQUEST_0_QTY0: 1
就是这样。我使用 node.js request 来完成请求。
【问题讨论】:
-
我无法使用相同的参数重新创建此错误。你能把你的电话同时发给 SetExpressCheckout 和 CreateRecurringPaymentsProfile 吗?
-
当然,我已经更新了问题。
标签: node.js express paypal paypal-sandbox paypal-subscriptions