№22 Dars — Yii da paypalni integratsiya qilish.
PayPal o`zi nima?
Yiida PayPal ning maxsus extensionlari mavjud. Bulardan hozircha bittasi bilan tanishib qanday ishlashi haqida gaplashamiz. PayPal o`zi o`zaro pul aylanmasini taminlab beruvchi veb ilova. Bu yerdan pul o`tkazmalar qilayotganda ro`yxatdan o`tgan bo`lishingiz kerak. Ya`ni akkountingiz bo`lishi kerak. Bu ilovada ham siz ishlaringizni test qilib ko`rishingiz uchun sandbox turidan foydalanishingiz kerak.
Paypal o`zining API siga ega va biz undan Yii da foydalanishimiz mumkin.
Kerakli ishlar:
- Komponentani ishlatish uchun Yii framework 1.1 va undan yuqori versiyasi kerak bo`ladi
- PHP CURL extensioni o`rnatilgan va yoqilgan bo`lishi kerak
- PayPal ma`lumotlari (username, password, signature) lar bo`lishi kerak
- Exstensioni quyidagi havola orqali yuklab olishingiz kerak bo`ladi http://www.yiiframework.com/extension/paypal/
Bog`lash:
Ushbu murojaat orqali extensionni yuklab olishingiz kerak. Keyin main.php ga quyidagicha kod kiritishingiz kerak bo`ladi.
'Paypal' => array(
'class'=>'application.components.Paypal',
'apiUsername' => 'YOUR_API_USERNAME', // paypaldagi usernameingiz
'apiPassword' => 'YOUR_API_PASSWORD', // paypaldagi passwordingiz
'apiSignature' => 'YOUR_API_SIGNATURE', // yagona tarzdagi kalit
'apiLive' => false, // false bo`lsa sandbox orqali ishlatish, ya`ni test qilish uchun ishlatiladi. Agar haqiqiy pul aylanmasini o`rnatmoqchi bo`lsangiz true qilib qo`yish talab qilinadi.
'returnUrl' => 'paypal/confirm/', //PayPal serveridan ish muvofaqiyatli kelsa shu urlga yo`naltiradi.
'cancelUrl' => 'paypal/cancel/', //agar ish muvofaqiyatsiz bo`lsa ushbu urlga yo`naltiradi.
// qaysi birlikda pul aylanmasini amalga oshirishingiz
'currency' => 'USD',
// izohlar uchun
//'defaultDescription' => '',
// mahsulot soni
//'defaultQuantity' => '1',
),
PayPal ni komponentidan foydalanish kontrollerga quyidagicha kod yozishimiz orqali amalga oshadi.
class PaypalController extends Controller
{
public function actionBuy(){
$paymentInfo['Order']['theTotal'] = 10.00;
$paymentInfo['Order']['description'] = "Some payment description here";
$paymentInfo['Order']['quantity'] = '1';
// paypalni chaqirish
$result = Yii::app()->Paypal->SetExpressCheckout($paymentInfo);
//jarayon vaqtida xatolik chiqsa
if(!Yii::app()->Paypal->isCallSucceeded($result)){
if(Yii::app()->Paypal->apiLive === true){
//Live bo`lsa. Agar qandaydir xatolik bo`lsa shu xatolikni oladi.
$error = 'We were unable to process your request. Please try again later';
}else{
//Sandbox bo`lsa. Agar xatolik bo`lsa shu haqdagi xatolik xabari keladi.
$error = $result['L_LONGMESSAGE0'];
}
echo $error;
Yii::app()->end();
}else {
// paypalga userni jo`natish
$token = urldecode($result["TOKEN"]);
$payPalURL = Yii::app()->Paypal->paypalUrl.$token;
$this->redirect($payPalURL);
}
}
public function actionConfirm()
{
$token = trim($_GET['token']);
$payerId = trim($_GET['PayerID']);
$result = Yii::app()->Paypal->GetExpressCheckoutDetails($token);
$result['PAYERID'] = $payerId;
$result['TOKEN'] = $token;
$result['ORDERTOTAL'] = 10.00;
//jarayon vaqtida xatolik chiqsa
if(!Yii::app()->Paypal->isCallSucceeded($result)){
if(Yii::app()->Paypal->apiLive === true){
$error = 'We were unable to process your request. Please try again later';
}else{
$error = $result['L_LONGMESSAGE0'];
}
echo $error;
Yii::app()->end();
}else{
$paymentResult = Yii::app()->Paypal->DoExpressCheckoutPayment($result);
if(!Yii::app()->Paypal->isCallSucceeded($paymentResult)){
if(Yii::app()->Paypal->apiLive === true){
$error = 'We were unable to process your request. Please try again later';
}else{
$error = $paymentResult['L_LONGMESSAGE0'];
}
echo $error;
Yii::app()->end();
}else{
//to`lov muvofaqiyatli amalga oshdi
$this->render('confirm');
}
}
}
public function actionCancel()
{
$token = $_GET['token'];
$this->render('cancel');
}
public function actionDirectPayment(){
$paymentInfo = array('Member'=>
array(
'first_name'=>'name_here',
'last_name'=>'lastName_here',
'billing_address'=>'address_here',
'billing_address2'=>'address2_here',
'billing_country'=>'country_here',
'billing_city'=>'city_here',
'billing_state'=>'state_here',
'billing_zip'=>'zip_here'
),
'CreditCard'=>
array(
'card_number'=>'number_here',
'expiration_month'=>'month_here',
'expiration_year'=>'year_here',
'cv_code'=>'code_here'
),
'Order'=>
array('theTotal'=>1.00)
);
/*
* Success bo`lsa, $result quyidagilarni o`z ichiga oladi [AMT] [CURRENCYCODE] [AVSCODE] [CVV2MATCH]
* [TRANSACTIONID] [TIMESTAMP] [CORRELATIONID] [ACK] [VERSION] [BUILD]
*
* Xatolik bo`lsa, $ result quyidagilarni o`z ichiga oladi [AMT] [CURRENCYCODE] [TIMESTAMP] [CORRELATIONID]
* [ACK] [VERSION] [BUILD] [L_ERRORCODE0] [L_SHORTMESSAGE0] [L_LONGMESSAGE0]
* [L_SEVERITYCODE0]
*/
$result = Yii::app()->Paypal->DoDirectPayment($paymentInfo);
//jarayon vaqtida xatolik chiqsa
if(!Yii::app()->Paypal->isCallSucceeded($result)){
if(Yii::app()->Paypal->apiLive === true){
//Live bo`lsa. Agar qandaydir xatolik bo`lsa xatolini oladi.
$error = 'We were unable to process your request. Please try again later';
}else{
//Sandbox bo`lsa. Agar xatolik bo`lsa xatolik habari keladi.
$error = $result['L_LONGMESSAGE0'];
}
echo $error;
}else {
// To`lov muvofaqiyatli yakunlandi
}
Yii::app()->end();
}
}
Siz platformangizda «Buy» actioniga murojaat qilasiz. Undan siz yuklab olgan komponentingizga boradi. U yerdan PayPal serveriga userni yo`naltiradi. U yerdan muvofaqiyatli qaytsa «confirm» actioniga keladi va jarayon oxirgi bosqichigacha xatoliksiz amalga oshib kelsa o`zingiz uchun ham ushbu pul o`tkazmalarini saqlash uchun kodlar yozishingiz mumkin bo`ladi.
Ko`rib turganingizdek bu foydalanuvchining bosqichlar jarayoni. Sizning serveringizdan paypal serveriga yo`naltiriladi va u yerda foydalanuvchi accounti orqali kirib to`lovni amalga oshiradi. Har bir to`lovning yagona idsi mavjud.
PayPal ni platformangizga biriktirganingizdan keyin har xil o`zgarishlar qilib ko`rib xar bir parametrni nima ish qilishini yana bir bor bilib olishingiz mumkin bo`ladi.
Manba:
Web Dasturlash
№22 Dars — Yii da paypalni integratsiya qilish.