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

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

434

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 для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее