2014-01-14 2 views
0

누군가 도와 드릴 수 있습니까? 다음과 같은 오류 메시지가 계속 표시됩니다.Paypal API NVP 오류 메시지 : 품목 범주가 제공되는 경우 품목 이름, 금액 및 수량이 필요합니다.

SetExpressCheckout API 호출에 실패했습니다. 하면 ArgumentError 코드 누락 : 자세한 오류 메시지 : 항목 범주가 provided.Short 오류 메시지의 경우 항목 이름, 금액과 수량이 필요 10003Error 심각도 코드 : 오류 "

require_once ("paypalfunctions.php"); 

$task = $_GET['task']; 
$regRef = $_SESSION['regRef']; 

if(strcmp($task, "paypal") == 0) { 

    $totalAmount = $_SESSION["netAmount"]; 
    $vatAmount = number_format((floor($totalAmount * 0.20)), 2, '.', ''); 
    $grossAmount = number_format(($totalAmount + $vatAmount), 2, '.', ''); 

    $currencyCodeType = "GBP"; 
    $paymentType = "Sale"; 

    $returnURL = "https://myurl.com/events/confirm_registration"; 

    $cancelURL = "http://myurl.com/events/checkout-handle.php?task=cancel"; 

    $host = "******"; 
    $dbuser = "******"; 
    $pass = "******"; 
    $db = "******"; 
    $connection = mysql_connect($host, $dbuser, $pass) or die ("Unable to connect!"); 
    mysql_select_db($db) or die ("Unable to select database!"); 

    mysql_query("UPDATE registrations SET `status`='paypal' WHERE `regRef`='$regRef'") or die ("Error in query: $query.".mysql_error()); 

    $queryItems = mysql_query("SELECT `eventName`, `itemPrice`, COUNT(*) FROM orders WHERE `regRef`='$regRef' GROUP BY `itemPrice`") or die ("Error in query: $query.".mysql_error()); 
    $numItems = mysql_num_rows($queryItems); 
    $items = array(); 
    while($row = mysql_fetch_array($queryItems)) { 
     $localVat = $row['itemPrice']*0.2; 
     $items[] = array('name' => $row['eventName'], 'amt' => $row['itemPrice'], 'qty' => $row['COUNT(*)'], 'vat' => $localVat); 
    } 
    mysql_close($connection); 


    $resArray = SetExpressCheckoutDG($grossAmount, $paymentType, $vatAmount, $returnURL, $cancelURL, $currencyCodeType, $items); 

이 무엇이고 그 다음입니다 어떤 도움에 감사드립니다

$PROXY_HOST = '127.0.0.1'; 
$PROXY_PORT = '808'; 

$SandboxFlag = false; 

$API_UserName="******"; 
$API_Password="******"; 
$API_Signature="******"; 


// BN Code is only applicable for partners 
$sBNCode = "PP-ECWizard"; 


if ($SandboxFlag == true) 
{ 
    $API_Endpoint = "https://api-3t.sandbox.paypal.com/nvp"; 
    $PAYPAL_URL = "https://www.sandbox.paypal.com/webscr?cmd=_express-checkout&token="; 
} 
else 
{ 
    $API_Endpoint = "https://api-3t.paypal.com/nvp"; 
    $PAYPAL_URL = "https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token="; 
} 

$USE_PROXY = false; 
$version="93"; 

if (session_id() == "") 
    session_start(); 

function SetExpressCheckoutDG($grossAmount, $paymentType, $vatAmount, $returnURL, $cancelURL, $currencyCodeType, $items) 
{ 
    $itemsTotal = 0; 
    $vatTotal = 0; 

    foreach($items as $index => $item) 
    { 
     $nvpstr .= "&L_PAYMENTREQUEST_0_NAME" . $index . "=" . urlencode($item["name"]); 
     $nvpstr .= "&L_PAYMENTREQUEST_0_AMT" . $index . "=" . urlencode($item["amt"]); 
     $nvpstr .= "&L_PAYMENTREQUEST_0_QTY" . $index . "=" . urlencode($item["qty"]); 
     $nvpstr .= "&L_PAYMENTREQUEST_0_TAXAMT" . $index . "=" . urlencode($item["vat"]); 
     $nvpstr .= "&L_PAYMENTREQUEST_0_ITEMCATEGORY" . $index . "=Physical"; 
     $nvpstr .= "&L_PAYMENTREQUEST_0_DESC" . $index . "=APN Event"; 
     $itemsTotal = $itemsTotal + ($item["amt"] * $item["qty"]); 
     $vatTotal = $vatTotal + ($item["vat"] * $item["qty"]); 
    }  
    $nvpstr .= "&PAYMENTREQUEST_0_ITEMAMT=" . $itemsTotal;   
    $nvpstr .= "&PAYMENTREQUEST_0_TAXAMT=" . $vatTotal;    //tax amount 
    $nvpstr .= "&PAYMENTREQUEST_0_AMT=". $grossAmount;    //total cost of items inc tax 
    $nvpstr .= "&PAYMENTREQUEST_0_PAYMENTACTION=" . $paymentType; 
    $nvpstr .= "&RETURNURL=" . $returnURL; 
    $nvpstr .= "&CANCELURL=" . $cancelURL; 
    $nvpstr .= "&PAYMENTREQUEST_0_CURRENCYCODE=" . $currencyCodeType; 
    $nvpstr .= "&REQCONFIRMSHIPPING=0"; 
    $nvpstr .= "&NOSHIPPING=1"; 

    $_SESSION["currencyCodeType"] = $currencyCodeType;  
    $_SESSION["PaymentType"] = $paymentType; 


    $resArray=hash_call("SetExpressCheckout", $nvpstr); 
    $ack = strtoupper($resArray["ACK"]); 
    if($ack=="SUCCESS" || $ack=="SUCCESSWITHWARNING") 
    { 
     $token = urldecode($resArray["TOKEN"]); 
     $_SESSION['TOKEN']=$token; 
    } 

    return $resArray; 
} 

paypalfunctions.php 파일

. :

+0

마지막으로 생성되는 요청 문자열에 항목 세부 정보가 모두 포함되지는 않습니다. 생성 된 원시 API 요청 샘플을 게시하면 누락 된 항목을 파악하는 데 도움이됩니다. –

+0

응답 주셔서 감사합니다, 나는 결국 그것을 알아 냈습니다. 값 배열 중 하나를 보내려고했던 값 중 하나는 = amt가 0이었습니다. paypals 문서에 따르면 0 또는 음수를 0으로 넘길 수는 없습니다. – user2068441

답변

1

이 오류는 이벤트의 하나였다 가격이 0 이었기 때문에 문제가 발생했습니다. 배열을 채우기 전에 0에 대한 테스트를 추가하여 수정되었습니다. paypals 문서에 따르면 0 만 양수 또는 음수를 전달할 수 없습니다.

관련 문제