Reputation: 1892
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
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