...
✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Як налаштувати періодичні платежі на Authorize.net

19

Ми написали статтю Прийняти оплату кредитною карткою за допомогою Authorize.net Payment Gateway. У цій статті ми обговорили, як можна отримати оплату кредитною карткою через Authorize.net. Крім того, ця стаття в основному зосереджена на одноразовій оплаті.

Але що, якщо хтось хоче інтегрувати періодичні платежі у свою програму? У цій статті ми покажемо вам, як налаштувати періодичні платежі за допомогою Authorize.net.

Що таке періодичний платіж?

Періодичний або передплатний платіж означає автоматичне стягнення з кредитної картки фіксованої суми через певний інтервал і протягом певного періоду часу.

Наприклад, припустимо, ви працюєте на своєму веб-сайті на хостингу Bluehost, і ви заплатили суму за перший рік. Коли термін дії вашого плану закінчується, Bluehost автоматично стягуватиме плату з вашої кредитної картки на наступний рік (якщо ви вибрали варіант періодичного платежу).

Перевага дозволу на план передплати полягає в тому, що вам не потрібно пам’ятати дату закінчення терміну дії послуги, якою ви користуєтесь. Постачальник послуг зберігає його як автоматизовану систему. Після закінчення терміну дії вашого плану вони поновлюють вашу послугу, беручи платежі з вашої кредитної картки у фоновому режимі.

Сказавши це, давайте подивимось, як налаштувати періодичні платежі за допомогою Authorize.net.

Спочатку слід прочитати нашу статтю Прийняти оплату кредитною карткою за допомогою Authorize.net Payment Gateway. У цій статті ми обговорили питання встановлення та налаштування бібліотек Authorize.net SDK.

Для нашого підручника ми використовуємо обліковий запис пісочниці. Тому спочатку слід створити свій обліковий запис Sandbox і отримати ключі API. Ключі API можна знайти в обліковому записі-> Повноваження та ключі API.

Встановлення

Для початку нам потрібно встановити PHP SDK Library. Ми рекомендуємо Composer для встановлення бібліотеки.

Створіть composer.jsonфайл у кореневому каталозі проекту та додайте в нього код нижче.

composer.json

{
    "require": {
        "php": ">=5.6",
        "authorizenet/authorizenet": "~1.9.6"
    }
}

Відкрийте термінал у кореневому каталозі проекту та запустіть composer installкоманду. Ця команда завантажить залежність бібліотеки.

Налаштування середовища

Ми встановили бібліотеку PHP SDK. Тепер створіть два файли з назвою constants.phpта subscriptionpayment.php. У файлі constants.php ми зберігаємо ключі API наступним чином.

константи.php

<?php
define('ANET_LOGIN_ID', 'YOUR_LOGIN_ID');
define('ANET_TRANSACTION_KEY', 'YOUR_TRANSACTION_KEY');
?>

Переконайтеся, що ви замінили заповнювачі YOUR_LOGIN_ID та YOUR_TRANSACTION_KEY на фактичні значення.

subscriptionpayment.php– це файл, де ми напишемо код для оплати підписки за кредитною карткою. Для цього спочатку нам потрібно включити основні файли з бібліотеки.

subscriptionpayment.php

<?php
require_once "vendor/autoload.php";
require_once "constants.php";
 
use netauthorizeapicontractv1 as AnetAPI;
use netauthorizeapicontroller as AnetController;
?>

Фактичний код для періодичних платежів на Authorize.net

Authorize.net надає зразок бібліотеки коду для довідки розробників. Для нашого підручника ми використовуємо посилання RecurringBilling.

Ми трохи модифікуємо createSubscriptionметод із посилального коду і пишемо його наступним чином.

function createSubscription($arr_data = [])
{
    extract($arr_data);
    /* Create a merchantAuthenticationType object with authentication details
       retrieved from the constants file */
    $merchantAuthentication = new AnetAPIMerchantAuthenticationType();
    $merchantAuthentication->setName(ANET_LOGIN_ID);
    $merchantAuthentication->setTransactionKey(ANET_TRANSACTION_KEY);
     
    // Set the transaction's refId
    $refId = 'ref'. time();
    // Subscription Type Info
    $subscription = new AnetAPIARBSubscriptionType();
    $subscription->setName("Sample Subscription");
    $interval = new AnetAPIPaymentScheduleTypeIntervalAType();
    $interval->setLength($intervalLength);
    $interval->setUnit("days");
    $paymentSchedule = new AnetAPIPaymentScheduleType();
    $paymentSchedule->setInterval($interval);
    $paymentSchedule->setStartDate(new DateTime($start_date));
    $paymentSchedule->setTotalOccurrences($totalcycles);
    //$paymentSchedule->setTrialOccurrences("1");
    $subscription->setPaymentSchedule($paymentSchedule);
    $subscription->setAmount($amount);
    //$subscription->setTrialAmount("0.00");
     
    $creditCard = new AnetAPICreditCardType();
    $creditCard->setCardNumber($card_number);
    $creditCard->setExpirationDate($expiry_date);
    $payment = new AnetAPIPaymentType();
    $payment->setCreditCard($creditCard);
    $subscription->setPayment($payment);
    $order = new AnetAPIOrderType();
    $order->setInvoiceNumber(mt_rand(10000, 99999));   //generate random invoice number     
    $order->setDescription("Daily Subscription For 1 USD"); 
    $subscription->setOrder($order); 
     
    $billTo = new AnetAPINameAndAddressType();
    $billTo->setFirstName($first_name);
    $billTo->setLastName($last_name);
    $subscription->setBillTo($billTo);
    $request = new AnetAPIARBCreateSubscriptionRequest();
    $request->setmerchantAuthentication($merchantAuthentication);
    $request->setRefId($refId);
    $request->setSubscription($subscription);
    $controller = new AnetControllerARBCreateSubscriptionController($request);
    $response = $controller->executeWithApiResponse( netauthorizeapiconstantsANetEnvironment::SANDBOX);
     
    if (($response != null) && ($response->getMessages()->getResultCode() == "Ok"))     {
        echo "SUCCESS: Subscription ID: ". $response->getSubscriptionId(). "n";
     }
    else
    {
        echo "ERROR :  Invalid responsen";
        $errorMessages = $response->getMessages()->getMessage();
        echo "Response: ". $errorMessages[0]->getCode(). "  " .$errorMessages[0]->getText(). "n";
    }
    return $response;
}

Зверніть увагу на рядок $response = $controller->executeWithApiResponse(netauthorizeapiconstantsANetEnvironment::SANDBOX);із наведеного вище методу. Коли ми переходимо до виробництва, нам слід змінити ПІСКОВОК на ВИРОБНИЦТВО в цій лінії. Також нам потрібно змінити ідентифікаційний номер і ключі транзакції, щоб вони відповідали нашому реальному рахунку.

Наш метод createSubscriptionбере параметр масиву, який ми повинні побудувати нижче.

$arr_subscription = [
    'intervalLength' => 7, // Here 7 means recurring payment occurs after each 7 days
    'start_date' => date('Y-m-d'),
    'totalcycles' => 10, //Billing cycles. Here 10 means 10 transactions
    'amount' => 1.00,
    'card_number' => '4111111111111111',
    'expiry_date' => '2020-12',
    'first_name' => 'John',
    'last_name' => 'Smith'
];

Ми використовуємо номери тестових кредитних карток, наведені в Посібнику з тестування.

Передаючи функцію вище вказаного масиву createSubscription, вона створюватиме плату за підписку в розмірі 1,00 USD через кожні 7 днів до 10 циклів оплати.

Підсумковий кодекс

subscriptionpaymen.phpt

<?php
require_once "vendor/autoload.php";
require_once "constants.php";
 
use netauthorizeapicontractv1 as AnetAPI;
use netauthorizeapicontroller as AnetController;
 
$arr_subscription = [
    'intervalLength' => 7,
    'start_date' => date('Y-m-d'),
    'totalcycles' => 10,
    'amount' => 1.00,
    'card_number' => '4111111111111111',
    'expiry_date' => '2020-12',
    'first_name' => 'John',
    'last_name' => 'Smith'
];
 
createSubscription($arr_subscription);
 
function createSubscription($arr_data = [])
{
    extract($arr_data);
    /* Create a merchantAuthenticationType object with authentication details
       retrieved from the constants file */
    $merchantAuthentication = new AnetAPIMerchantAuthenticationType();
    $merchantAuthentication->setName(ANET_LOGIN_ID);
    $merchantAuthentication->setTransactionKey(ANET_TRANSACTION_KEY);
     
    // Set the transaction's refId
    $refId = 'ref'. time();
    // Subscription Type Info
    $subscription = new AnetAPIARBSubscriptionType();
    $subscription->setName("Sample Subscription");
    $interval = new AnetAPIPaymentScheduleTypeIntervalAType();
    $interval->setLength($intervalLength);
    $interval->setUnit("days");
    $paymentSchedule = new AnetAPIPaymentScheduleType();
    $paymentSchedule->setInterval($interval);
    $paymentSchedule->setStartDate(new DateTime($start_date));
    $paymentSchedule->setTotalOccurrences($totalcycles);
    //$paymentSchedule->setTrialOccurrences("1");
    $subscription->setPaymentSchedule($paymentSchedule);
    $subscription->setAmount($amount);
    //$subscription->setTrialAmount("0.00");
     
    $creditCard = new AnetAPICreditCardType();
    $creditCard->setCardNumber($card_number);
    $creditCard->setExpirationDate($expiry_date);
    $payment = new AnetAPIPaymentType();
    $payment->setCreditCard($creditCard);
    $subscription->setPayment($payment);
    $order = new AnetAPIOrderType();
    $order->setInvoiceNumber(mt_rand(10000, 99999));   //generate random invoice number     
    $order->setDescription("Daily Subscription For 1 USD"); 
    $subscription->setOrder($order); 
     
    $billTo = new AnetAPINameAndAddressType();
    $billTo->setFirstName($first_name);
    $billTo->setLastName($last_name);
    $subscription->setBillTo($billTo);
    $request = new AnetAPIARBCreateSubscriptionRequest();
    $request->setmerchantAuthentication($merchantAuthentication);
    $request->setRefId($refId);
    $request->setSubscription($subscription);
    $controller = new AnetControllerARBCreateSubscriptionController($request);
    $response = $controller->executeWithApiResponse( netauthorizeapiconstantsANetEnvironment::SANDBOX);
     
    if (($response != null) && ($response->getMessages()->getResultCode() == "Ok"))     {
        echo "SUCCESS: Subscription ID: ". $response->getSubscriptionId(). "n";
     }
    else
    {
        echo "ERROR :  Invalid responsen";
        $errorMessages = $response->getMessages()->getMessage();
        echo "Response: ". $errorMessages[0]->getCode(). "  " .$errorMessages[0]->getText(). "n";
    }
    return $response;
}
?>

Ми сподіваємось, ви розумієте, як налаштувати періодичні платежі на Authorize.net. Будь ласка, поділіться своїми думками в розділі коментарів нижче.

Джерело запису: artisansweb.net

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі