So richten Sie wiederkehrende Zahlungen in Authorize.net ein
Wir haben einen Artikel Akzeptieren von Kreditkartenzahlungen mit Authorize.net Payment Gateway geschrieben. In diesem Artikel haben wir besprochen, wie man Kreditkartenzahlungen über Authorize.net erhalten kann. Außerdem konzentriert sich dieser Artikel im Wesentlichen auf die einmalige Zahlung.
Was aber, wenn jemand wiederkehrende Zahlungen in seine Anwendung integrieren möchte? In diesem Artikel zeigen wir Ihnen, wie Sie mit Authorize.net wiederkehrende Zahlungen einrichten .
Was ist wiederkehrende Zahlung?
Wiederkehrende oder Abonnementzahlungsmittel belasten die Kreditkarte automatisch nach einem bestimmten Intervall und für einen bestimmten Zeitraum mit einem festen Betrag.
Angenommen, Sie betreiben Ihre Website auf dem Bluehost- Hosting und haben einen Betrag für das erste Jahr bezahlt. Wenn Ihr Plan abläuft, belastet Bluehost automatisch Ihre Kreditkartenzahlung für das nächste Jahr (wenn Sie die wiederkehrende Zahlungsoption gewählt haben).
Der Vorteil des Abonnements besteht darin, dass Sie sich nicht an das Ablaufdatum des von Ihnen genutzten Dienstes erinnern müssen. Der Dienstleister hält es als automatisiertes System. Sobald Ihr Plan abgelaufen ist, verlängern sie Ihren Service, indem sie im Hintergrund Zahlungen von Ihrer Kreditkarte entgegennehmen.
Sehen wir uns jedoch an, wie Sie mit Authorize.net wiederkehrende Zahlungen einrichten.
Sie sollten zuerst unseren Artikel Akzeptieren von Kreditkartenzahlungen mit Authorize.net Payment Gateway lesen. In diesem Artikel haben wir die Installation und Konfiguration von Authorize.net SDK-Bibliotheken besprochen .
Für unser Tutorial verwenden wir das Sandbox-Konto. Sie sollten also zuerst Ihr Sandbox-Konto erstellen und Ihre API-Schlüssel erhalten. Sie finden Ihre API-Schlüssel unter Konto->API-Anmeldeinformationen & Schlüssel.
Installation
Um zu beginnen, müssen wir die PHP SDK Library installieren. Wir empfehlen Composer für die Installation der Bibliothek.
Erstellen Sie eine composer.json
Datei in Ihrem Projektstammverzeichnis und fügen Sie den folgenden Code hinzu.
Komponist.json
{
"require": {
"php": ">=5.6",
"authorizenet/authorizenet": "~1.9.6"
}
}
Öffnen Sie das Terminal im Stammverzeichnis Ihres Projekts und führen Sie den composer install
Befehl aus. Dieser Befehl lädt die Abhängigkeit einer Bibliothek herunter.
Einrichten der Umgebung
Wir haben die PHP-SDK-Bibliothek installiert. Erstellen Sie nun zwei Dateien namens constants.php
und subscriptionpayment.php
. In der Datei constants.php speichern wir unsere API-Schlüssel wie folgt.
konstanten.php
<?php
define('ANET_LOGIN_ID', 'YOUR_LOGIN_ID');
define('ANET_TRANSACTION_KEY', 'YOUR_TRANSACTION_KEY');
?>
Stellen Sie sicher, dass Sie die Platzhalter YOUR_LOGIN_ID und YOUR_TRANSACTION_KEY durch tatsächliche Werte ersetzt haben.
subscriptionpayment.php
ist die Datei, in die wir einen Code für Abonnementzahlungen einer Kreditkarte schreiben. Dazu müssen wir zunächst Kerndateien aus der Bibliothek einbinden.
Abonnementzahlung.php
<?php
require_once "vendor/autoload.php";
require_once "constants.php";
use netauthorizeapicontractv1 as AnetAPI;
use netauthorizeapicontroller as AnetController;
?>
Tatsächlicher Code für wiederkehrende Zahlungen in Authorize.net
Authorize.net bietet eine Beispielcodebibliothek als Referenz für Entwickler. Für unser Tutorial verwenden wir die Referenz von RecurringBilling.
Wir modifizieren die createSubscription
Methode leicht aus dem Referenzcode und schreiben sie wie folgt.
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;
}
Beachten Sie die Zeile $response = $controller->executeWithApiResponse(netauthorizeapiconstantsANetEnvironment::SANDBOX);
aus der obigen Methode. Wenn wir zur Produktion wechseln, sollten wir in dieser Linie SANDBOX auf PRODUKTION umstellen. Außerdem müssen wir unsere Login-ID und die Transaktionsschlüssel ändern, damit sie mit unserem Live-Konto übereinstimmen.
Unsere Methode createSubscription
nimmt einen Array-Parameter, den wir unten einbauen sollten.
$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'
];
Wir verwenden Test-Kreditkartennummern, die im Testing Guide angegeben sind.
Durch die Übergabe des obigen Arrays an die Funktion createSubscription
wird nach jeweils 7 Tagen bis zu 10 Abrechnungszyklen eine Abonnementzahlung von 1,00 USD erstellt.
Endgültiger Code
abonnierenpaymen.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;
}
?>
Wir hoffen, dass Sie verstehen, wie Sie wiederkehrende Zahlungen in Authorize.net einrichten. Bitte teilen Sie Ihre Gedanken im Kommentarbereich unten mit.