Paypal get transaction details with PHP cURL

paypal api get transaction details
how to get transaction id from paypal return url
paypal transaction details
paypal get order details
how to get paypal response in php
paypal api details
paypal sdk php

So after alot of searching around I've finally been able to successfully get my Paypal access token using PHP cURL. Now i'm trying to retrieve transaction details based on transaction id. So far i think I've gotten the call URL correct however i think that my post data formatting may be incorrect. The Code used is found below:


//this function is for handling post call requests
function make_post_call($url, $postdata) {
    global $token;
    $curl = curl_init($url); 
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($curl, CURLOPT_SSLVERSION , 6);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array(
                'Authorization: Bearer '.$token,
                'Accept: application/json',
                'Content-Type: application/json'

    curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata); 
    $response = curl_exec( $curl );
    print_r($response); //IM NOW RECEIVING OUTPUT, however symbols are now being replaced by placeholders such as '%40', how can i prevent this?
    if (empty($response)) {
        die(curl_error($curl)); //close due to error
    } else {
        $info = curl_getinfo($curl);
        echo "Time took: " . $info['total_time']*1000 . "ms\n";
        curl_close($curl); // close cURL handler
        if($info['http_code'] != 200 && $info['http_code'] != 201 ) {
            echo "Received error: " . $info['http_code']. "\n";
            echo "Raw response:".$response."\n";
    // Convert the result from JSON format to a PHP array 
    $jsonResponse = json_decode($response, TRUE);
    return $jsonResponse;

$token = get_access_token($url,$postArgs); //works and returns a valid access token

//This is the URL for the call
$url = '';

//This is the data to be sent in the call 
$postdata = array(
'USER' => '', 
'METHOD' => 'GetTransactionDetails', 
'VERSION' => '123', 
'TransactionID' => '1RE953245246192109'

$postdata = http_build_query($postdata); 
//$postdata = json_encode($postdata); //Is this the correct way of formatting? 

$transactionInfo = make_post_call($url, $postdata); //get transaction details NOT WORKING

print_r($transactionInfo); //does not print anything

im not recieving any cURL errors so i assume that the problem is either the data im sending or how i format it.

A breif Paypal guide on how to do this can be found here-> However it is written in cURL and not PHP cURL extension so im not sure if im sending the data properly.

Paypal GetTransactionDetails details here->

Any guidance regarding data formatting, or any other suggestions are greatly appreciated!


Now when i'm printing the result as soon as the cURL statement is executed im receiving information like this:


As can be seen some symbols such as periods are being replaced by placeholders such as '%40'. Can the sorce of this be identified? is it because i'm expecting a JSON response?

To build a http query string from a PHP array you can use PHP http_build_query(). Example:

$array = ['username' => 'John', 'password' => '123456abc'];
$postdata = http_build_query($array);

The symbol you mentioned is the urlencoded form of special characters. Http request will require the query string to be urlencoded. %40 is the urlencoded form of @. If in the future you require encoding/decoding to/from urlencoded string, you can use rawurldecode(), rawurlencode(), urlencode() and urldecode().

For parsing the response from PAYPAL NVP API. You can use parse_str(). Example 1:

$response = 'status=success&code=02';
parse_str($response, $response_array);
//$response_array will contain the $response as array

Example 2:

$response = 'status=success&code=02';
//this will display success
echo $status;
//this will display 02
echo $code;

Get Transaction Details, Saves the order in your database. Returns a successful response to the client. JavaScript cURL. Node PHP Python Ruby Get Transaction Details. Note: This guide assumes you have completed a basic Smart Payment Buttons integration. On the server. This code: Sets up your server to make calls to PayPal. Sets up your server to receive a call from the client with the order ID. Calls PayPal to get the order details. Handles any errors from the call.

function get_transaction_details( $transaction_id ) { 
    $api_request = 'USER=' . urlencode( 'api_username' )
                .  '&PWD=' . urlencode( 'api_password' )
                .  '&SIGNATURE=' . urlencode( 'api_signature' )
                .  '&VERSION=76.0'
                .  '&METHOD=GetTransactionDetails'
                .  '&TransactionID=' . $transaction_id;

    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_URL, '' ); // For live transactions, change to ''
    curl_setopt( $ch, CURLOPT_VERBOSE, 1 );

    // Uncomment these to turn off server and peer verification
    // 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 parameters for this transaction
    curl_setopt( $ch, CURLOPT_POSTFIELDS, $api_request );

    // Request response from PayPal
    $response = curl_exec( $ch );
    // print_r($response);

    // If no response was received from PayPal there is no point parsing the response
    if( ! $response )
        die( 'Calling PayPal to change_subscription_status failed: ' . curl_error( $ch ) . '(' . curl_errno( $ch ) . ')' );

    curl_close( $ch );

    // An associative array is more usable than a parameter string
    parse_str( $response, $parsed_response );

    return $parsed_response;
$response = get_transaction_details('transaction_id');
echo "<pre>"; print_r($response);

Paypal get transaction details with PHP cURL, So after alot of searching around I've finally been able to successfully get my Paypal access token using PHP cURL. Now i'm trying to retrieve transaction details  Run the cURL command. (If the curl command is not found on your computer, download the free cURL executable.) Get a transaction ID. If you need a fresh transaction ID for Try It, you can perform the following to get a handful of transaction IDs created between STARTDATE and ENDDATE (recommendation: replace these with recent dates).

Receiving information from cURL


Please use parse_str("$str"); // add your value here, it will give you proper data format

More details :

Get details of a transaction in a Paypal account via cURL, 2. We have created five fields in the application to inform the values that will be passed to the webservice (Login, Password, Key, transaction ID and API  Hi all, I'm trying to work with the Paypal Sync API in order to get a list of transaction history. I'm able to pull transactions with a specific ID, but unfortunately it's not letting me pull in transactions through a start date and end date. From the API docs: "You must also include either t

Retrieve PayPal Transaction · Developer Hub, Retrieve is a request that gets details about a past PayPal transaction, such as the Enter the PayPal Order ID into the web service URL, in the format: curl -v -X GET Here is how you can view and download your transaction history: Go to Activity.; Click Statements on the right of the page, then click Custom.; Select the transaction type, date range and file format.

PayPal, POST Get Access Token. Returns a curl --location --request GET Creates a payment transactions/sale. Get Started; Get Started. Get Credentials; Get an Access Token. cURL Example; Postman Example; Make REST API Calls; Create Sandbox Accounts; PayPal Security Guidelines; API Reference; API Requests. Query Parameters; HTTP Request Headers. Accept; Authorization; Content-Type; PayPal-Auth-Assertion; PayPal-Client-Metadata-Id; PayPal-Partner-Attribution-Id; PayPal-Request-Id; API Responses

Authorize.Net API Documentation, EXPAND ALL; API Endpoints & Authentication; Payment Transactions PayPal Express Checkout. Authorization Only; Authorization and Capture; Get Details; Authorization Only, Continued; Prior Authorization Capture; Authorization This sample PHP code demonstrates how to perform this function using our PHP SDK. Get credentials. To generate REST API credentials for the sandbox and live environments: Log into the Developer Dashboard with your PayPal account credentials. If you don't have an account, you can click on the sign up option. On My Apps & Credentials, use the toggle to switch between live and sandbox testing apps.

  • The documentation clearly stated name => value pairs not JSON. Use http_build_query() to build the post data. And what makes you think the response will be in JSON?
  • hello! thank you very much for the suggestion (also i'm just guessing that the response is JSON, im not sure what it is really). I changed it back to http_build_query() and added a print statement that printed the cURL result as soon as it was received inside the function and i am now receiving a sorta correct output! how ever some symbols are replaced by place holders such as '%40'
  • That is urldecoded string which is required when doing a http request. Can you comment out all print_r and just do var_dump($POST) after you make the curl request. Please update the question with the result. I think the API will make a return post request.
  • well var_dump($response) results in the same string as presented above, and var_dump($_POST) results in-> array(0) { } EDIT: also sorry if i dont understand u completely, for example i'm not sure a return post request
  • No, that was just my guess because the response looks like a query string. In that case you can try to parse_str($response, $response_array). Where the $response_array will contain the response as array elements.