Інтеграція PayPal Payment Gateway у PHP за допомогою API REST PayPal
PayPal – один із найбільш надійних платіжних шлюзів в Інтернеті. Він широко використовується на веб-сайтах для прийому платежів в Інтернеті. Однак документацію API PayPal зрозуміти непросто. Для розробника, який збирається інтегрувати платіжний шлюз PayPal вперше, його успіх займе багато годин. Я витратив шалену кількість годин, читаючи документацію API PayPal. А згодом зрозуміють, що для інтеграції немає необхідності детально читати документацію Paypal.
У цій статті ми вивчаємо, як інтегрувати платіжний шлюз PayPal за допомогою API PayPal REST. Ми збираємось використовувати бібліотеку GitHub, надану Omnipay. Omnipay забезпечує простий і простий спосіб інтеграції різних платіжних шлюзів у вашу веб-програму. Їх структура коду також є чистою та ефективною. Розробникам це сподобається.
Отримайте ідентифікатор клієнта PayPal та секрет клієнта
Для інтеграції PayPal на веб-сайті спочатку потрібно створити додаток REST API в обліковому записі розробника PayPal. Після створення програми ви отримаєте ідентифікатор клієнта та секрет клієнта, що знадобиться на наступних кроках.
Щоб створити програму REST API, перейдіть у свій обліковий запис розробника PayPal і увійдіть на інформаційну панель.
На інформаційній панелі розробника натисніть меню «Мої програми та облікові дані». Натисніть кнопку "Створити додаток" у розділі REST API apps.
На наступному кроці введіть назву програми, і ви отримаєте ідентифікатор клієнта та секрет клієнта. У моєму випадку, на скріншоті нижче, я бачу облікові дані пісочниці. У вашому випадку це можуть бути реальні дані. Або ви також можете спробувати з вашими обліковими даними пісочниці.
Встановлення бібліотеки та базове налаштування
Як я вже сказав, ми використовуватимемо Omnipay для інтеграції API PayPal REST. Спочатку нам потрібно встановити їхні бібліотеки за допомогою Composer. Виконайте команду нижче, щоб встановити бібліотеки.
composer require league/omnipay omnipay/paypal
Після встановлення бібліотеки створіть файл конфігурації, де ми зберігаємо наші облікові дані API, пишемо підключення до БД та ініціалізуємо шлюз.
config.php
<?php
require_once "vendor/autoload.php";
use OmnipayOmnipay;
define('CLIENT_ID', 'PAYPAL_CLIENT_ID_HERE');
define('CLIENT_SECRET', 'PAYPAL_CLIENT_SECRET_HERE');
define('PAYPAL_RETURN_URL', 'YOUR_SITE_URL/success.php');
define('PAYPAL_CANCEL_URL', 'YOUR_SITE_URL/cancel.php');
define('PAYPAL_CURRENCY', 'USD'); // set your currency here
// Connect with the database
$db = new mysqli('localhost', 'MYSQL_DB_USERNAME', 'MYSQL_DB_PASSWORD', 'MYSQL_DB_NAME');
if ($db->connect_errno) {
die("Connect failed: ". $db->connect_error);
}
$gateway = Omnipay::create('PayPal_Rest');
$gateway->setClientId(CLIENT_ID);
$gateway->setSecret(CLIENT_SECRET);
$gateway->setTestMode(true); //set it to 'false' when go live
Тут я передав параметр ‘Paypal_Rest’ методу create Omnipay. Omnipay у фоновому режимі викликає PayPal REST API, здійснюючи оплату через нього.
Далі створіть просту форму, де користувач може ввести суму. Для демонстраційних цілей я просто зберігаю одне поле у формі. Ви можете продовжити форму відповідно до ваших вимог.
form.html
<form action="charge.php" method="post">
<input type="text" name="amount" value="20.00" />
<input type="submit" name="submit" value="Pay Now">
</form>
Коли платіж буде завершено, ми повинні зберегти деталі транзакції в таблиці бази даних. Створіть таблицю бази даних, виконавши наведений нижче запит SQL.
CREATE TABLE `payments` ( `id` int(11) NOT NULL AUTO_INCREMENT,
`payment_id` varchar(255) NOT NULL,
`payer_id` varchar(255) NOT NULL,
`payer_email` varchar(255) NOT NULL,
`amount` float(10,2) NOT NULL,
`currency` varchar(255) NOT NULL,
`payment_status` varchar(255) NOT NULL,
PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;
У цій таблиці немає зовнішнього ключа, оскільки він призначений лише для демонстраційних цілей. Користувач може додати стовпець user_id у цій таблиці для посилання на оплату з користувачем.
Інтеграція PayPal Payment Gateway у PHP за допомогою API REST PayPal
При використанні PayPal REST API користувач перенаправляє на PayPal для завершення платежу. Після здійснення платежу користувач перенаправить назад до нашої програми на основі статусу успіху чи невдачі. Ми визначили ці URL-адреси у config.php
файлі вище.
Після того, як користувач переспрямовує назад до нашої програми з успішною відповіддю, нам потрібно здійснити платіж у нашому PHP-файлі, який є success.php
у нашому випадку. Ми також зберігаємо інформацію про платіж після здійснення платежу за допомогою API PayPal REST. Тож наш код буде таким.
заряд.php
<?php
require_once 'config.php';
if (isset($_POST['submit'])) {
try {
$response = $gateway->purchase(array(
'amount' => $_POST['amount'],
'currency' => PAYPAL_CURRENCY,
'returnUrl' => PAYPAL_RETURN_URL,
'cancelUrl' => PAYPAL_CANCEL_URL,
))->send();
if ($response->isRedirect()) {
$response->redirect(); // this will automatically forward the customer
} else {
// not successful
echo $response->getMessage();
}
} catch(Exception $e) {
echo $e->getMessage();
}
}
успіх.php
<?php
require_once 'config.php';
// Once the transaction has been approved, we need to complete it.
if (array_key_exists('paymentId', $_GET) && array_key_exists('PayerID', $_GET)) {
$transaction = $gateway->completePurchase(array(
'payer_id' => $_GET['PayerID'],
'transactionReference' => $_GET['paymentId'],
));
$response = $transaction->send();
if ($response->isSuccessful()) {
// The customer has successfully paid.
$arr_body = $response->getData();
$payment_id = $arr_body['id'];
$payer_id = $arr_body['payer']['payer_info']['payer_id'];
$payer_email = $arr_body['payer']['payer_info']['email'];
$amount = $arr_body['transactions'][0]['amount']['total'];
$currency = PAYPAL_CURRENCY;
$payment_status = $arr_body['state'];
// Insert transaction data into the database
$isPaymentExist = $db->query("SELECT * FROM payments WHERE payment_id = '".$payment_id."'");
if($isPaymentExist->num_rows == 0) {
$insert = $db->query("INSERT INTO payments(payment_id, payer_id, payer_email, amount, currency, payment_status) VALUES('". $payment_id ."', '". $payer_id ."', '". $payer_email ."', '". $amount ."', '". $currency ."', '". $payment_status ."')");
}
echo "Payment is successful. Your transaction id is: ". $payment_id;
} else {
echo $response->getMessage();
}
} else {
echo 'Transaction is declined';
}
cancel.php
<h3>User is canceled the payment.</h3>
Надішліть інформацію про товар на PayPal
У наведеному вище коді ми надсилаємо суму для оплати на PayPal. Ви також можете надіслати інформацію про товар. Ваші клієнти можуть побачити ці деталі товару на сторінці оплати перед здійсненням платежу.
Щоб надіслати інформацію про товар, вам потрібно передати масив ‘items’ purchase
методу наступним чином.
$response = $gateway->purchase(array(
'amount' => $_POST['amount'],
'items' => array(
array(
'name' => 'Course Subscription',
'price' => $_POST['amount'],
'description' => 'Get access to premium courses.',
'quantity' => 1
),
),
'currency' => PAYPAL_CURRENCY,
'returnUrl' => PAYPAL_RETURN_URL,
'cancelUrl' => PAYPAL_CANCEL_URL,
))->send();
Тут я передав деталі продукту статично. Ви повинні зробити його динамічним залежно від вашого продукту.
Сподіваюся, ви дізналися про інтеграцію PayPal Payment Gateway у PHP. Я хотів би почути ваші думки чи пропозиції у розділі коментарів нижче.
Пов’язані статті
- Приймайте платежі за допомогою кредитної картки за допомогою PayPal Payments Pro у PHP
- Прийміть оплату кредитною карткою, використовуючи Authorize.net Payment Gateway у PHP
- Посібник з інтеграції смуг на веб-сайті з PHP