php将自定义值发送到Paypal Express签出,然后再次捕获该值

php将自定义值发送到Paypal Express签出,然后再次捕获该值,php,paypal,paypal-sandbox,Php,Paypal,Paypal Sandbox,我已经设置了快速结帐。一切都很好。但我想发送一些自定义值,并再次捕获它们。基本上我的index.php是这样的 <form method="post" action="process.php?paypal=checkout"> <input type="hidden" name="itemname" value="Canon EOS Rebel XS" /> <input type="hidden" name="itemnumber" value=

我已经设置了快速结帐。一切都很好。但我想发送一些自定义值,并再次捕获它们。基本上我的index.php是这样的

<form method="post" action="process.php?paypal=checkout">
    <input type="hidden" name="itemname" value="Canon EOS Rebel XS" /> 
    <input type="hidden" name="itemnumber" value="10000" /> 
    <input type="hidden" name="itemdesc" value="Capture all your special moments with the Canon EOS Rebel XS/1000D DSLR camera and cherish the memories over and over again." /> 
    <input type="hidden" name="itemprice" value="225.00" />
    <input type='hidden' name='user_id' value='2'>
    Quantity : <select name="itemQty"><option value="1">1</option><option value="2">2</option><option value="3">3</option></select> 
    <input class="dw_button" type="submit" name="submitbutt" value="Buy (225.00 <?php echo PPL_CURRENCY_CODE; ?>)" />
</form>
<?php
include_once("config.php");
include_once("functions.php");
include_once("paypal.class.php");

    $paypal= new MyPayPal();

    //Post Data received from product list page.
    if(_GET('paypal')=='checkout'){     
        $products = [];
        $products[0]['ItemName'] = _POST('itemname'); //Item Name
        $products[0]['ItemPrice'] = _POST('itemprice'); //Item Price
        $products[0]['ItemNumber'] = _POST('itemnumber'); //Item Number
        $products[0]['ItemDesc'] = _POST('itemdesc'); //Item Number
        $products[0]['ItemQty'] = _POST('itemQty'); // Item Quantity
        $charges = [];

        //Other important variables like tax, shipping cost
        $charges['TotalTaxAmount'] = 0;  //Sum of tax for all items in this order. 
        $charges['HandalingCost'] = 0;  //Handling cost for this order.
        $charges['InsuranceCost'] = 0;  //shipping insurance cost for this order.
        $charges['ShippinDiscount'] = 0; //Shipping discount for this order. Specify this as negative number.
        $charges['ShippinCost'] = 0; //Although you may change the value later, try to pass in a shipping amount that is reasonably accurate.
        $paypal->SetExpressCheckOut($products, $charges);       
    }
    elseif(_GET('token')!=''&&_GET('PayerID')!=''){

        print_r($paypal->DoExpressCheckoutPayment());
        echo $_GET['OrderID'];
    }
    else{


    }

config.php is like this
<?php

  //start session in all pages
  if (session_status() == PHP_SESSION_NONE) { session_start(); } //PHP >= 5.4.0
  //if(session_id() == '') { session_start(); } //uncomment this line if PHP < 5.4.0 and comment out line above

    // sandbox or live
    define('PPL_MODE', 'sandbox');

    if(PPL_MODE=='sandbox'){

        define('PPL_API_USER', 'XXXXX');
        define('PPL_API_PASSWORD', 'XXXXX');
        define('PPL_API_SIGNATURE', 
            'XXXXXXXXXX');
    }
    else{

        define('PPL_API_USER', 'XXXXX');
        define('PPL_API_PASSWORD', 'XXXXX');
        define('PPL_API_SIGNATURE', 'XXXXXXXXXX');
    }

    define('PPL_LANG', 'EN');

    define('PPL_LOGO_IMG', 'http://localhost/paypal/img/logo.png');

    define('PPL_RETURN_URL', 'http://localhost/paypal/process.php');
    define('PPL_CANCEL_URL', 'http://localhost/paypal/cancel_url.php');

    define('PPL_CURRENCY_CODE', 'EUR');
function _GET($label='',$default='',$set_default=false){

    $value=$default;

    if(isset($_GET[$label])&&!empty($_GET[$label])){

        $value=$_GET[$label];
    }

    if($set_default===true&&(!isset($_GET[$label])||$_GET[$label]=='')){

        $_GET[$label]=$default;
    }

    return $value;      
}

function _POST($label='',$default='',$set_default=false){

    $value=$default;

    if(isset($_POST[$label])&&!empty($_POST[$label])){

        $value=$_POST[$label];
    }

    if($set_default===true&&(!isset($_POST[$label])||$_POST[$label]=='')){

        $_POST[$label]=$default;
    }       

    return $value;      
}   

function _SESSION($label='',$default='',$set_default=false){

    $value=$default;

    if(isset($_SESSION[$label])&&!empty($_SESSION[$label])){

        $value=$_SESSION[$label];
    }

    if($set_default===true&&(!isset($_SESSION[$label])||$_SESSION[$label]=='')){

        $_SESSION[$label]=$default;
    }   

    return $value;      
}   
paypal.class.php文件如下

<form method="post" action="process.php?paypal=checkout">
    <input type="hidden" name="itemname" value="Canon EOS Rebel XS" /> 
    <input type="hidden" name="itemnumber" value="10000" /> 
    <input type="hidden" name="itemdesc" value="Capture all your special moments with the Canon EOS Rebel XS/1000D DSLR camera and cherish the memories over and over again." /> 
    <input type="hidden" name="itemprice" value="225.00" />
    <input type='hidden' name='user_id' value='2'>
    Quantity : <select name="itemQty"><option value="1">1</option><option value="2">2</option><option value="3">3</option></select> 
    <input class="dw_button" type="submit" name="submitbutt" value="Buy (225.00 <?php echo PPL_CURRENCY_CODE; ?>)" />
</form>
<?php
include_once("config.php");
include_once("functions.php");
include_once("paypal.class.php");

    $paypal= new MyPayPal();

    //Post Data received from product list page.
    if(_GET('paypal')=='checkout'){     
        $products = [];
        $products[0]['ItemName'] = _POST('itemname'); //Item Name
        $products[0]['ItemPrice'] = _POST('itemprice'); //Item Price
        $products[0]['ItemNumber'] = _POST('itemnumber'); //Item Number
        $products[0]['ItemDesc'] = _POST('itemdesc'); //Item Number
        $products[0]['ItemQty'] = _POST('itemQty'); // Item Quantity
        $charges = [];

        //Other important variables like tax, shipping cost
        $charges['TotalTaxAmount'] = 0;  //Sum of tax for all items in this order. 
        $charges['HandalingCost'] = 0;  //Handling cost for this order.
        $charges['InsuranceCost'] = 0;  //shipping insurance cost for this order.
        $charges['ShippinDiscount'] = 0; //Shipping discount for this order. Specify this as negative number.
        $charges['ShippinCost'] = 0; //Although you may change the value later, try to pass in a shipping amount that is reasonably accurate.
        $paypal->SetExpressCheckOut($products, $charges);       
    }
    elseif(_GET('token')!=''&&_GET('PayerID')!=''){

        print_r($paypal->DoExpressCheckoutPayment());
        echo $_GET['OrderID'];
    }
    else{


    }

config.php is like this
<?php

  //start session in all pages
  if (session_status() == PHP_SESSION_NONE) { session_start(); } //PHP >= 5.4.0
  //if(session_id() == '') { session_start(); } //uncomment this line if PHP < 5.4.0 and comment out line above

    // sandbox or live
    define('PPL_MODE', 'sandbox');

    if(PPL_MODE=='sandbox'){

        define('PPL_API_USER', 'XXXXX');
        define('PPL_API_PASSWORD', 'XXXXX');
        define('PPL_API_SIGNATURE', 
            'XXXXXXXXXX');
    }
    else{

        define('PPL_API_USER', 'XXXXX');
        define('PPL_API_PASSWORD', 'XXXXX');
        define('PPL_API_SIGNATURE', 'XXXXXXXXXX');
    }

    define('PPL_LANG', 'EN');

    define('PPL_LOGO_IMG', 'http://localhost/paypal/img/logo.png');

    define('PPL_RETURN_URL', 'http://localhost/paypal/process.php');
    define('PPL_CANCEL_URL', 'http://localhost/paypal/cancel_url.php');

    define('PPL_CURRENCY_CODE', 'EUR');
函数GetProductsTotalAmount($products){
$ProductsTotalAmount=0;
foreach($p=>$item形式的产品){
$ProductsTotalAmount=$ProductsTotalAmount+$this->GetItemTotalPrice($item);
}
返回$ProductsTotalAmount;
}
函数GetGrandTotal($products,$charges){
$GrandTotal=$this->GetProductsTotalAmount($products);
foreach($费用作为$费用){
$GrandTotal=$GrandTotal+$charge;
}
返回$GrandTotal;
}
函数SetExpressCheckout($products,$charges,$noshipping='1')){
$padata='&METHOD=SetExpressCheckout';
$padata.='&RETURNURL='.urlencode(PPL_RETURN_URL);
$padata.='&CANCELURL='.urlencode(PPL\u CANCEL\u URL);
$padata.='&PAYMENTREQUEST_0_PAYMENTACTION='.urlencode(“销售”);
foreach($p=>$item形式的产品){
$padata.='&L_PAYMENTREQUEST_0_NAME'.$p.='.urlencode($item['ItemName']);
$padata.='&L_PAYMENTREQUEST_0_编号'$p.='.urlencode($item['ItemNumber']);
$padata.='&L_PAYMENTREQUEST_0_DESC'.$p.='.urlencode($item['ItemDesc']);
$padata.='&L_PAYMENTREQUEST_0_AMT'.$p.='.urlencode($item['ItemPrice']);
$padata.='&L_PAYMENTREQUEST_0_数量'$p.='.urlencode($item['ItemQty']);
}       
$padata.='&NOSHIPPING='.$NOSHIPPING;
$padata.='&PAYMENTREQUEST_0_itemant='.urlencode($this->GetProductsTotalAmount($products));
$padata.='&PAYMENTREQUEST_0_TAXAMT='.urlencode($charges['totaltaxamtum']);
$padata.='&PAYMENTREQUEST_0_SHIPPINGAMT='.urlencode($charges['ShippinCost']);
$padata.='&PAYMENTREQUEST_0_HANDLINGAMT='.urlencode($charges['handlingcost']);
$padata.='&PAYMENTREQUEST_0_SHIPDISCAMT='.urlencode($charges['ShipPin折扣]);
$padata.='&PAYMENTREQUEST_0_INSURANCEAMT='.urlencode($charges['InsuranceCost']);
$padata.='&PAYMENTREQUEST_0_AMT='.urlencode($this->GetGrandTotal($products,$charges));
$padata.='&PAYMENTREQUEST\u 0\u CURRENCYCODE='.urlencode(PPL\u CURRENCY\u CODE);
$padata.='&LOCALECODE='.PPL_LANG;//匹配网站语言的PayPal页面;
$padata.='&LOGOIMG='.PPL\u LOGO\u IMG;//站点徽标
$padata.='&CARTBORDERCOLOR=FFFFFF';//购物车的边框颜色
$padata.='&ALLOWNOTE=1';
$\会话['ppl\ U产品]=$产品;
$\会话['ppl\ U费用]=$费用;
$httpParsedResponseAr=$this->PPHttpPost('SetExpressCheckout',$padata);
//根据我们从贝宝收到的信息回复
if(“SUCCESS”==strotupper($httpParsedResponseAr[“ACK”])| |“SUCCESSWITHWARNING”==strotupper($httpParsedResponseAr[“ACK”])){
$PayPalmMode=(PPL_模式=='sandbox')?'.sandbox':'';
$paypalurl=https://www“.$PayPalmMode.'.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=”.$httpParsedResponseAr[“token”]”;
标题('Location:'。$paypalurl);
}
否则{
echo“Error:”.urldecode($httpParsedResponseAr[“L_LONGMESSAGE0]”)为“;
回声';
打印(httpParsedResponseAr);
回声';
}   
}       
函数DoExpressCheckoutPayment(){
如果(!empty(_SESSION('ppl_products'))和&!empty(_SESSION('ppl_charges')){
$products=_会话(“ppl_产品”);
$charges=_会话('ppl_费用');
$padata='&TOKEN='.urlencode(_GET('TOKEN'));
$padata.='&PAYERID='.urlencode(_GET('PAYERID'));
$padata.='&PAYMENTREQUEST_0_PAYMENTACTION='.urlencode(“销售”);
//在此处设置项目信息,否则我们以后将看不到产品详细信息
foreach($p=>$item形式的产品){
$padata.='&L_PAYMENTREQUEST_0_NAME'.$p.='.urlencode($item['ItemName']);
$padata.='&L_PAYMENTREQUEST_0_编号'$p.='.urlencode($item['ItemNumber']);
$padata.='&L_PAYMENTREQUEST_0_DESC'.$p.='.urlencode($item['ItemDesc']);
$padata.='&L_PAYMENTREQUEST_0_AMT'.$p.='.urlencode($item['ItemPrice']);
$padata.='&L_PAYMENTREQUEST_0_数量'$p.='.urlencode($item['ItemQty']);
}
$padata.='&PAYMENTREQUEST_0_itemant='.urlencode($this->GetProductsTotalAmount($products));
$padata.='&PAYMENTREQUEST_0_TAXAMT='.urlencode($charges['totaltaxamtum']);
$padata.='&PAYMENTREQUEST_0_SHIPPINGAMT='.urlencode($charges['ShippinCost']);
$padata.='&PAYMENTREQUEST_0_HANDLINGAMT='.urlencode($charges['handlingcost']);
$padata.='&PAYMENTREQUEST_0_SHIPDISCAMT='.urlencode($charges['ShipPin折扣]);
$padata.='&PAYMENTREQUEST_0_INSURANCEAMT='.urlencode($charges['InsuranceCost']);
$padata.='&PAYMENTREQUEST_0_AMT='.urlencode($this->GetGrandTotal($products,$charges));
$padata.='&PAYMENTREQUEST\u 0\u CURRENCYCODE='.urlencode(PPL\u CURRENCY\u CODE);
//我们需要在此时执行“DoExpressCheckoutPayment”来接收用户的付款。
$httpParsedResponseAr=$this->PPHttpPost('DoExpressCheckoutPayment',$padata);
//vdump($httpParsedResponseAr);
//检查一切是否正常。。
if(“SUCCESS”==strotupper($httpParsedResponseAr[“ACK”])| |“SUCCESSWITHWARNING”==strotupper($httpParsedResponseAr[“ACK”])){
呼应"成功",;
回显“您的交易ID:”.urldecode($httpParsedResponseAr[“PAYMENTINFO\u 0\u TRANSACTIONID]”);
/*
//有时付款是挂起的