为PayPal设置参考事务



我正在尝试使用引用事务实现PayPal,创建计费协议,然后引用此计费协议 ID 以用于将来的付款请求。

谁能给我一些示例代码。

检查下面的代码: 它只是示例代码,如需更多帮助,请查看PayPal文档

---复制下面的代码并将其保存为本地主机中的">refTest.php"并检查它。

$user = 'API_USERNAME';
$password = 'API_PASSWORD';
$signature = 'API_SIGNATURE';
$nvps = "&USER=$user".
        "&PWD=$password".
        "&SIGNATURE=$signature";
$amt=2;     
$tax=0.5;       
$tot=2.5;       
if(!isset($_REQUEST['token'])){
     $nvpset= $nvps
       . "&METHOD=SetExpressCheckout" 
       . "&VERSION=109.0" 
       . "&RETURNURL=http://localhost/refTest.php"
       . "&CANCELURL=http://localhost/refTest.php"
       . "&PAYMENTREQUEST_0_CURRENCYCODE=USD"
       . "&LOCALCODE=US"
       . "&PAYMENTREQUEST_0_AMT=".$tot
       . "&PAYMENTREQUEST_0_ITEMAMT=".$amt
       . "&PAYMENTREQUEST_0_TAXAMT=".$tax
       . "&PAYMENTREQUEST_0_DESC=Shopping"
       . "&PAYMENTREQUEST_0_PAYMENTACTION=Order"
       . "&L_PAYMENTREQUEST_0_NAME0=James Bond"
       . "&L_PAYMENTREQUEST_0_NUMBER0=101"
       . "&L_PAYMENTREQUEST_0_QTY0=1"
       . "&L_PAYMENTREQUEST_0_AMT0=".$amt
       . "&SOLUTIONTYPE=Sole"
       . "&L_BILLINGTYPE0=MerchantInitiatedBillingSingleAgreement"
       . "&L_BILLINGAGREEMENTDESCRIPTION0=FirstBillingAgreement"
       . "&LANDINGPAGE=Billing"
       . "&NOSHIPPING=1";
    $setEC = RequestPayPal($nvpset);   
    header('location: https://www.sandbox.paypal.com/webscr&cmd=_express-checkout&token='.$setEC['TOKEN']);     
}
elseif(isset($_REQUEST['token']) && isset($_REQUEST['PayerID']) && !isset($_REQUEST['action'])){
    echo "<a href='?token=".$_REQUEST['token']."&PayerID=".$_REQUEST['PayerID']."&action=createBillingAgree'>Let's Create Billing Agreement</a></br>";
    echo "Token Details</br>";
    $nvpget= $nvps
       . "&METHOD=GetExpressCheckoutDetails" 
       . "&VERSION=109.0" 
       . "&TOKEN=".$_REQUEST['token'];
    $getEC = RequestPayPal($nvpget);
    print_r($getEC);
}
elseif(isset($_REQUEST['token']) && isset($_REQUEST['PayerID']) && isset($_REQUEST['action']) && $_REQUEST['action']=='createBillingAgree'){
    echo "<a href='?token=".$_REQUEST['token']."&PayerID=".$_REQUEST['PayerID']."&action=PayIt'>Let's Do the payment Now</a></br>";
    $nvpget= $nvps
       . "&METHOD=CreateBillingAgreement" 
       . "&VERSION=109.0" 
       . "&TOKEN=".$_REQUEST['token'];
    $getEC = RequestPayPal($nvpget);
    print_r($getEC);
}
elseif(isset($_REQUEST['token']) && isset($_REQUEST['PayerID']) && isset($_REQUEST['action']) && $_REQUEST['action']=='PayIt'){
    echo "DO EXPRESS CHECK OUT DONE</br>";
    $nvpdo= $nvps
       . "&METHOD=DoExpressCheckoutPayment" 
       . "&VERSION=109.0" 
       . "&PAYMENTACTION=Order" 
       . "&AMT=".$tot 
       . "&TOKEN=".$_REQUEST['token']
       . "&PAYERID=".$_REQUEST['PayerID'];
    $doEC = RequestPayPal($nvpdo);
    echo "<a href='?token=".$_REQUEST['token']."&PayerID=".$_REQUEST['PayerID']."&action=captureFuturePay&refId=".$doEC['BILLINGAGREEMENTID']."'>Create Reference Transasction</a></br>";
    print_r($doEC);
}
else{
    echo "Reference Transasction Done </br>";
    $nvpdo= $nvps
       . "&METHOD=DoReferenceTransaction" 
       . "&VERSION=109.0" 
       . "&PAYMENTACTION=Order" 
       . "&AMT=".$tot 
       . "&TOKEN=".$_REQUEST['token']
       . "&REFERENCEID=".$_REQUEST['refId']
       . "&PAYERID=".$_REQUEST['PayerID'];
    $doEC = RequestPayPal($nvpdo);
    print_r($doEC);
}
function RequestPayPal($nvp){
    $url = 'https://api-3t.sandbox.paypal.com/nvp';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_TIMEOUT, 45);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$nvp);
    $result = curl_exec($ch);
    $httpResponseAr = explode("&", $result);
    $httpParsedResponseAr = array();
    foreach ($httpResponseAr as $value) {
        $tmpAr = explode("=", $value);
        if(sizeof($tmpAr) > 1) {
            $httpParsedResponseAr[$tmpAr[0]] = urldecode($tmpAr[1]);
        }
    }
    curl_close ($ch); 
    return $httpParsedResponseAr;
}

?>

最新更新