PayPali makselüüsi integreerimine PHP-s, kasutades PayPal REST API-d
PayPal on üks usaldusväärsemaid makselüüse Internetis. Seda kasutatakse veebisaitidel laialdaselt veebis maksmiseks. PayPali API dokumentatsiooni pole aga kerge mõista. Arendajal, kes kavatseb PayPali makselüüsi esimest korda integreerida, võtab selle õnnestumine pikki tunde. Veetsin meeletult tunde PayPali API dokumentatsiooni lugedes. Ja mõistke hiljem, et selle integreerimiseks pole vaja Paypali dokumentatsiooni põhjalikult lugeda.
Selles artiklis uurime, kuidas integreerida PayPali makselüüsi PayPal REST API abil. Kasutame Omnipay pakutavat GitHubi teeki. Omnipay on puhas ja lihtne viis erinevate makselüüsi integreerimiseks oma veebirakendusse. Nende koodistruktuur on samuti puhas ja tõhus. Arendajatele meeldiks see.
Hankige PayPali kliendi ID ja kliendisaladus
Veebisaidil PayPali integreerimiseks peate kõigepealt looma PayPali arendajakontole REST API rakenduse. Kui olete rakenduse loonud, saate kliendi ID ja kliendisaladuse, mis on vajalik järgmistes toimingutes.
REST API rakenduse loomiseks minge oma PayPali arendajakontole ja logige sisse armatuurlauale.
Klõpsake arendaja juhtpaneelil menüül „Minu rakendused ja mandaadid". Klõpsake jaotises REST API rakendused nuppu Loo rakendus.
Järgmisel sammul täitke rakenduse nimi ja saate oma kliendi ID ja kliendi saladuse. Minu puhul näen alloleval ekraanipildil liivakasti mandaate. Teie puhul võivad need olla reaalsed volitused. Või võite proovida ka oma liivakasti mandaate.
Teegi installimine ja põhiline seadistamine
Nagu ma ütlesin, kasutame PayPal REST API integreerimiseks Omnipay- d. Kõigepealt peame Composeri abil nende teegid installima. Teekide installimiseks käivitage allolev käsk.
composer require league/omnipay omnipay/paypal
Pärast teegi installimist looge konfiguratsioonifail, kuhu salvestame oma API mandaadid, kirjutame DB-ühenduse ja initsialiseerime lüüsi.
config.php
<?php
require_once "vendor/autoload.php";
use OmnipayOmnipay;
define('CLIENT_ID', 'PAYPAL_CLIENT_ID_HERE');
define('CLIENT_SECRET', 'PAYPAL_CLIENT_SECRET_HERE');
define('PAYPAL_RETURN_URL', 'YOUR_SITE_URL/success.php');
define('PAYPAL_CANCEL_URL', 'YOUR_SITE_URL/cancel.php');
define('PAYPAL_CURRENCY', 'USD'); // set your currency here
// Connect with the database
$db = new mysqli('localhost', 'MYSQL_DB_USERNAME', 'MYSQL_DB_PASSWORD', 'MYSQL_DB_NAME');
if ($db->connect_errno) {
die("Connect failed: ". $db->connect_error);
}
$gateway = Omnipay::create('PayPal_Rest');
$gateway->setClientId(CLIENT_ID);
$gateway->setSecret(CLIENT_SECRET);
$gateway->setTestMode(true); //set it to 'false' when go live
Siin edastasin parameetri ‘Paypal_Rest’ Omnipay loomismeetodile. Omnipay taustal kutsub PayPal REST API-d läbi selle makse sooritades.
Järgmisena looge lihtne vorm, kuhu kasutaja saab summa sisestada. Demo eesmärgil hoian lihtsalt ühte välja vormis. Vormi saate vastavalt oma nõudele pikendada.
vorm.html
<form action="charge.php" method="post">
<input type="text" name="amount" value="20.00" />
<input type="submit" name="submit" value="Pay Now">
</form>
Kui makse saab valmis, peaksime salvestama tehingu üksikasjad andmebaasi tabelisse. Looge andmebaasitabel, käivitades allpool oleva SQL-päringu.
CREATE TABLE `payments` ( `id` int(11) NOT NULL AUTO_INCREMENT,
`payment_id` varchar(255) NOT NULL,
`payer_id` varchar(255) NOT NULL,
`payer_email` varchar(255) NOT NULL,
`amount` float(10,2) NOT NULL,
`currency` varchar(255) NOT NULL,
`payment_status` varchar(255) NOT NULL,
PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Selles tabelis pole võõrast võtit, kuna see on mõeldud lihtsalt demo eesmärgil. Kasutaja saab sellesse tabelisse lisada veeru user_id, et viidata maksele koos kasutajaga.
PayPali makselüüsi integreerimine PHP-s, kasutades PayPal REST API-d
PayPal REST API kasutamisel suunab kasutaja makse lõpuleviimiseks PayPali. Pärast makse sooritamist suunab kasutaja edukuse või ebaõnnestumise oleku alusel tagasi meie rakendusse. Need URL-id määratlesime config.php
ülalolevas failis.
Kui kasutaja suunab edukuse korral tagasi meie rakendusse, peame makse sooritama meie PHP-failis, mis on success.php
meie puhul. Samuti salvestame makseteabe pärast makse sooritamist PayPal REST API abil. Nii et meie kood on järgmine.
charge.php
<?php
require_once 'config.php';
if (isset($_POST['submit'])) {
try {
$response = $gateway->purchase(array(
'amount' => $_POST['amount'],
'currency' => PAYPAL_CURRENCY,
'returnUrl' => PAYPAL_RETURN_URL,
'cancelUrl' => PAYPAL_CANCEL_URL,
))->send();
if ($response->isRedirect()) {
$response->redirect(); // this will automatically forward the customer
} else {
// not successful
echo $response->getMessage();
}
} catch(Exception $e) {
echo $e->getMessage();
}
}
edu.php
<?php
require_once 'config.php';
// Once the transaction has been approved, we need to complete it.
if (array_key_exists('paymentId', $_GET) && array_key_exists('PayerID', $_GET)) {
$transaction = $gateway->completePurchase(array(
'payer_id' => $_GET['PayerID'],
'transactionReference' => $_GET['paymentId'],
));
$response = $transaction->send();
if ($response->isSuccessful()) {
// The customer has successfully paid.
$arr_body = $response->getData();
$payment_id = $arr_body['id'];
$payer_id = $arr_body['payer']['payer_info']['payer_id'];
$payer_email = $arr_body['payer']['payer_info']['email'];
$amount = $arr_body['transactions'][0]['amount']['total'];
$currency = PAYPAL_CURRENCY;
$payment_status = $arr_body['state'];
// Insert transaction data into the database
$isPaymentExist = $db->query("SELECT * FROM payments WHERE payment_id = '".$payment_id."'");
if($isPaymentExist->num_rows == 0) {
$insert = $db->query("INSERT INTO payments(payment_id, payer_id, payer_email, amount, currency, payment_status) VALUES('". $payment_id ."', '". $payer_id ."', '". $payer_email ."', '". $amount ."', '". $currency ."', '". $payment_status ."')");
}
echo "Payment is successful. Your transaction id is: ". $payment_id;
} else {
echo $response->getMessage();
}
} else {
echo 'Transaction is declined';
}
cancel.php
<h3>User is canceled the payment.</h3>
Saatke tooteinfo PayPalile
Ülaltoodud koodis saadame maksmisele kuuluva summa PayPalis. Samuti võite saata tooteinfot. Teie kliendid näevad enne makse sooritamist neid toote üksikasju makselehel.
Tooteteabe saatmiseks peate massiivi "items" edastama purchase
meetodile järgmiselt.
$response = $gateway->purchase(array(
'amount' => $_POST['amount'],
'items' => array(
array(
'name' => 'Course Subscription',
'price' => $_POST['amount'],
'description' => 'Get access to premium courses.',
'quantity' => 1
),
),
'currency' => PAYPAL_CURRENCY,
'returnUrl' => PAYPAL_RETURN_URL,
'cancelUrl' => PAYPAL_CANCEL_URL,
))->send();
Siin olen toote üksikasjad staatiliselt edastanud. Peaksite selle muutma dünaamiliseks olenevalt tootest.
Loodan, et saite teada PayPali makselüüsi integreerimisest PHP-s. Tahaksin kuulda teie mõtteid või ettepanekuid allpool olevas kommentaaride jaotises.