Php PayPal在SetExpressCheckout上返回ACK失败
我试图通过在PayPal中提供以下数据来获取PayPal的令牌:Php PayPal在SetExpressCheckout上返回ACK失败,php,paypal,paypal-sandbox,Php,Paypal,Paypal Sandbox,我试图通过在PayPal中提供以下数据来获取PayPal的令牌: Array ( [PAYMENTREQUEST_0_CURRENCYCODE] => EUR [PAYMENTREQUEST_0_INVNUM] => TLT-GR-1 [RETURNURL] => http://www.mysite.ext/my_app/payment-completed/ [CANCELURL] => http://www.mysite.ext/my_a
Array
(
[PAYMENTREQUEST_0_CURRENCYCODE] => EUR
[PAYMENTREQUEST_0_INVNUM] => TLT-GR-1
[RETURNURL] => http://www.mysite.ext/my_app/payment-completed/
[CANCELURL] => http://www.mysite.ext/my_app/payment-canceled/
[PAYMENTREQUEST_0_PAYMENTACTION] => Sale
[SOLUTIONTYPE] => Sole
[L_PAYMENTREQUEST_0_NAME0] => Product Description
[L_PAYMENTREQUEST_0_AMT0] => 0.38
[L_PAYMENTREQUEST_0_QTY0] => 19.27
[PAYMENTREQUEST_0_AMT] => 7.32
[PAYMENTREQUEST_0_ITEMAMT] => 1
)
这是生成上述数组值的代码:
$data = array();
$data['PAYMENTREQUEST_0_CURRENCYCODE'] = $currencyCode;
$data['PAYMENTREQUEST_0_INVNUM'] = $order->ID;
$data['RETURNURL'] = $returnUrl;
$data['CANCELURL'] = $cancelUrl;
$data['PAYMENTREQUEST_0_PAYMENTACTION'] = 'Sale';
$data['SOLUTIONTYPE'] = 'Sole';
$subtotal = 0;
$tax = 0;
$counter = 0;
foreach($products as $product)
{
if($product->Type == 0) // Production is diretion
{
if($product->NightDuration == 0)
{
$price = round($product->Price , 2);
$qty = round($product->Qty , 2);
$data['L_PAYMENTREQUEST_0_NAME' . $counter] = $product->Title;
$data['L_PAYMENTREQUEST_0_AMT' . $counter] = $price;
$data['L_PAYMENTREQUEST_0_NUMBER' . $counter] = ($counter + 1);
$data['L_PAYMENTREQUEST_0_QTY' . $counter] = $qty;
$data['L_PAYMENTREQUEST_0_TAXAMT' . $counter] = round(($qty * $price) * ($taxPercentage / 100), 2);
$data['L_PAYMENTREQUEST_0_ITEMCATEGORY' . $counter] = 'Digital';
$subtotal += $qty * $price;
$tax += ($qty * $price) * ($taxPercentage / 100);
}
else
{
}
}
else
{
}
$counter++;
}
$data['PAYMENTREQUEST_0_AMT'] = round($subtotal + $tax, 2);
$data['PAYMENTREQUEST_0_ITEMAMT'] = 1;
$data['PAYMENTREQUEST_0_TAXAMT'] = round($tax, 2);
echo "<pre>";
print_r($data);
echo "</pre>";
$data = http_build_query($data, '', '&');
$pp = new TaxiBookingPayPal();
$rt = $pp->PPHttpPost('SetExpressCheckout', $data);
echo "<pre>";
print_r($rt);
echo "</pre>";
你能看出代码中有什么错误吗?有人能帮我吗
在对我的代码进行了长时间的研究之后,我发现问题来自于我的数字中的十进制数字。问题是,我不知道小数到底出了什么问题:(
谢谢查看错误消息:购物车项目金额总计与订单金额不匹配
您发送给PayPal的数字不正确。(您确定您的计算正确吗?查看错误消息:购物车项目金额总额与订单金额不匹配
您发送给PayPal的数字不正确。(您确定您的计算正确吗?ITEMAMT+TAXAMT+SHIPPINGAMT+HANDLINGAMT必须等于AMT ITEMAMT应该只是这些项目的小计,但这里只传递了1 另外,你的数量是19.27。我从来没有专门测试过他们是否接受这样的数量值,但即使他们接受,你的ITEMAMT应该是7.32
在这种情况下,您没有传递其他值,因此您的ITEMAMT和AMT将是相同的。您在那里传递的1导致了您得到的错误,因为它不等于您的AMT。ITEMAMT+TaxaAmt+SHIPPINGAMT+HANDLINGAMT必须等于AMT ITEMAMT应该只是这些项目的小计,但这里只传递了1 另外,你的数量是19.27。我从来没有专门测试过他们是否接受这样的数量值,但即使他们接受,你的ITEMAMT应该是7.32
在这种情况下,您没有传递其他值,因此您的ITEMAMT和AMT将是相同的。您在那里传递的1导致了您得到的错误,因为它不等于您的AMT。检查是否有任何金额值的小数点不超过两个,例如“12.123”无效金额,而“12.12”是有效金额
准备购物车时,购物车的总金额+额外费用(税+运费)必须等于总金额检查任何金额值的小数点是否不超过两位,例如“12.123”无效,而“12.12”为有效金额
准备购物车时,购物车总金额+额外费用(税+运费)必须等于总金额我已经手动尝试过该计算,并且正确,为什么不自动?我刚刚通过放置生成数据的PHP代码来更新我的问题,以查看我的代码我已经手动尝试过该计算,并且正确,为什么不自动?我刚刚通过放置生成数据的PHP代码来更新我的问题查看什么是我的代码的数据我已经修改了我的代码,现在正在工作。问题是数量。在我的情况下,因为我不能在L_PAYMENTREQUEST_0_QTY0中使用小数,我已经计算了最终价格,然后我将其设置为物品的金额,数量设置为1,但是,正如你所看到的,这是一个错误的方法。我已经有了我的代码已经更正,现在可以使用了。问题是数量。在我的情况下,因为我不能在L_PAYMENTREQUEST_0_QTY0中使用小数,所以我计算了最终价格,然后我将其设置为物品的金额,数量设置为1,但正如你所看到的,这仍然是一个错误的方法。你是对的。在我的情况下,我有一些四位数的值,但是在使用这些值之前,我将它们四舍五入为两位小数长度。你是对的。在我的例子中,我有一些值是四位的,但在使用这些值之前,我将它们四舍五入为两位小数长度。
Array
(
[TIMESTAMP] => 2013%2d01%2d19T14%3a44%3a25Z
[CORRELATIONID] => bdfce7f34a1db
[ACK] => Failure
[VERSION] => 94
[BUILD] => 4181146
[L_ERRORCODE0] => 10413
[L_SHORTMESSAGE0] => Transaction%20refused%20because%20of%20an%20invalid%20argument%2e%20See%20additional%20error%20messages%20for%20details%2e
[L_LONGMESSAGE0] => The%20totals%20of%20the%20cart%20item%20amounts%20do%20not%20match%20order%20amounts%2e
[L_SEVERITYCODE0] => Error
)