Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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 NVP错误消息:如果提供了项目类别,则需要项目名称、金额和数量_Php_Mysql_Paypal_Paypal Nvp - Fatal编程技术网

Php Paypal API NVP错误消息:如果提供了项目类别,则需要项目名称、金额和数量

Php Paypal API NVP错误消息:如果提供了项目类别,则需要项目名称、金额和数量,php,mysql,paypal,paypal-nvp,Php,Mysql,Paypal,Paypal Nvp,有人能帮忙吗。我一直收到以下错误消息 SetExpressCheckout API调用失败。详细错误消息:项目名称, 如果提供了项目类别,则需要金额和数量。简短 错误消息:缺少参数错误代码:10003错误严重性代码: 错误“ 这就是paypalfunctions.php文件中的内容 $PROXY_HOST = '127.0.0.1'; $PROXY_PORT = '808'; $SandboxFlag = false; $API_UserName="******"; $API_Passwor

有人能帮忙吗。我一直收到以下错误消息

SetExpressCheckout API调用失败。详细错误消息:项目名称, 如果提供了项目类别,则需要金额和数量。简短 错误消息:缺少参数错误代码:10003错误严重性代码: 错误“

这就是paypalfunctions.php文件中的内容

$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;
}

非常感谢您的帮助。

错误是其中一个事件的价格为0,导致了问题。通过在填充数组之前添加零测试进行修复。根据paypals文档,您不能只通过0个正数或负数。

显然,生成的最终请求字符串不包括所有e item details。发布生成的原始API请求的示例,我可以帮助您找出缺少的内容。感谢您的响应,我最终找到了答案。我尝试在items array=>amt中发送的值之一是0。根据paypals文档,您不能传递0个正数或负数。
$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;
}