Hur man ställer in återkommande betalningar på Authorize.net
Vi har skrivit en artikel Acceptera kreditkortsbetalning med Authorize.net Payment Gateway. I den artikeln diskuterade vi hur man kan få kreditkortsbetalning via Authorize.net. Dessutom är den artikeln i grunden inriktad på engångsbetalning.
Men tänk om någon vill integrera återkommande betalningar i sin ansökan? I den här artikeln visar vi dig hur du ställer in återkommande betalningar med Authorize.net.
Vad är återkommande betalning?
Återkommande betalning eller prenumeration innebär att kreditkortet automatiskt tar ut ett fast belopp efter ett visst intervall och under en viss tidsperiod.
Låt oss till exempel säga att du driver din webbplats på Bluehost- hosting och att du har betalat ett belopp för det första året. När din plan går ut kommer Bluehost automatiskt att debitera din kreditkortsbetalning för nästa år (om du har valt återkommande betalningsalternativ).
Fördelen med att tillåta prenumerationsplan är att du inte behöver komma ihåg utgångsdatum för den tjänst du använder. Tjänsteleverantören behåller det som ett automatiserat system. När din plan gått ut förnyar de din tjänst genom att ta betalningar från ditt kreditkort i bakgrunden.
Med detta sagt, låt oss se hur man ställer in återkommande betalningar med Authorize.net.
Du bör först läsa vår artikel Acceptera kreditkortsbetalning med Authorize.net Payment Gateway. I den artikeln har vi diskuterat om installation och konfiguration av Authorize.net SDK-bibliotek.
För vår handledning använder vi sandbox-kontot. Så du bör först skapa ditt Sandbox-konto och hämta dina API-nycklar. Du hittar dina API-nycklar från Account-> API Credentials & Keys.
Installation
För att komma igång måste vi installera PHP SDK Library. Vi rekommenderar Composer för installation av biblioteket.
Skapa en composer.json
fil i din projektkatalog och lägg till koden nedan i den.
kompositör.json
{
"require": {
"php": ">=5.6",
"authorizenet/authorizenet": "~1.9.6"
}
}
Öppna terminalen i din projektkatalog och kör composer install
kommandot. Detta kommando hämtar beroendet av ett bibliotek.
Ställ in miljön
Vi har installerat PHP SDK-biblioteket. Skapa nu två filer som heter constants.php
och subscriptionpayment.php
. I filen constants.php lagrar vi våra API-nycklar enligt följande.
konstanter.php
<?php
define('ANET_LOGIN_ID', 'YOUR_LOGIN_ID');
define('ANET_TRANSACTION_KEY', 'YOUR_TRANSACTION_KEY');
?>
Se till att du har ersatt platshållarna YOUR_LOGIN_ID och YOUR_TRANSACTION_KEY med faktiska värden.
subscriptionpayment.php
är filen där vi kommer att skriva en kod för abonnemangsbetalningar av ett kreditkort. För att göra det först måste vi inkludera kärnfiler från biblioteket.
prenumerationsbetalning.php
<?php
require_once "vendor/autoload.php";
require_once "constants.php";
use netauthorizeapicontractv1 as AnetAPI;
use netauthorizeapicontroller as AnetController;
?>
Faktisk kod för återkommande betalningar på Authorize.net
Authorize.net tillhandahåller ett exempelkodbibliotek för utvecklarreferens. För vår handledning använder vi referensen till RecurringBilling.
Vi modifierar createSubscription
metoden något från referenskoden och skriver den enligt följande.
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;
}
Lägg märke till raden $response = $controller->executeWithApiResponse(netauthorizeapiconstantsANetEnvironment::SANDBOX);
från ovanstående metod. När vi går över till produktion bör vi byta SANDBOX till PRODUKTION i den här linjen. Vi måste också ändra inloggnings-id och transaktionsnycklar så att de matchar vårt live-konto.
Vår metod createSubscription
tar en arrayparameter som vi bör bygga på nedan.
$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'
];
Vi använder testkreditkortsnummer som anges i testguiden.
Genom att överföra arrayen ovan till funktionen createSubscription
skapar den en prenumerationsbetalning på 1,00 USD efter varje 7 dagar upp till 10 faktureringscykler.
Slutlig kod
prenumerationspaymen.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;
}
?>
Vi hoppas att du förstår hur du ställer in återkommande betalningar i Authorize.net. Dela dina tankar i kommentarsektionen nedan.