Pratish Shrestha
Pratish Shrestha

Reputation: 1892

Paypal PDT not working using CURL

Paypal returns to the site and gives the transaction ID, now using CURL to post data it just isnt working, can anyone help me. It isnt printing the success message.i have searched stack overflow, and still nothing.

    $tx = $_GET['tx'];
            $ID = $_GET['cm'];
            $currency = $_GET['cc'];
            $identity = '0iMIW7w4OXAed9Tvz6l9fpUY8B-E_WtE3toU7sT5gIzDJc9uPUgt9sVCN30'; 


              // Further processing
              // Init cURL

                // Init cURL
                $request = curl_init();

                // Set request options
                $url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
                $fields = array(    
                    'cmd' => '_notify-synch',
                    'tx' => $tx,
                    'at' => $identity,
                );
                curl_setopt($request,CURLOPT_URL, $url);
                curl_setopt($request,CURLOPT_POST, count($fields));
                curl_setopt($request,CURLOPT_POSTFIELDS, http_build_query($fields));
                curl_setopt($request,CURLOPT_RETURNTRANSFER, TRUE);
                curl_setopt($request,CURLOPT_HEADER, FALSE);

                // Execute request and get response and status code
                $response = curl_exec($request);
                $status   = curl_getinfo($request, CURLINFO_HTTP_CODE);

                // Close connection
                curl_close($request);

Upvotes: 1

Views: 635

Answers (1)

Professor Abronsius
Professor Abronsius

Reputation: 33813

I can see no "success message" - nor any attempt to output anything after the curl request, the only thing that struck me - and others may well disagree - is that there is nothing in the options to specifically deal with https communications which, in my experience, require other options to be set. I've not dealt with the PayPal api before so this might provide nothing of use, but.....

try downloading a copy of cacert.pem - google is your friend.

<?php
    $tx = $_GET['tx'];
    $ID = $_GET['cm'];
    $currency = $_GET['cc'];
    $identity = '0iMIW7w4OXAed9Tvz6l9fpUY8B-E_WtE3toU7sT5gIzDJc9uPUgt9sVCN30';

    /* Use the full path to your own cacert.pem, download from the interwebs if you do not have a copy */
    $cacert = 'c:/wwwroot/cacert.pem'; 

    $url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
    $fields = array(    
        'cmd'   => '_notify-synch',
        'tx'    => $tx,
        'at'    => $identity,
    );

    $request = curl_init();
    curl_setopt($request,CURLOPT_URL, $url);

    if( parse_url( $url,PHP_URL_SCHEME )=='https' ){
        curl_setopt( $request, CURLOPT_SSL_VERIFYPEER, FALSE ); /* set to true once you get this working */
        curl_setopt( $request, CURLOPT_SSL_VERIFYHOST, 2 );
        curl_setopt( $request, CURLOPT_CAINFO, realpath( $cacert ) );
    }


    /* this should be true or false not count($fields): in this case true*/
    /*curl_setopt($request,CURLOPT_POST, count( $fields ) );*/
    curl_setopt($request,CURLOPT_POST, true );
    curl_setopt($request,CURLOPT_POSTFIELDS, http_build_query( $fields ) );
    curl_setopt($request,CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($request,CURLOPT_HEADER, FALSE);

    /* Quite often requests get rejected for no useragent */
    curl_setopt($request,CURLOPT_USERAGENT, 'paypal-mozilla-chrome-useragent' );
    curl_setopt($request, CURLINFO_HEADER_OUT, TRUE );


    $response = curl_exec($request);
    $status   = curl_getinfo($request, CURLINFO_HTTP_CODE);

    curl_close($request);
    /* See what the curl request has retrieved */
    echo '<pre>',print_r( $response, true ),$status,'</pre>';
?>

Upvotes: 3

Related Questions