...
✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

Hur man ställer in återkommande betalningar på Authorize.net

16

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.jsonfil 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 installkommandot. 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.phpoch 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 createSubscriptionmetoden 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 createSubscriptiontar 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 createSubscriptionskapar 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.

Inspelningskälla: artisansweb.net

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer