Paypal: DoExpressCheckoutPayment方法仅限于无效令牌。

3
我开始使用PayPal,并且我的第一项工作是在我们的网站上进行调试。
实际上,当我们完成订单时,它可以正常工作,但是我们在日志中遇到了一个堆栈:"Invalid token (#10410: Invalid Token)"。 当调用doExpressCheckoutPayment时发生这种情况,似乎没有令牌和付款人ID,因此会抛出错误。 所有其他信息似乎都填写正确。
下面是调用doExpressCheckoutPayment的调试结果:
[DoExpressCheckoutPayment] => Array
(
    [TOKEN] => 
    [PAYERID] => 
    [PAYMENTACTION] => Sale
    [AMT] => 4.16
    [CURRENCYCODE] => EUR
    [BUTTONSOURCE] => Varien_Cart_EC_FR
    [NOTIFYURL] => *
    [RETURNFMFDETAILS] => 1
    [ITEMAMT] => 3.36
    [TAXAMT] => 0.80
    [SHIPPINGAMT] => 0.00
    [L_NUMBER0] => *
    [L_NAME0] => *
    [L_QTY0] => 1
    [L_AMT0] => 4.10
    [L_NUMBER1] => 
    [L_NAME1] => Discount
    [L_QTY1] => 1
    [L_AMT1] => -0.74
    [BUSINESS] => 
    [EMAIL] => *
    [FIRSTNAME] => *
    [LASTNAME] => *
    [MIDDLENAME] => 
    [SALUTATION] => 
    [SUFFIX] => 
    [COUNTRYCODE] => *
    [STATE] => *
    [CITY] => *
    [STREET] => *
    [ZIP] => *
    [PHONENUM] => *
    [SHIPTOCOUNTRYCODE] => *
    [SHIPTOSTATE] => *
    [SHIPTOCITY] => *
    [SHIPTOSTREET] => *
    [SHIPTOZIP] => *
    [SHIPTOPHONENUM] => *
    [SHIPTOSTREET2] => 
    [STREET2] => 
    [SHIPTONAME] => *
    [ADDROVERRIDE] => 1
    [METHOD] => DoExpressCheckoutPayment
    [VERSION] => 72.0
    [USER] => ****
    [PWD] => ****
    [SIGNATURE] => ****
)

[response] => Array
(
    [TIMESTAMP] => 2013-03-07T15:01:45Z
    [CORRELATIONID] => 64adbc2375f59
    [ACK] => Failure
    [VERSION] => 72.0
    [BUILD] => 5331358
    [L_ERRORCODE0] => 10410
    [L_SHORTMESSAGE0] => Invalid token
    [L_LONGMESSAGE0] => Invalid token.
    [L_SEVERITYCODE0] => Error
)

问题在于刚刚调用此方法后,会调用setExpressCheckout并成功,因此订单被正确地放置。
以下是调用setExpressCheckout时的成功响应:
[response] => Array
(
    [TOKEN] => EC-5UG654898R029060W
    [TIMESTAMP] => 2013-03-07T15:01:48Z
    [CORRELATIONID] => 348b58c6200c1
    [ACK] => Success
    [VERSION] => 72.0
    [BUILD] => 5331358
)

我不明白为什么在执行doExpressCheckoutPayment时会抛出错误,而执行setExpressCheckout时却没有检测到错误,交易仍然被接受...这是为什么呢?
方法调用的顺序有问题吗?我的意思是,setExpressCheckout应该不是在doExpressCheckoutPayment之前调用的吗?
我们在使用PayPal时遇到了另一个问题,我希望解决这个问题能解决另一个问题...
非常感谢你们的帮助!
Seb
1个回答

3

SetExpressCheckout应该首先发生 -- 您获得的令牌是您将客户浏览器重定向所需的,当他们返回时,他们将在URL中拥有该令牌,这是如果您需要查看其送货地址和相关信息,您可以使用getExpressCheckoutDetails,最后您运行doExpressCheckoutPayment来完成交易。

重申一下:从setEC获取有效的令牌,将此令牌用于重定向,在客户返回到RETURNURL时,将此令牌附加回来,并且您在任何后续的getECdoEC调用中引用此令牌。


非常感谢,这正是我所想的,流程顺序并不好。现在我必须了解Paypal是如何能够接受所有这些交易而没有任何令牌的。因为它实际上是在线运行的,并且工作良好...不知道原因,但我必须修复它!谢谢! - beluga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接