运费总额和即时更新 API 的 PayPal 错误

Posted

技术标签:

【中文标题】运费总额和即时更新 API 的 PayPal 错误【英文标题】:PayPal error with shipping totals & Instant Update API 【发布时间】:2012-07-22 22:26:17 【问题描述】:

我正在尝试调用 ExpressCheckout 并执行即时更新 API,但无论我做什么,它似乎都会返回一个无效的运输总额错误。我知道在实时运行时需要使用 SSL,但是我正在尝试针对沙箱进行测试,但仍然遇到这些错误。

我的简单 html 测试页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Express Checkout with Callback API - PayPal</title>
</head>
<body>
<h1 align="center"> Express Checkout with Callback API </h1>
<h3 align="center"> PayPal </h3>
     <form method=post action=https://api-3t.sandbox.paypal.com/nvp> 
        <input type=hidden name=USER value=xxxxxxxxxxx> 
        <input type=hidden name=PWD value=xxxxxxxx> 
        <input type=hidden name=SIGNATURE value=xxxxxxxxxxxxxxxxxxxxxxx> 
        <input type=hidden name=VERSION value=63.0> 
        <input type=hidden name=PAYMENTREQUEST_0_PAYMENTACTION value=Sale> 
        <input name=PAYMENTREQUEST_0_AMT value=19.95> 
        <input type=hidden name=RETURNURL value=https://www.YourReturnURL.com> 
        <input type=hidden name=CANCELURL value=https://www.YourCancelURL.com>
        <input type=hidden name=MAXAMT value=100.00>
        <input type=hidden name=callback value=....../callback.php>
        <input type=hidden name= callbacktimeout value=5>
        <input type=hidden name= l_shippingoptionisdefault0 value=true> 
        <input type=hidden name= l_shippingoptionname0 value=Ground>
        <input type=hidden name= l_shippingoptionlabel0 value=5 Days>
        <input type=hidden name= l_shippingoptionamount0 value=10.00>
        <input type=hidden name= shippingamt value=10.00>
        <input type=submit name=METHOD value=SetExpressCheckout> 
    </form>
</body>
</html>

我的 callback.php 脚本托管在我的服务器上:

<?php
foreach ($_POST as $key => $value) 
$value = urlencode(stripslashes($value));
$req = "&$key=$value";


//Build string
$method = $_POST['METHOD'];
$version = $_POST['CALLBACKVERSION'];
$token = $_POST['TOKEN'];
$currencycode = $_POST['CURRENCYCODE'];
$localecode = $_POST['LOCALECODE'];
$street = $_POST['SHIPTOSTREET'];
$street2 = $_POST['SHIPTOSTREET2'];
$city = $_POST['SHIPTOCITY'];
$state = $_POST['SHIPTOSTATE'];
$country = $_POST['SHIPTOCOUNTRY'];
$zip = $_POST['SHIPTOZIP'];

//If PayPal acocunt has US address
if ($country=="US") 
    echo "METHOD=CallbackResponse&L_SHIPPINGOPTIONNAME0=Ground&L_SHIPPINGOPTIONLABEL0=5 to 7 Days&L_SHIPPINGOPTIONAMOUNT0=10.00&L_SHIPPINGOPTIONISDEFAULT0=true";
       

//If PayPal account has a non-US address    
else 
    echo "METHOD=CallbackResponse&L_SHIPPINGOPTIONNAME0=Next Day Air&L_SHIPPINGOPTIONLABEL0=7 to 14 Days&L_SHIPPINGOPTIONAMOUNT0=20.00&L_SHIPPINGOPTIONISDEFAULT0=true";
    
?>

我已从代码中删除了一些敏感信息,并将所有运费值更改了 100 次,如果有一些愚蠢的错误,请见谅。任何帮助将不胜感激,谢谢!

【问题讨论】:

使用不同的回调脚本(来自 PayPal)返回相同的错误,所以我猜我的问题出在 HTML 中。要么声明错误,要么根本没有声明。 您的运费总额无效,严重。我要做的第一件事是修复你的 HTML,你的引号在哪里?二、搜索“PayPal express checkout API reference” 【参考方案1】:

根据Paypal's Developer Guide(第58页)声称CURRENCYCODE是必需的。尽管在我的测试中似乎并非如此。但值得一试。

另外 url 编码你的值也可能这样做......所以把你的空格变成 +s。

我已将其用作有效的测试响应: L_INSURANCEAMOUNT1=1.35&amp;L_SHIPPINGOPTIONISDEFAULT2=false&amp;L_SHIPPINGOPTIONNAME0=1%3A+&amp;L_SHIPPINGOPTIONNAME1=2%3A+&amp;L_SHIPPINGOPTIONLABEL0=asdf&amp;L_SHIPPINGOPTIONLABEL1=UPS+Express+2+Days&amp;OFFERINSURANCEOPTION=true&amp;CURRENCYCODE=USD&amp;L_INSURANCEAMOUNT2=1.28&amp;L_TAXAMT0=2.20&amp;L_SHIPPINGOPTIONAMOUNT1=10.00&amp;L_SHIPPINGOPTIONAMOUNT0=20.00&amp;L_SHIPPINGOPTIONAMOUNT2=9.99&amp;L_SHIPPINGOPTIONISDEFAULT1=true&amp;L_SHIPPINGOPTIONISDEFAULT0=false&amp;L_SHIPPINGOPTIONNAME2=3%3A+&amp;L_SHIPPINGOPTIONLABEL2=UPS+Ground+2+to+7+Days&amp;L_TAXAMT1=2.00&amp;METHOD=CallbackResponse&amp;L_INSURANCEAMOUNT0=1.35&amp;L_TAXAMT2=1.99

【讨论】:

以上是关于运费总额和即时更新 API 的 PayPal 错误的主要内容,如果未能解决你的问题,请参考以下文章

PayPal ExpressCheckout API:以当地货币获取交易总额

带有运费和错误的 Paypal Express 结帐

在 WooCommerce 中更改订单运费总额

PayPal REST API 付款可以计算运费和税金吗?

如何在使用 PayPal rest API 执行付款之前更改运费

Paypal API NVP 将运费添加到每月付款计划