2011-08-02 5 views
0

메신저 특급 체크 아웃을 페이팔하고이 코드에게 CallShortcutExpressCheckout 기능에 대한내 페이팔 익스프레스 결제에 문제가 있습니까? 새로운

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

을 페이팔 지불하고이 코드를

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; 
    } 
내가 보내는 방법을 모르는

내 문제 장바구니 전체 정보는 제품 제목 및 코드와 같은 내가 그게 뭔지 coz 내가 쇼핑 장바구니에 아무런 주문 섹션을 가지고 내가 이메일을 통해 모든 것을 관리하고 싶습니다 그래서 내가 무엇을해야 주문 순서와 한 번 주문을 통해 제품 설명을 보낼 수 있습니다 나는 주문 전자 우편을 받는다 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); 

지금 실제로 페이팔에 요청을하는 기능을 가진 파일 :

나는 추가 기능 (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 개 항목에 대해서만 작동했습니다. PeeHaa와 같은 함수를 작성하는 대신 L_PAYMENTREQUEST_0_NAME0이 설정되었는지 확인하고, 모든 변수를 $ nvpstr 문자열에 추가합니다. 그런 다음 계속해서 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; 
    } 
} 
관련 문제