2011-08-02 63 views
0

進出口新的PayPal快速結帳,我有這個代碼的PayPal的支付我的PayPal快速結帳付款問題?

$resArray = CallShortcutExpressCheckout ($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL); 
$ack = strtoupper($resArray["ACK"]); 
if($ack=="SUCCESS" || $ack=="SUCCESSWITHWARNING") 
{ 
    RedirectToPayPal ($resArray["TOKEN"]); 
} 
else 
{ 
    //Display a user friendly Error on the page using any of the following error information returned by PayPal 
    $ErrorCode = urldecode($resArray["L_ERRORCODE0"]); 
    $ErrorShortMsg = urldecode($resArray["L_SHORTMESSAGE0"]); 
    $ErrorLongMsg = urldecode($resArray["L_LONGMESSAGE0"]); 
    $ErrorSeverityCode = urldecode($resArray["L_SEVERITYCODE0"]); 

    echo "SetExpressCheckout API call failed. "; 
    echo "Detailed Error Message: " . $ErrorLongMsg; 
    echo "Short Error Message: " . $ErrorShortMsg; 
    echo "Error Code: " . $ErrorCode; 
    echo "Error Severity Code: " . $ErrorSeverityCode; 
} 

這個代碼爲CallShortcutExpressCheckout功能

function CallShortcutExpressCheckout($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL) 
    { 
     //------------------------------------------------------------------------------------------------------------------------------------ 
     // Construct the parameter string that describes the SetExpressCheckout API call in the shortcut implementation 

     $nvpstr="&PAYMENTREQUEST_0_AMT=". $paymentAmount; 
     $nvpstr = $nvpstr . "&PAYMENTREQUEST_0_PAYMENTACTION=" . $paymentType; 
     $nvpstr = $nvpstr . "&RETURNURL=" . $returnURL; 
     $nvpstr = $nvpstr . "&CANCELURL=" . $cancelURL; 
     $nvpstr = $nvpstr . "&PAYMENTREQUEST_0_CURRENCYCODE=" . $currencyCodeType; 

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

     //'--------------------------------------------------------------------------------------------------------------- 
     //' Make the API call to PayPal 
     //' If the API call succeded, then redirect the buyer to PayPal to begin to authorize payment. 
     //' If an error occured, show the resulting errors 
     //'--------------------------------------------------------------------------------------------------------------- 
     $resArray=hash_call("SetExpressCheckout", $nvpstr); 
     $ack = strtoupper($resArray["ACK"]); 
     if($ack=="SUCCESS" || $ack=="SUCCESSWITHWARNING") 
     { 
      $token = urldecode($resArray["TOKEN"]); 
      $_SESSION['TOKEN']=$token; 
     } 

     return $resArray; 
    } 

我的問題,我不知道如何發送購物車充分的信息,如產品的標題和代碼,它的我需要的因爲我沒有訂單部分到我的購物車我想通過電子郵件管理一切 所以我需要的是通過訂單發送產品描述,一旦訂單我收到訂單電子郵件確認有物品de scription

回答

0

我正在嘗試做同樣的事情。

讓我說,我一直在努力,現在以獲得完整的收銀臺2天工作,我還沒有完全成功:(

但是它看起來像我一步比進一步啓動。你

如果它雖然正確的做法,但我會告訴你我現在得到了什麼,我仍然有一個問題不知道

我所做的是以下幾點:

如果用戶點擊php文件的結帳按鈕稱爲(我們稱之爲checkout.php)。

checkout.php文件中,我構建了一個array與用戶想要訂購的項目。

// fill array with two products 
// normally you would loop through all products in the basket to create this array 
$items = array('L_PAYMENTREQUEST_0_NAME0'=>'Productname 1', 
       'L_PAYMENTREQUEST_0_NUMBER0'=>'Productcode 1', 
       'L_PAYMENTREQUEST_0_DESC0'=>'Productdescription 1', 
       'L_PAYMENTREQUEST_0_AMT0'=>39.99, // price per unit 
       'L_PAYMENTREQUEST_0_QTY0'=>2, // quantity 
       'L_PAYMENTREQUEST_0_NAME1'=>'Productname 2', 
       'L_PAYMENTREQUEST_0_NUMBER1'=>'Productcode 2', 
       'L_PAYMENTREQUEST_0_DESC1'=>'Productdescription 2', 
       'L_PAYMENTREQUEST_0_AMT1'=>200.99, 
       'L_PAYMENTREQUEST_0_QTY1'=>1, 
       ); 

// set total amount of order in session (this will be used by paypal throughout the payment process) 
$_SESSION['Payment_Amount'] = 280.97; 

// now normally call CallShortcutExpressCheckout only with the addition of the $items array 
$resArray = CallShortcutExpressCheckout ($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL, $items); 

現在對於與實際發出請求到PayPal功能的文件:

我創建了一個額外的功能(generate_nvp_string),並改變了CallShortcutExpressCheckout函數中使用此字符串。

function generate_nvp_string($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL, $items = array()) 
{ 
    $params = array('PAYMENTREQUEST_0_AMT'=>$paymentAmount, 
        'PAYMENTREQUEST_0_PAYMENTACTION'=>$paymentType, 
        'RETURNURL'=>$returnURL, 
        'CANCELURL'=>$cancelURL, 
        'PAYMENTREQUEST_0_CURRENCYCODE'=>$currencyCodeType, 
        ); 

    $params = array_merge($params, $items); 

    $nvp_string = ''; 
    foreach($params as $name => $value) { 
     $nvp_string.= '&'.$name.'='.$value; 
    } 

    return $nvp_string; 
} 

function CallShortcutExpressCheckout($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL, $items= array()) 
{ 
    $_SESSION['currencyCodeType'] = $this->currency; 
    $_SESSION['PaymentType'] = $this->payment_type; 

    $result = $this->hash_call('SetExpressCheckout', $this->generate_nvp_string($paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL, $items)); 

    $ack = strtoupper($result['ACK']); 
    if ($ack == 'SUCCESS' || $ack == 'SUCCESSWITHWARNING') { 
     $_SESSION['TOKEN'] = urldecode($result['TOKEN']); 
    } 

    return $result; 
} 

現在,當用戶點擊結帳按鈕時,請求字符串也會包含產品。當用戶被重定向到PayPal結帳時,他們將對訂購的所有產品有一個很好的概述。

我開始這個答案有:

什麼,我仍然有一個問題。

結帳過程似乎工作然而現在,當用戶完成結帳過程和被重定向回我的網站($returnURL),並沒有得到某種原因事務ID。

交易ID對於能夠在後端進一步處理付款至關重要。

+0

嘿你是否得到這個工作到底?我也卡在這裏了! – user961627

0

我正在嘗試使用表單提交來遍歷項目。 PayPal的示例代碼僅適用於1項。我只是檢查是否設置了L_PAYMENTREQUEST_0_NAME0,如果是,則將所有變量添加到$ nvpstr字符串中,而不是像PeeHaa那樣。然後繼續查看是否設置了L_PAYMENTREQUEST_0_NAME1,如果是,則將其添加到字符串等。這裏是任何需要它的人的代碼:

for($i=0; $i<99999; $i++){ 
    if(isset($paramsArray["L_PAYMENTREQUEST_0_NAME$i"])){ 
     $nvpstr = $nvpstr . "&L_PAYMENTREQUEST_0_NAME$i=" . $paramsArray["L_PAYMENTREQUEST_0_NAME$i"]; 
    } 
    if(isset($paramsArray["L_PAYMENTREQUEST_0_NUMBER$i"])){ 
     $nvpstr = $nvpstr . "&L_PAYMENTREQUEST_0_NUMBER$i=" . $paramsArray["L_PAYMENTREQUEST_0_NUMBER$i"]; 
    } 
    if(isset($paramsArray["L_PAYMENTREQUEST_0_DESC$i"])){ 
     $nvpstr = $nvpstr . "&L_PAYMENTREQUEST_0_DESC$i=" . $paramsArray["L_PAYMENTREQUEST_0_DESC$i"]; 
    } 
    if(isset($paramsArray["L_PAYMENTREQUEST_0_AMT$i"])){ 
     $nvpstr = $nvpstr . "&L_PAYMENTREQUEST_0_AMT$i=" . $paramsArray["L_PAYMENTREQUEST_0_AMT$i"]; 
    } 
    if(isset($paramsArray["L_PAYMENTREQUEST_0_QTY$i"])){ 
     $nvpstr = $nvpstr . "&L_PAYMENTREQUEST_0_QTY$i=" . $paramsArray["L_PAYMENTREQUEST_0_QTY$i"]; 
    } 
    if(!isset($paramsArray["L_PAYMENTREQUEST_0_NAME$i"])){ 
     break; 
    } 
}