Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PayPal Adaptive Payments IMPLICIT Pay API

I am basically trying to use the PAY call of Adaptive Payments to programmatically and immediately send funds from my own paypal account to other accounts. According to the documentation, so long as I specify the senderEmail (my own paypal address, used to set up the Adaptive Payments), this should work verbatim.

However, when I make the call, I always get result "CREATED" instead of "COMPLETED". Created means the system still wants me to manually log into PayPal and approve the payments. I really need these payments to occur automatically on the spot. Any help would be appreciated.

Here is my request string:

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

And here is the response from 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
like image 370
Authman Apatira Avatar asked Mar 02 '12 23:03

Authman Apatira


People also ask

What is PayPal Adaptive Payments?

PayPal Adaptive Payments handles payments between a sender of a payment and one or more receivers of the payment. It's possible to split the order total with secondary receivers, so you can pay commissions or partners. PayPal is not accepting new signups and activations for Adaptive Payments.

Does PayPal do split payments?

Split purchases between $30-$1,500 into 4 interest-free, bi-weekly payments without the hassle of late fees.

Is PayPal and API?

PayPal offers APIs for new and legacy integrations.


1 Answers

Forget everything I said earlier. The problem isn't an inconsistency between Sandbox and Live either, but rather a wrong parameter for 'senderEmail'.

Simply change:

[email protected]&

To:

[email protected]&

For example, the following returns a 'COMPLETED' implicit payment.

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

?>

Pay response:
responseEnvelope.timestamp: 2012-03-03T09%3A10%3A22.900-08%3A00
responseEnvelope.ack: Success
responseEnvelope.correlationId: 4bc5cfc4a7514
responseEnvelope.build: 2486531
payKey: AP-1XJ7636763429720C
paymentExecStatus: COMPLETED

like image 144
Robert Avatar answered Oct 04 '22 20:10

Robert