Jak skonfigurować płatności cykliczne w Authorize.net
Napisaliśmy artykuł Akceptuj płatności kartą kredytową za pomocą bramki płatności Authorize.net. W tym artykule omówiliśmy, w jaki sposób można otrzymać płatność kartą kredytową za pośrednictwem Authorize.net. Ponadto ten artykuł zasadniczo dotyczy jednorazowej płatności.
A co, jeśli ktoś chce zintegrować płatności cykliczne w swojej aplikacji? W tym artykule pokazujemy, jak skonfigurować płatności cykliczne za pomocą Authorize.net.
Co to jest płatność cykliczna?
Płatność cykliczna lub abonamentowa oznacza automatyczne obciążanie karty kredytowej stałą kwotą po określonym czasie i przez określony czas.
Załóżmy na przykład, że prowadzisz swoją witrynę na hostingu Bluehost i zapłaciłeś kwotę za pierwszy rok. Kiedy Twój plan wygaśnie, Bluehost automatycznie obciąży Twoją kartę kredytową za następny rok (jeśli wybrałeś opcję płatności cyklicznych).
Zaletą zezwolenia na abonament jest to, że nie musisz pamiętać daty wygaśnięcia usługi, z której korzystasz. Usługodawca utrzymuje to jako zautomatyzowany system. Gdy Twój plan wygaśnie, odnawiają Twoją usługę, pobierając płatności z Twojej karty kredytowej w tle.
Powiedziawszy to, zobaczmy, jak skonfigurować płatności cykliczne za pomocą Authorize.net.
Powinieneś najpierw przeczytać nasz artykuł Akceptuj płatności kartą kredytową za pomocą bramki płatności Authorize.net. W tym artykule omówiliśmy instalację i konfigurację bibliotek Authorize.net SDK.
W naszym samouczku używamy konta piaskownicy. Dlatego powinieneś najpierw utworzyć konto Sandbox i zdobyć klucze API. Możesz znaleźć swoje klucze API w Konto->Poświadczenia i klucze API.
Instalacja
Aby rozpocząć, musimy zainstalować bibliotekę PHP SDK. Do instalacji biblioteki zalecamy Composer.
Utwórz composer.json
plik w katalogu głównym projektu i dodaj do niego poniższy kod.
kompozytor.json
{
"require": {
"php": ">=5.6",
"authorizenet/authorizenet": "~1.9.6"
}
}
Otwórz terminal w katalogu głównym projektu i uruchom composer install
polecenie. To polecenie pobierze zależność biblioteki.
Skonfiguruj środowisko
Zainstalowaliśmy bibliotekę PHP SDK. Teraz utwórz dwa pliki o nazwie constants.php
i subscriptionpayment.php
. W pliku constants.php przechowujemy nasze klucze API w następujący sposób.
stałe.php
<?php
define('ANET_LOGIN_ID', 'YOUR_LOGIN_ID');
define('ANET_TRANSACTION_KEY', 'YOUR_TRANSACTION_KEY');
?>
Upewnij się, że zastąpiłeś symbole zastępcze YOUR_LOGIN_ID i YOUR_TRANSACTION_KEY rzeczywistymi wartościami.
subscriptionpayment.php
to plik, w którym napiszemy kod do płatności abonamentowych kartą kredytową. Aby to zrobić najpierw musimy dołączyć podstawowe pliki z biblioteki.
subskrypcjapayment.php
<?php
require_once "vendor/autoload.php";
require_once "constants.php";
use netauthorizeapicontractv1 as AnetAPI;
use netauthorizeapicontroller as AnetController;
?>
Rzeczywisty kod płatności cyklicznych w Authorize.net
Authorize.net udostępnia przykładową bibliotekę kodu do odniesienia dla programistów. W naszym samouczku używamy odwołania RecurringBilling.
Lekko modyfikujemy createSubscription
metodę z kodu referencyjnego i piszemy ją w następujący sposób.
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;
}
Zwróć uwagę na linię $response = $controller->executeWithApiResponse(netauthorizeapiconstantsANetEnvironment::SANDBOX);
z powyższej metody. Kiedy przechodzimy do produkcji, w tej linii należy zmienić PIASKOWNICĘ na PRODUKCJĘ. Musimy również zmienić nasz identyfikator logowania i klucze transakcyjne, aby pasowały do naszego rachunku rzeczywistego.
Nasza metoda createSubscription
pobiera parametr tablicowy, który powinniśmy zbudować poniżej.
$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'
];
Używamy testowych numerów kart kredytowych podanych w Przewodniku testowania.
Przekazując powyższą tablicę do funkcji createSubscription
utworzy opłatę abonamentową w wysokości 1,00 USD po każdych 7 dniach do 10 cykli rozliczeniowych.
Kod końcowy
subskrypcjapaymen.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;
}
?>
Mamy nadzieję, że rozumiesz, jak skonfigurować płatności cykliczne w Authorize.net. Podziel się swoimi przemyśleniami w sekcji komentarzy poniżej.