✅ Notizie, temi, plugin WEB e WordPress. Qui condividiamo suggerimenti e le migliori soluzioni per siti web.

Come impostare pagamenti ricorrenti in Authorize.net

19

Abbiamo scritto un articolo Accetta pagamenti con carta di credito utilizzando il gateway di pagamento Authorize.net. In quell’articolo, abbiamo discusso come si può ricevere il pagamento con carta di credito tramite Authorize.net. Inoltre, quell’articolo è fondamentalmente incentrato sul pagamento una tantum.

Ma cosa succede se qualcuno vuole integrare i pagamenti ricorrenti nella propria applicazione? In questo articolo, ti mostriamo come impostare pagamenti ricorrenti utilizzando Authorize.net.

Che cos’è il pagamento ricorrente?

Pagamento ricorrente o abbonamento significa addebitare automaticamente sulla carta di credito un importo fisso dopo un intervallo specifico e per un periodo di tempo specificato.

Ad esempio, supponiamo che tu stia eseguendo il tuo sito Web sull’hosting Bluehost e che tu abbia pagato un importo per il primo anno. Quando il tuo piano scade, Bluehost addebiterà automaticamente il pagamento della tua carta di credito per l’anno successivo (se hai scelto l’opzione di pagamento ricorrente).

Il vantaggio di consentire il piano di abbonamento è che non è necessario ricordare la data di scadenza del servizio che si sta utilizzando. Il fornitore di servizi lo mantiene come un sistema automatizzato. Una volta scaduto il tuo piano, rinnovano il tuo servizio prelevando i pagamenti dalla tua carta di credito in background.

Detto questo, vediamo come impostare pagamenti ricorrenti utilizzando Authorize.net.

Dovresti prima leggere il nostro articolo Accetta pagamenti con carta di credito utilizzando il gateway di pagamento Authorize.net. In quell’articolo, abbiamo discusso dell’installazione e della configurazione delle librerie Authorize.net SDK.

Per il nostro tutorial, stiamo usando l’account sandbox. Quindi dovresti prima creare il tuo account Sandbox e ottenere le tue chiavi API. Puoi trovare le tue chiavi API da Account->Credenziali e chiavi API.

Installazione

Per iniziare, dobbiamo installare la libreria PHP SDK. Consigliamo Composer per l’installazione della libreria.

Crea un composer.jsonfile nella directory principale del tuo progetto e aggiungi il codice seguente al suo interno.

compositore.json

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

Apri il terminale nella directory principale del tuo progetto ed esegui il composer installcomando. Questo comando scaricherà la dipendenza di una libreria.

Imposta l’ambiente

Abbiamo installato la libreria PHP SDK. Ora crea due file chiamati constants.phpe subscriptionpayment.php. Nel file constants.php memorizziamo le nostre chiavi API come segue.

costanti.php

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

Assicurati di aver sostituito i segnaposto YOUR_LOGIN_ID e YOUR_TRANSACTION_KEY con i valori effettivi.

subscriptionpayment.phpè il file dove scriveremo un codice per i pagamenti in abbonamento di una carta di credito. Per farlo prima, dobbiamo includere i file principali della libreria.

abbonamentopagamento.php

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

Codice effettivo per pagamenti ricorrenti in Authorize.net

Authorize.net fornisce una libreria di codici di esempio come riferimento per gli sviluppatori. Per il nostro tutorial, stiamo usando il riferimento di RecurringBilling.

Modifichiamo leggermente il createSubscriptionmetodo dal codice di riferimento e lo scriviamo come segue.

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;
}

Notare la linea $response = $controller->executeWithApiResponse(netauthorizeapiconstantsANetEnvironment::SANDBOX);dal metodo sopra. Quando passiamo alla produzione, in questa linea dovremmo cambiare SANDBOX in PRODUCTION. Inoltre, dobbiamo modificare il nostro ID di accesso e le chiavi di transazione in modo che corrispondano al nostro account live.

Il nostro metodo createSubscriptionprende un parametro array che dovremmo costruire nel modo seguente.

$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'
];

Stiamo utilizzando i numeri di carta di credito di prova forniti nella Guida ai test.

Passando l’array sopra alla funzione createSubscription, creerà un pagamento in abbonamento di 1,00 USD dopo ogni 7 giorni fino a 10 cicli di fatturazione.

Codice finale

abbonamentopaymen.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;
}
?>

Ci auguriamo che tu capisca come impostare pagamenti ricorrenti in Authorize.net. Per favore condividi i tuoi pensieri nella sezione commenti qui sotto.

Fonte di registrazione: artisansweb.net

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More