Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Paypal API:购物车项目金额的总和与订单金额不匹配_Php_Paypal_Express Checkout - Fatal编程技术网

Php Paypal API:购物车项目金额的总和与订单金额不匹配

Php Paypal API:购物车项目金额的总和与订单金额不匹配,php,paypal,express-checkout,Php,Paypal,Express Checkout,我正在使用paypal express checkout API,在设置数量方面遇到问题。以下是我的URI参数: $params = array( 'METHOD' => 'SetExpressCheckout', 'PAYMENTREQUEST_0_SHIPPINGAMT' => '0', 'PAYMENTREQUEST_0_TAXAMT' => '0', 'PAYMENTREQUEST_0_HANDLINGAMT' => '0', 'PA

我正在使用paypal express checkout API,在设置数量方面遇到问题。以下是我的URI参数:

$params = array(
   'METHOD' => 'SetExpressCheckout',
   'PAYMENTREQUEST_0_SHIPPINGAMT' => '0',
   'PAYMENTREQUEST_0_TAXAMT' => '0',
   'PAYMENTREQUEST_0_HANDLINGAMT' => '0',
   'PAYMENTREQUEST_0_AMT' => "50.00",
   'RETURNURL' => $this->_returnUri,
   'CANCELURL' => $this->_cancelUri,
   'HDRIMG' => $this->_logoUri,
   'PAYMENTREQUEST_0_CURRENCYCODE' => 'GBP',
   'L_PAYMENTREQUEST_0_DESC0' => 'Product description',
   'L_PAYMENTREQUEST_0_NAME0' => 'Product name',
   'L_PAYMENTREQUEST_0_AMT0' => "50.00",
   'L_PAYMENTREQUEST_0_QTY0' => "2"
);
如果L_PAYMENTREQUEST_0_QTY0设置为1,则流程正常。但是,将其更改为2并将“PAYMENTREQUEST\u 0\u ITEMAMT”=>“100.00”添加到数组中会出现以下错误:

TIMESTAMP: 2012-04-17T12:11:16Z
CORRELATIONID: da43f6c91254
ACK: Failure
VERSION: 88.0
BUILD: 2808426
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

我已经连续几个小时试图修复它,但已经放弃了。有人能突出显示我需要做什么才能让它工作吗?

您缺少一个
项目amt
。另请参见我的答案,其中包含一个具有多个数量的工作示例

&L_PAYMENTREQUEST_0_NAME0=10% Decaf Kona Blend Coffee  
&L_PAYMENTREQUEST_0_NUMBER0=623083  
&L_PAYMENTREQUEST_0_DESC0=Size: 8.8-oz 
&L_PAYMENTREQUEST_0_AMT0=9.95  
&L_PAYMENTREQUEST_0_QTY0=2  
&L_PAYMENTREQUEST_0_NAME1=Coffee Filter bags  
&L_PAYMENTREQUEST_0_NUMBER1=623084  
&L_PAYMENTREQUEST_0_DESC1=Size: Two 24-piece boxes  
&L_PAYMENTREQUEST_0_AMT1=39.70  
&L_PAYMENTREQUEST_0_QTY1=2  
&PAYMENTREQUEST_0_ITEMAMT=99.30  
&PAYMENTREQUEST_0_TAXAMT=2.58  
&PAYMENTREQUEST_0_SHIPPINGAMT=3.00  
&PAYMENTREQUEST_0_HANDLINGAMT=2.99  
&PAYMENTREQUEST_0_SHIPDISCAMT=-3.00  
&PAYMENTREQUEST_0_INSURANCEAMT=1.00  
&PAYMENTREQUEST_0_AMT=105.87  
&PAYMENTREQUEST_0_CURRENCYCODE=USD  

与这个问题不直接相关,但由于这是谷歌在搜索错误消息时首先出现的问题,这可能对其他收到错误消息的人有用

如果未设置某些字段(null/blank),则可能会出现此错误

例如,在我的案例中,它是(为了清晰起见,添加了换行符):

它也给了我同样的错误,尽管数量很好。 我认为这是一个解析问题,因为如果在L_PAYMENTREQUEST_0_NAME0=in之后插入一个空格

&L_PAYMENTREQUEST_0_NAME0=&L_PAYMENTREQUEST_0_AMT0=1.00
它很好用


所以我猜在PayPal端,它只是将“&L_PAYMENTREQUEST_0_AMT0=1.00”分配给L_PAYMENTREQUEST_0_NAME0,从而有效地将其从消息中删除,从而触发此错误,因为没有这一行,金额实际上不会相加。

我也遇到了同样的问题,并通过在foreach中按函数号\u格式为参数L\u PAYMENTREQUEST\u 0\u AMT$k设置价格来解决

例如:

$items_amount = 0;
foreach ($products as $k => $product) {
    $params["L_PAYMENTREQUEST_0_NAME$k"] = $product['name'];
    $params["L_PAYMENTREQUEST_0_DESC$k"] = $product['desc'];
    $params["L_PAYMENTREQUEST_0_AMT$k"] = number_format($product['priceIVA'], 2);
    $params["L_PAYMENTREQUEST_0_QTY$k"] = $product['count'];
    $items_amount += (floatval($product['priceIVA']) * $product['count']);
}

$params['PAYMENTREQUEST_0_AMT'] = $params['PAYMENTREQUEST_0_ITEMAMT'] = number_format($items_amount, 2);

您是否尝试过使用
L\u PAYMENTREQUEST\u 0\u QTY0=2
'L\u PAYMENTREQUEST\u 0\u AMT0'=>“100.00”
'PAYMENTREQUEST\u 0\u AMT'=>“100.00”
?也许paypal不计算2x50.00,只是查找每行的总数。我只是在这里做假设。唉,这不起作用。我不知道这是否会有帮助,但也许你所有的美元价值都应该正确格式化“0.00”向下投票这修正了我的“我已经添加了运费,为什么它会损坏?”问题。paypal文档真的应该链接到这个网站…有人知道我如何添加两个或更多的产品吗?…关于这个好例子?谢谢。
$items_amount = 0;
foreach ($products as $k => $product) {
    $params["L_PAYMENTREQUEST_0_NAME$k"] = $product['name'];
    $params["L_PAYMENTREQUEST_0_DESC$k"] = $product['desc'];
    $params["L_PAYMENTREQUEST_0_AMT$k"] = number_format($product['priceIVA'], 2);
    $params["L_PAYMENTREQUEST_0_QTY$k"] = $product['count'];
    $items_amount += (floatval($product['priceIVA']) * $product['count']);
}

$params['PAYMENTREQUEST_0_AMT'] = $params['PAYMENTREQUEST_0_ITEMAMT'] = number_format($items_amount, 2);