Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Comment configurer des paiements récurrents dans Authorize.net

28

Nous avons écrit un article Accepter le paiement par carte de crédit à l’aide de la passerelle de paiement Authorize.net. Dans cet article, nous avons expliqué comment recevoir un paiement par carte de crédit via Authorize.net. En outre, cet article est essentiellement axé sur le paiement unique.

Mais que faire si quelqu’un souhaite intégrer les paiements récurrents dans son application? Dans cet article, nous vous montrons comment configurer des paiements récurrents en utilisant Authorize.net.

Qu’est-ce que le paiement récurrent ?

Le paiement récurrent ou par abonnement signifie débiter automatiquement la carte de crédit d’un montant fixe après un intervalle spécifique et pour une période spécifiée.

Par exemple, disons que vous exécutez votre site Web sur l’ hébergement Bluehost et que vous avez payé un montant pour la première année. Lorsque votre forfait expire, Bluehost débitera automatiquement votre paiement par carte de crédit pour l’année suivante (si vous avez choisi l’option de paiement récurrent).

L’avantage d’autoriser le plan d’abonnement est que vous n’avez pas besoin de vous souvenir de la date d’expiration du service que vous utilisez. Le fournisseur de services le conserve comme un système automatisé. Une fois votre forfait expiré, ils renouvellent votre service en prenant les paiements de votre carte de crédit en arrière-plan.

Cela dit, voyons comment configurer des paiements récurrents à l’aide d’Authorize.net.

Vous devriez d’abord lire notre article Accepter le paiement par carte de crédit à l’aide de la passerelle de paiement Authorize.net. Dans cet article, nous avons discuté de l’installation et de la configuration des bibliothèques Authorize.net SDK.

Pour notre tutoriel, nous utilisons le compte sandbox. Vous devez donc d’abord créer votre compte Sandbox et obtenir vos clés API. Vous pouvez trouver vos clés API dans Account->API Credentials & Keys.

Installation

Pour commencer, nous devons installer PHP SDK Library. Nous recommandons Composer pour l’installation de la bibliothèque.

Créez un composer.jsonfichier dans le répertoire racine de votre projet et ajoutez-y le code ci-dessous.

compositeur.json

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

Ouvrez le terminal dans le répertoire racine de votre projet et exécutez la composer installcommande. Cette commande va télécharger la dépendance d’une bibliothèque.

Configurer l’environnement

Nous avons installé la bibliothèque PHP SDK. Créez maintenant deux fichiers appelés constants.phpet subscriptionpayment.php. Dans le fichier constants.php, nous stockons nos clés API comme suit.

constantes.php

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

Assurez-vous d’avoir remplacé les espaces réservés YOUR_LOGIN_ID et YOUR_TRANSACTION_KEY par des valeurs réelles.

subscriptionpayment.phpest le fichier où nous allons écrire un code pour les paiements d’abonnement d’une carte de crédit. Pour ce faire, nous devons d’abord inclure les fichiers principaux de la bibliothèque.

abonnementpaiement.php

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

Code réel pour les paiements récurrents dans Authorize.net

Authorize.net fournit un exemple de bibliothèque de code pour la référence des développeurs. Pour notre tutoriel, nous utilisons la référence de RecurringBilling.

Nous modifions légèrement la createSubscriptionméthode du code de référence et l’écrivons comme suit.

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

Notez la ligne $response = $controller->executeWithApiResponse(netauthorizeapiconstantsANetEnvironment::SANDBOX);de la méthode ci-dessus. Lorsque nous passons à la production, nous devons changer SANDBOX en PRODUCTION dans cette ligne. Nous devons également modifier notre identifiant de connexion et nos clés de transaction pour qu’ils correspondent à notre compte réel.

Notre méthode createSubscriptionprend un paramètre de tableau que nous devons construire ci-dessous.

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

Nous utilisons les numéros de carte de crédit de test fournis sur le guide de test.

En passant le tableau ci-dessus à la fonction createSubscription, cela créera un paiement d’abonnement de 1,00 USD tous les 7 jours jusqu’à 10 cycles de facturation.

Code final

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

Nous espérons que vous comprenez comment configurer les paiements récurrents dans Authorize.net. S’il vous plaît partager vos pensées dans la section commentaire ci-dessous.

Source d’enregistrement: artisansweb.net

Ce site utilise des cookies pour améliorer votre expérience. Nous supposerons que cela vous convient, mais vous pouvez vous désinscrire si vous le souhaitez. J'accepte Plus de détails