2012-03-02 3 views
9

기본적으로 Adaptive Payments의 PAY 통화를 프로그래밍 방식으로 사용하고 즉시 내 페이팔 계정에서 다른 계정으로 자금을 보냅니다. According to the documentation, 내가 senderEmail (Adaptive Payments를 설정하는 데 사용 된 본인의 페이팔 주소)을 지정하는 한, 이것은 축 어적으로 작동해야합니다.PayPal Adaptive Payments IMPLICIT Pay API

그러나 전화를 걸면 항상 "COMPLETED"대신 "CREATED"가 표시됩니다. Created는 시스템이 수동으로 PayPal에 로그인하여 지불을 승인하기를 원함을 의미합니다. 나는이 지불이 그 자리에서 자동으로 일어나기를 정말로 필요로한다. 어떤 도움을 주시면 감사하겠습니다.

여기 내 요청 문자열입니다

currencyCode=USD& 
returnUrl=http%3A%2F%2Fwww.website.com%2F& 
actionType=PAY& 
cancelUrl=http%3A%2F%2Fwww.website.com%2F& 
receiverList.receiver%280%29.email=receiver%40gmail.com& 
receiverList.receiver%280%29.amount=1.00& 
requestEnvelope.senderEmail=me%40gmail.com& 
clientDetails.deviceId=mydevice& 
clientDetails.ipAddress=127.0.0.1& 
clientDetails.applicationId=APP-ZZZZZZZZZZZZZ& 
requestEnvelope.errorLanguage=en_US& 
memo=memo& 
feesPayer=EACHRECEIVER& 
ipnNotificationUrl=http%3A%2F%2Fwww.website.com%2Fpay.php 

그리고 여기 페이팔의 응답입니다 :

[responseEnvelope.timestamp] => 2012-03-01T19:09:57.290-08:00 
[responseEnvelope.ack] => Success 
[responseEnvelope.correlationId] => 71efd416a2100 
[responseEnvelope.build] => 2486531 
[payKey] => AP-ZZZZZZZZZZZZZZZ 
[paymentExecStatus] => CREATED 
+0

상기의 경우 paypal에서 비밀번호를 다시 입력해야합니까? – Sripaul

답변

21

것은 내가 말했듯이 모든 것을 잊어 버려. 문제는 샌드 박스와 라이브 중 하나의 불일치가 아니라 'senderEmail'의 잘못된 매개 변수입니다.

은 간단하게 변경 :

[email protected]& 

에 :

[email protected]& 

예를 들어, 다음 반환에 'COMPLETED'암시 지불.

<?php 

function AdaptiveCall($bodyparams, $method, $payKey) { 

try 
{ 

    $body_data = http_build_query($bodyparams, "", chr(38)); 
    $url = trim("https://svcs.sandbox.paypal.com/AdaptivePayments/".$method.""); 
    $params = array("http" => array( 
         "method" => "POST", 
         "content" => $body_data, 
          "header" => "X-PAYPAL-SECURITY-USERID: xxxxxxxxx\r\n" . 
             "X-PAYPAL-SECURITY-SIGNATURE: xxxxxxxxxxx\r\n" . 
             "X-PAYPAL-SECURITY-PASSWORD: xxxxxxx\r\n" . 
             "X-PAYPAL-APPLICATION-ID: APP-80W284485P519543T\r\n" . 
             "X-PAYPAL-REQUEST-DATA-FORMAT: NV\r\n" . 
             "X-PAYPAL-RESPONSE-DATA-FORMAT: NV\r\n" 
            ) 
        ); 


    //create stream context 
    $ctx = stream_context_create($params); 


    //open the stream and send request 
    $fp = @fopen($url, "r", false, $ctx); 

    //get response 
    $response = stream_get_contents($fp); 

    //check to see if stream is open 
    if ($response === false) { 
     throw new Exception("php error message = " . "$php_errormsg"); 
    } 

    //close the stream 
    fclose($fp); 

    //parse the ap key from the response 

    $keyArray = explode("&", $response); 

    foreach ($keyArray as $rVal){ 
     list($qKey, $qVal) = explode ("=", $rVal); 
      $kArray[$qKey] = $qVal; 
    } 

//print the response to screen for testing purposes 
    If ($kArray["responseEnvelope.ack"] == "Success") { 
     echo "<strong>".$method ."</strong><br>"; 
     foreach ($kArray as $key =>$value){ 
     echo $key . ": " .$value . "<br/>"; 

    } 
    // Return payKey 
    global $payKey; 
    if(!empty($kArray['payKey'])) { $payKey = $kArray['payKey']; return($payKey); } 

    } 
    else { 
     echo 'ERROR Code: ' . $kArray["error(0).errorId"] . " <br/>"; 
     echo 'ERROR Message: ' . urldecode($kArray["error(0).message"]) . " <br/>"; 
    } 

    } 


catch(Exception $e) { 
    echo "Message: ||" .$e->getMessage()."||"; 
    } 
} 



//Create Pay body 
$bodyparams = array ( "requestEnvelope.errorLanguage" => "en_US", 
         'actionType' => 'PAY', 
         'currencyCode' => 'USD', 
         'receiverList.receiver(0).email' => '[email protected]', 
         'receiverList.receiver(0).amount' => '1.00', 
         'senderEmail' => 'xxxxxxxxx', 
         'memo' => 'Test memo', 
         'ipnNotificationUrl' => 'http://xxxxxxxx', 
         'cancelUrl' => 'http://xxxxxxxxx', 
         'returnUrl' => 'http://xxxxxxxxxx' 
        ); 

        // Call Pay API 
AdaptiveCall($bodyparams, "Pay"); 

?> 

지불 응답 :
responseEnvelope.timestamp : 2012-03-03T09 % 3A10 % 3A22.900-08 % 3A00
responseEnvelope.ack : 성공
responseEnvelope.correlationId : 4bc5cfc4a7514
responseEnvelope.build : 2,486,531
payKey : AP-1XJ7636763429720C
paymentExecStatus :

,536,913,632 완료 10
+17

커피 한 잔이나 다른 것을 사 줄 수 있습니까? =) –

+0

나는 똑같은 일을하고있다. 하지만 나는'returnUrl'과'cancelUrl'을 어떻게 처리해야할지 모른다. 웹 플로우가 없는데 그냥 건너 뛸 수 있을까요? –

+0

PayPal에 따르면 "** 반드시 필요합니다 **하지만 승인 (명시 적 지불)이 필요한 지불에만 사용됩니다."따라서 가짜 URL을 사용할 수 있습니다. – Matanya

관련 문제