Toistuvien maksujen määrittäminen Authorize.net-sivustossa
Olemme kirjoittaneet artikkelin Hyväksy luottokorttimaksut Authorize.net Payment Gatewayn avulla. Tuossa artikkelissa keskustelimme siitä, miten luottokorttimaksu voidaan vastaanottaa Authorize.net-sivuston kautta. Artikkeli keskittyy myös periaatteessa kertamaksuun.
Mutta entä jos joku haluaa integroida toistuvat maksut sovellukseensa? Tässä artikkelissa näytämme, kuinka voit määrittää toistuvia maksuja Authorize.net-palvelun avulla.
Mikä on toistuva maksu?
Toistuva tai tilausmaksu tarkoittaa, että luottokortilta veloitetaan automaattisesti kiinteä summa tietyn ajanjakson ja tietyn ajanjakson jälkeen.
Oletetaan esimerkiksi, että käytät verkkosivustoasi Bluehost- isännällä ja olet maksanut summan ensimmäiseltä vuodelta. Kun suunnitelmasi umpeutuu, Bluehost veloittaa luottokorttimaksusi automaattisesti seuraavaksi vuodeksi (jos olet valinnut toistuvan maksuvaihtoehdon).
Tilaussopimuksen sallimisen etuna on, että sinun ei tarvitse muistaa käyttämäsi palvelun päättymispäivää. Palveluntarjoaja pitää sitä automatisoituna järjestelmänä. Kun suunnitelmasi on vanhentunut, he uudistavat palvelusi ottamalla maksut luottokortiltasi taustalla.
Tämän sanotaan, katsotaanpa, kuinka määritetään toistuvat maksut Authorize.net-palvelun avulla.
Sinun tulisi ensin lukea artikkeli Hyväksy luottokorttimaksut Authorize.net-maksuyhdyskäytävän avulla. Tässä artikkelissa olemme keskustelleet Authorize.net SDK -kirjastojen asennuksesta ja määrityksistä .
Opetusohjelmassa käytämme hiekkalaatikkotiliä. Joten sinun on ensin luotava hiekkalaatikkotilisi ja hankittava API-avaimet. Löydät API-avaimesi kohdasta Tili-> API- tunnukset ja avaimet.
Asennus
Aloittamiseksi meidän on asennettava PHP SDK -kirjasto. Suosittelemme Composeria kirjaston asentamiseen.
Luo composer.json
tiedosto projektin juurihakemistoon ja lisää alla oleva koodi siihen.
säveltäjä.json
{
"require": {
"php": ">=5.6",
"authorizenet/authorizenet": "~1.9.6"
}
}
Avaa pääte projektin juurihakemistossa ja suorita composer install
komento. Tämä komento lataa kirjaston riippuvuuden.
Määritä ympäristö
Olemme asentaneet PHP SDK -kirjaston. Nyt luodaan kaksi tiedostoa kutsutaan constants.php
ja subscriptionpayment.php
. Tallennamme constants.php-tiedostoon API-avaimet seuraavasti.
vakiot.php
<?php
define('ANET_LOGIN_ID', 'YOUR_LOGIN_ID');
define('ANET_TRANSACTION_KEY', 'YOUR_TRANSACTION_KEY');
?>
Varmista, että olet korvannut paikkamerkit YOUR_LOGIN_ID ja YOUR_TRANSACTION_KEY todellisilla arvoilla.
subscriptionpayment.php
on tiedosto, johon kirjoitamme koodin luottokortin tilausmaksuja varten. Voit tehdä sen ensin sisällyttämällä kirjaston ydintiedostot.
subscriptionpayment.php
<?php
require_once "vendor/autoload.php";
require_once "constants.php";
use netauthorizeapicontractv1 as AnetAPI;
use netauthorizeapicontroller as AnetController;
?>
Todellinen koodi toistuville maksuille Authorize.netissä
Authorize.net tarjoaa mallikoodikirjaston kehittäjille. Opetusohjelmassa käytämme viittausta RecurringBillingiin.
Muutamme createSubscription
menetelmää hieman viitekoodista ja kirjoitamme sen seuraavasti.
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;
}
Huomaa $response = $controller->executeWithApiResponse(netauthorizeapiconstantsANetEnvironment::SANDBOX);
edellä olevan menetelmän rivi. Kun siirrymme tuotantoon, meidän pitäisi vaihtaa SANDBOX tuotteeksi PRODUCTION tällä rivillä. Lisäksi meidän on vaihdettava kirjautumistunnuksemme ja tapahtuma-avaimet vastaamaan live-tiliä.
Menetelmämme createSubscription
vie matriisiparametrin, joka meidän tulisi rakentaa alla olevalla tavalla.
$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'
];
Käytämme testiä luottokorttien numeroita tarjotaan Testing Guide.
Välittämällä taulukon yläpuolelle funktiolle createSubscription
se luo 1,00 USD: n tilausmaksun jokaisen 7 päivän jälkeen 10 laskutusjaksoon saakka.
Lopullinen koodi
subscriptionpaymen.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;
}
?>
Toivomme, että ymmärrät kuinka määrittää toistuvat maksut Authorize.net-sivustossa. Jaa ajatuksesi alla olevassa kommenttiosassa.