2012-01-18 15 views
0

私のカスタムペイパルショッピングカートの合計に問題があります。 PHP NVP APIを使用して私が取得:Paypal PHP NVP API - カートアイテムの金額の合計が注文金額と一致しません

TIMESTAMP: 2012-01-18T07:27:10Z 
CORRELATIONID: d1fac4fa784ef 
ACK: Failure 
VERSION: 84.0 
BUILD: 2271164 
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 

は、しかし、私は私の合計は正しいはずです知っています。

&ADDRESSOVERRIDE=1&PAYMENTREQUEST_0_SHIPTONAME=test user&PAYMENTREQUEST_0_SHIPTOSTREET=123 somewhere st&PAYMENTREQUEST_0_SHIPTOCITY=mytown&PAYMENTREQUEST_0_SHIPTOSTATE=NC&PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE=US&PAYMENTREQUEST_0_SHIPTOZIP=12345&MAXAMT=64.71&PAYMENTREQUEST_0_AMT=64.71&PAYMENTREQUEST_0_ITEMAMT=50.64&CALLBACKTIMEOUT=4&PAYMENTRREQUEST_0_HANDLINGAMT=2.12&PAYMENTREQUEST_0_SHIPPINGAMT=11.95&ReturnUrl=http://xxxx/cart.php?mode=paypal_transaction&sid=XXX&CANCELURL=http://therealmsofwickedry.com/cart.php?mode=paypal_transaction&sid=XXX&PAYMENTINFO_0_CURRENCYCODE=USD&PAYMENTREQUEST_0_PAYMENTACTION=Sale&L_PAYMENTREQUEST_0_NUMBER0=3320&L_PAYMENTREQUEST_0_NAME0=ITem number 1&L_PAYMENTREQUEST_0_AMT0=47.32&L_PAYMENTREQUEST_0_QTY0=1&L_PAYMENTREQUEST_0_DESC0=No description available&L_PAYMENTREQUEST_1_NUMBER0=4605&L_PAYMENTREQUEST_1_NAME0=Item number 2&L_PAYMENTREQUEST_1_AMT0=3.32&L_PAYMENTREQUEST_1_QTY0=1&L_PAYMENTREQUEST_1_DESC0=No description available 

は、私は、パラメータを渡していない午前:私は次のパラメータを使用してSetExpressCheckoutの呼び出し、

$count = sizeof($cartItem); 
$subtotal = 0; 
$itmStr = ''; 
foreach($cartItem as $k = $ci) 
{ 
    $sub = $ci['cart_amt']*$ci['cart_price']; 
    $subtotal = $sub + $subtotal; 

    $itmStr .= '&L_PAYMENTREQUEST_'.$k.'_NUMBER0='.$ci['cart_id'].'&L_PAYMENTREQUEST_'.$k.'_NAME0='.$ci['cart_item'].'&L_PAYMENTREQUEST_'.$k.'_AMT0='.$ci['cart_price'].'&L_PAYMENTREQUEST_'.$k.'_QTY0='.$ci['cart_amt'].'&L_PAYMENTREQUEST_'.$k.'_DESC0='.truncate($ci['cart_desc'], 25); 
} 

$subtotal = (float) $subtotal; 
if(round($subtotal) < 25) 
{ 
    $ups_rate = (float) 9.95; 
    $usps_rate = (float) 7.50; 
} 

$ups_rate = number_format($ups_rate, 2, '.', ''); 
$usps_rate = number_format($usps_rate, 2, '.', ''); 
$_SESSION['ups_rate'] = $ups_rate; 
$_SESSION['usps_rate'] = $usps_rate; 
$ups_tot = $ups_rate + $subtotal; 
$usps_tot = $usps_rate + $subtotal; 
$_SESSION['ups_tot'] = $ups_tot; 
$_SESSION['usps_tot'] = $usps_tot; 
$_SESSION['subtotal'] = $subtotal; 
$base_total = $subtotal+$usps_rate; 
$handling = number_format((float) ($base_total*0.029) + .30, 2, '.', ''); 
$total = number_format($handling+$base_total, 2, '.', ''); 

$returnURL = append_sid("{$url}cart.php", 'mode=paypal_transaction&currencyCodeType='.urlencode($currencyCodeType).'&paymentType='.urlencode($paymentType)); 
$cancelURL = append_sid("{$url}cart.php", 'paymentType='.urlencode($paymentType)); 

$nvpstr = ""; 
$shiptoAddress = "&PAYMENTREQUEST_0_SHIPTONAME=$personName&PAYMENTREQUEST_0_SHIPTOSTREET=$SHIPTOSTREET&PAYMENTREQUEST_0_SHIPTOCITY=$SHIPTOCITY&PAYMENTREQUEST_0_SHIPTOSTATE=$SHIPTOSTATE&PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE=$SHIPTOCOUNTRYCODE&PAYMENTREQUEST_0_SHIPTOZIP=$SHIPTOZIP"; 

$nvpstr = '&ADDRESSOVERRIDE=1'.$shiptoAddress.'&MAXAMT='.(string)$total."&PAYMENTREQUEST_0_AMT=".(string)$total."&PAYMENTREQUEST_0_ITEMAMT=".(string)$subtotal.'&CALLBACKTIMEOUT=4&PAYMENTRREQUEST_0_HANDLINGAMT='.$handling.'&PAYMENTREQUEST_0_SHIPPINGAMT='.$usps_rate.'&ReturnUrl='.$returnURL.'&CANCELURL='.$cancelURL.'&PAYMENTINFO_0_CURRENCYCODE='.$currencyCodeType.'&PAYMENTREQUEST_0_PAYMENTACTION='.$paymentType.$itmStr; 

上記のコードを使用する:ここではPHPのですか?何とか間違ってそれらをエンコードしましたか?どんな指針も大変ありがとう!

+0

URLエンコードは正しいですか?あなたの '$ returnURL'や' $ cancelURL'はURLエンコードされているようには見えません。 – Josh

+0

@Josh私はそれらに間違ったことがあったことに気づいた。何らかの理由でURIが倍増しているように見えます。 URL全体ではなく、値をエンコードする必要があると思いましたか? – chaoskreator

+0

各NVPのすべての値は、URLエンコードされている必要があります。あなたのリターンURL、 'http:// ...'は 'returnURL'の名前であるため、その部分だけでなくエンコードされなければなりません。それは理にかなっていますか? – Josh

答えて

2

毎回同じリスト項目を繰り返しています。例えば、あなたが 'NUMBER0'を持っている場合は、 'NUMBER'、$ c。 '=' ... etc($ cは0からループをたどっていきます)AMT0 、QTY0などがあります。 PayPalは1つのアイテムだけを追加して合計額を得るため、合計額に複数のアイテムがある場合は数学的なエラーが発生します。 私はこれについてかなり新しいので、誤解した場合はご詫びください

+0

それは、特定のエラーメッセージをクリアしたので、問題と思われます。しかし、今私は '内部エラー:タイムアウト処理リクエスト'を得ています – chaoskreator

+0

@chaosKreator:認証データにエラーがあるときにPayPalがタイムアウトすることがあります - コピーして貼り付けた後、サンドボックス – Mark

+0

はい、私はそれについて読んだことがあります。私は何回か私の情報を二重にチェックし、それはすべて正しいように見える。何が起こっているか分からない。そして、私はX.comで答えを得ることができません。 :/ – chaoskreator

関連する問題