2012-03-02 12 views
9

Zasadniczo staram się korzystać z płatności PAY z Adaptive Payments, aby programowo i natychmiast przesłać środki z mojego własnego konta PayPal na inne konta. According to the documentation, o ile określę adres nadawcy poczty e-mail (mój własny adres paypal, używany do konfigurowania płatności adaptacyjnych), powinien on działać dosłownie.PayPal Płatności adaptacyjne IMPLICIT Pay API

Jednakże, gdy wykonuję połączenie, zawsze otrzymuję wynik "CREATED" zamiast "COMPLETED". Utworzony oznacza, że ​​system nadal chce, abym ręcznie zalogował się do systemu PayPal i zatwierdził płatności. Naprawdę potrzebuję tych płatności, aby pojawiały się automatycznie na miejscu. Każda pomoc będzie doceniona.

Oto moja prośba ciąg:

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 

I tu jest odpowiedź z PayPal:

[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

w powyższej sprawie, czy system PayPal wymaga ponownego wprowadzenia hasła? – Sripaul

Odpowiedz

21

Zapomnij wszystko, co powiedziałem wcześniej. Problem nie jest niespójnością między Sandbox i Live, ale raczej błędnym parametrem dla "senderEmail".

Wystarczy zmienić:

[email protected]& 

Do:

[email protected]& 

Na przykład, następujące Zwraca 'ukończony' niejawny płatniczych.

<?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"); 

?> 

odpowiedź płatna:
responseEnvelope.timestamp: 2012-03-03T09% 3A10% 3A22.900-08% 3A00
responseEnvelope.ack: Sukces
responseEnvelope.correlationId: 4bc5cfc4a7514
responseEnvelope.build: 2486531
payKey AP-1XJ7636763429720C
paymentExecStatus: zakończony

+17

Czy mogę kupić kawę lub coś w tym stylu? =) –

+0

Robię prawie to samo. Ale nie wiem, co zrobić z 'returnUrl' i' cancelUrl'. Czy możemy po prostu je pominąć, gdy nie ma webflowu? –

+0

Według PayPal "jest ** zawsze wymagane **, ale używane tylko w przypadku płatności wymagających zatwierdzenia (wyraźne płatności)", więc możesz użyć fałszywych URL-i. – Matanya

Powiązane problemy