Homnath Bagale
Homnath Bagale

Reputation: 474

Integrating Paypal chained/parallel payment with express checkout

I have made an web application for reservation system and used paypal as payment gateway. Using the paypal express checkout I can make a payment, but now I want to split payment between me as service provider and respected hotel in the ratio of 5% : 95%. How can I accomplish this using express checkout in php?

Paypal.config

     $currency = '$'; //Currency sumbol or code APP-80W284485P519543T

     //paypal settings sandbox
     $PayPalMode            = 'sandbox'; // sandbox or live
     $PayPalApiUsername     = 'email'; //PayPal API Username
     $PayPalApiPassword     = '1400209342'; //Paypal API password
     $PayPalApiSignature    = 'AFcWxV21C7fd0v3bYYYRCpSSRl31AIicHs2L8N-aSaeIWzH3DX-kQJPv'; //Paypal API Signature
     $PayPalCurrencyCode    = 'USD'; //Paypal Currency Code
     $PayPalReturnURL       = returnURL; //Point to process.php page
     $PayPalCancelURL       = cancelURL; //Cancel URL if user clicks cancel

paypal.class

    class MyPayPal {

    public function PPHttpPost($methodName_, $nvpStr_, $PayPalApiUsername, $PayPalApiPassword, $PayPalApiSignature, $PayPalMode) {
        // Set up your API credentials, PayPal end point, and API version.
        $API_UserName = urlencode($PayPalApiUsername);
        $API_Password = urlencode($PayPalApiPassword);
        $API_Signature = urlencode($PayPalApiSignature);

        $paypalmode = ($PayPalMode=='sandbox') ? '.sandbox' : '';

        $API_Endpoint = "https://api-3t".$paypalmode.".paypal.com/nvp";
        $version = urlencode('109.0');

        // Set the curl parameters.
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $API_Endpoint);
        curl_setopt($ch, CURLOPT_VERBOSE, 1);

        // Turn off the server and peer verification (TrustManager Concept).
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);

        // Set the API operation, version, and API signature in the request.
        $nvpreq = "METHOD=$methodName_&VERSION=$version&PWD=$API_Password&USER=$API_UserName&SIGNATURE=$API_Signature$nvpStr_";

        // Set the request as a POST FIELD for curl.
        curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);

        // Get response from the server.
        $httpResponse = curl_exec($ch);

        if(!$httpResponse) {
            exit("$methodName_ failed: ".curl_error($ch).'('.curl_errno($ch).')');
        }

        // Extract the response details.
        $httpResponseAr = explode("&", $httpResponse);

        $httpParsedResponseAr = array();
        foreach ($httpResponseAr as $i => $value) {
            $tmpAr = explode("=", $value);
            if(sizeof($tmpAr) > 1) {
                $httpParsedResponseAr[$tmpAr[0]] = $tmpAr[1];
            }
        }

        if((0 == sizeof($httpParsedResponseAr)) || !array_key_exists('ACK', $httpParsedResponseAr)) {
            exit("Invalid HTTP Response for POST request($nvpreq) to $API_Endpoint.");
        }

    return $httpParsedResponseAr;
  }

 }

and paypal payment method

         $padata = '&METHOD=SetExpressCheckout' .
                    '&RETURNURL=' . urlencode($PayPalReturnURL) .
                    '&CANCELURL=' . urlencode($PayPalCancelURL) .
                    '&PAYMENTREQUEST_0_PAYMENTACTION=' . urlencode("SALE") .
                    $paypal_data .
                    '&NOSHIPPING=1' . //set 1 to hide buyer's shipping address, in-case products that does not require shipping
                    '&PAYMENTREQUEST_0_ITEMAMT=' . urlencode($ItemTotalPrice) .
                    '&PAYMENTREQUEST_0_SHIPPINGAMT=' . urlencode($ShippinCost) .
                    '&PAYMENTREQUEST_0_SHIPDISCAMT=' . urlencode($discount) .
                    '&PAYMENTREQUEST_0_AMT=' . urlencode($GrandTotal) .
                    '&PAYMENTREQUEST_0_CURRENCYCODE=' . urlencode($PayPalCurrencyCode) .
                    '&LOCALECODE=GB' . //PayPal pages to match the language on your website.
                    '&LOGOIMG=http://salyani.org/booking/contents/images/BookingBeta100PX.png' . //site logo
                    '&CARTBORDERCOLOR=FFFFFF' . //border color of cart
                    '&ALLOWNOTE=1';

Upvotes: 1

Views: 1386

Answers (1)

Vimalnath
Vimalnath

Reputation: 6463

You can do Parallel Payment using Express Checkout by including both primary and secondary information for each of the two payments. More details here

But, you cannot do Chain Payments with express checkout. You will need to look into adaptive payments .

You will just need to include the following sample request in your SEtexpress checkout request.

METHOD=SetExpressCheckout                  
RETURNURL=http://example.com/success.html  
CANCELURL=http://example.com/canceled.html 
VERSION=93    
PAYMENTREQUEST_0_CURRENCYCODE=USD
PAYMENTREQUEST_0_AMT=250                            
PAYMENTREQUEST_0_ITEMAMT=225
PAYMENTREQUEST_0_TAXAMT=25
PAYMENTREQUEST_0_PAYMENTACTION=Order
PAYMENTREQUEST_0_DESC=Sunset Sail for Two
[email protected]  
PAYMENTREQUEST_0_PAYMENTREQUESTID=CART286-PAYMENT0    
L_PAYMENTREQUEST_0_NAME0=Departs Santa Cruz Harbor 
L_PAYMENTREQUEST_0_NUMBER0=Sunset Sail 22
L_PAYMENTREQUEST_0_QTY0=1                      

L_PAYMENTREQUEST_0_AMT0=225 
L_PAYMENTREQUEST_0_TAXAMT0=25                 


PAYMENTREQUEST_1_AMT=250                            
PAYMENTREQUEST_1_ITEMAMT=225
PAYMENTREQUEST_1_TAXAMT=25
PAYMENTREQUEST_1_PAYMENTACTION=Order
PAYMENTREQUEST_1_DESC=Sunset Sail for Two
PAYMENTREQUEST_1_SELLERPAYPALACCOUNTID=YYY.com  
PAYMENTREQUEST_1_PAYMENTREQUESTID=CART286-PAYMENT1    
L_PAYMENTREQUEST_1_NAME0=Departs Santa Cruz Harbor 
L_PAYMENTREQUEST_1_NUMBER0=Sunset Sail 22
L_PAYMENTREQUEST_1_QTY0=1                      

L_PAYMENTREQUEST_1_AMT0=225 
L_PAYMENTREQUEST_1_TAXAMT0=25  

enter image description here

Upvotes: 1

Related Questions