WEB и WordPress новости, темы, плагины. Здесь мы делимся советами и лучшими решениями для сайтов.

Интеграция PayPal Payment Gateway в PHP с использованием PayPal REST API

206

PayPal – один из самых надежных платежных шлюзов в Интернете. Он широко используется на веб-сайтах для приема платежей в Интернете. Однако документацию API PayPal понять непросто. Для разработчика, который собирается интегрировать платежный шлюз PayPal в первый раз, это займет много часов. Я потратил безумное количество часов на чтение документации API PayPal. А позже поймете, что нет необходимости глубоко читать документацию Paypal, чтобы интегрировать ее.

В этой статье мы изучаем, как интегрировать платежный шлюз PayPal с помощью PayPal REST API. Мы собираемся использовать библиотеку GitHub, предоставленную Omnipay. Omnipay предоставляет простой и понятный способ интеграции различных платежных шлюзов в ваше веб-приложение. Их структура кода также чиста и эффективна. Разработчикам это понравится.

Получите идентификатор клиента PayPal и секрет клиента

Для интеграции PayPal на веб-сайт вам сначала необходимо создать приложение REST API в учетной записи разработчика PayPal. После создания приложения вы получите идентификатор клиента и секрет клиента, которые потребуются на следующих шагах.

Чтобы создать приложение REST API, перейдите в свою учетную запись разработчика PayPal и войдите в панель управления.

На панели инструментов разработчика щелкните меню «Мои приложения и учетные данные». Нажмите кнопку «Создать приложение» в разделе приложений REST API.

На следующем шаге введите имя приложения, и вы получите свой идентификатор клиента и секрет клиента. В моем случае на скриншоте ниже я вижу учетные данные песочницы. В вашем случае это могут быть живые учетные данные. Или вы также можете попробовать свои учетные данные песочницы.

Интеграция PayPal Payment Gateway в PHP с использованием PayPal REST API

Установка библиотеки и базовая настройка

Как я уже сказал, мы будем использовать Omnipay для интеграции PayPal REST API. Нам нужно сначала установить их библиотеки с помощью 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 с использованием PayPal REST API

При использовании PayPal REST API пользователь будет перенаправлен на PayPal для завершения платежа. После совершения платежа пользователь будет перенаправлен обратно в наше приложение в зависимости от статуса успеха или отказа. Мы определили эти URL-адреса в config.phpфайле выше.

После того, как пользователь перенаправляется обратно в наше приложение с успешным ответом, нам нужно выполнить платеж в нашем файле PHP, который success.phpв нашем случае. Мы также сохраняем платежную информацию после выполнения платежа с помощью PayPal REST API. Итак, наш код будет следующим.

charge.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();     } }

success.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. Я хотел бы услышать ваши мысли или предложения в разделе комментариев ниже.

Статьи по Теме

Источник записи: artisansweb.net

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее