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