|

|  How to Access PayPal Express Checkout API in PHP

How to Access PayPal Express Checkout API in PHP

October 31, 2024

Unlock seamless transactions with our PHP guide to accessing PayPal Express Checkout API. Enhance your user experience with this clear step-by-step tutorial.

How to Access PayPal Express Checkout API in PHP

 

Configure Your PayPal API Credentials

 

  • Obtain your API credentials (API username, password, and signature). These can be accessed through the PayPal Developer portal under your account's API credentials section.
  •  
  • Make sure your account is set up to use PayPal Express Checkout, either in sandbox or production mode, depending on your environment.

 

Set Up Your PHP Environment

 

  • Ensure your server environment has PHP and cURL enabled, as cURL will be used to handle API requests.
  • Install any necessary dependencies using a package manager like Composer if needed.

 

Write the API Request Code

 

  • Create a PHP script for generating and handling API requests to the PayPal Express Checkout.
  • Construct the API endpoint URL. For sandbox: `https://api-3t.sandbox.paypal.com/nvp`, for live: `https://api-3t.paypal.com/nvp`.

 

$api_endpoint = "https://api-3t.sandbox.paypal.com/nvp";

 

Build the Request Parameters

 

  • Create an associative array for storing your API request parameters such as `METHOD`, `VERSION`, `USER`, `PWD`, `SIGNATURE`, along with any other necessary fields for the 'SetExpressCheckout' API method.
  • Make sure to specify the return and cancel URLs, which direct the customer after they login to PayPal and accept or cancel the payment.

 

$request_params = array(
    'METHOD' => 'SetExpressCheckout',
    'USER' => 'your_api_username',
    'PWD' => 'your_api_password',
    'SIGNATURE' => 'your_api_signature',
    'VERSION' => '93',
    'PAYMENTREQUEST_0_AMT' => '20.00',
    'PAYMENTREQUEST_0_CURRENCYCODE' => 'USD',
    'RETURNURL' => 'http://yourwebsite.com/success.php',
    'CANCELURL' => 'http://yourwebsite.com/cancel.php'
);

 

Make the API Call

 

  • Convert your request parameters into a format suitable for HTTP POST requests.
  • Use cURL to initialize and execute the request to the PayPal's server.
  • Handle the response provided by PayPal and check the API result.

 

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $api_endpoint);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
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);

// Convert request array to NVP string
$nvp_string = http_build_query($request_params);
curl_setopt($ch, CURLOPT_POSTFIELDS, $nvp_string);
$response = curl_exec($ch);

if (!$response) {
    exit("CURL Error : " . curl_error($ch));
}

curl_close($ch);

// Processing the response
parse_str($response, $parsed_response);
if ($parsed_response["ACK"] == "Success") {
    echo "Express Checkout Token: " . $parsed_response["TOKEN"];
} else {
    echo "Error: " . $parsed_response["L_LONGMESSAGE0"];
}

 

Redirect to PayPal

 

  • Once you retrieve a token from the 'SetExpressCheckout' response, redirect the user to the PayPal for approval.
  • Construct the redirect URL using the token received in the previous step.

 

header("Location: https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=" . $parsed_response["TOKEN"]);
exit();

 

Handle the Return and Complete the Payment

 

  • On the return URL, retrieve the token and payer ID in order to complete the payment with a 'DoExpressCheckoutPayment' API call.
  • Check the transaction for any errors and handle the logic on success or failure.

 

// After paypal returns to your RETURNURL, you will have token and payer ID
$token = $_GET['token'];
$payer_id = $_GET['PayerID'];

$payment_params = array(
    'METHOD' => 'DoExpressCheckoutPayment',
    'USER' => 'your_api_username',
    'PWD' => 'your_api_password',
    'SIGNATURE' => 'your_api_signature',
    'VERSION' => '93',
    'TOKEN' => $token,
    'PAYERID' => $payer_id,
    'PAYMENTREQUEST_0_AMT' => '20.00',
    'PAYMENTREQUEST_0_CURRENCYCODE' => 'USD'
);

// Similar cURL request as before to complete payment