php将自定义值发送到Paypal Express签出,然后再次捕获该值
我已经设置了快速结帐。一切都很好。但我想发送一些自定义值,并再次捕获它们。基本上我的index.php是这样的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=
<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]”);
/*
//有时付款是挂起的