№21 Dars - Yii da Payment Gateway integratsiyasi

Plastik kartochkalar orqali to`lovlarni amalga oshirish yani online to`lov xizmatlari ancha avj olgan bir payt. Hozirda har bir platformamiz uchun ham kerak bo`lishi mumkin bo`gan ishga aylanib bormoqda. Yiida bu ishlar qanday aks etadi. Har xil to`lov xizmatlari mavjud men siz bilan birga "BrainTree" deb atalmish "peyment gateway" to`lov xizmatini qanday qilib platformamizga integratsiya qilishni ko`rib chiqamiz.

Ximoyasi:

Klientning shaxsiy karta nomeri va CVV ni klient tomonda BrainTreening maxsus shifrlash kutubxonasi yordamida amalga oshiriladi. Ishlash usuli quyidagicha:

Sizning shaxsiy web ilovangizdan ma`llumotni oladi, uni o`zining "BrainTree.js" shifrlash kutubxonasi bo`yicha shifrlab sizning serveringizga jo`natadi va u yerdan BrainTree ning serveriga boradi. U yerdan ishlar muvofaqiyatli yoki muvofaqiyatsiz turdagi xabarnoma keladi.

To`lovni qabul qilib oluvchi taraf BrainTreedan ro`yhatdan o`tgan bo`lishi kerak. U yerda o`zining shaxsiy accounti orqali hamma to`lovlarni nazorat qila olishi mumkin. BrainTreeni integratsiya qilish faqatgina Yii da emas. U yana Ruby, Perl, Phyton, Java, PHP, Microsoft .NET, Node JS kabi katta platformalar uchun ham mavjud. Endi buni yiida qanday qilib integratsiya qilishni ko`rib chiqamiz.

1. Ushbu gipermurajaat orqali extensionni yuklab olamiz. http://www.yiiframework.com/extension/braintreeapi/

Bu extension uchun PHPimiz 5.2 versiyasidan yuqori bo`lishi kerak.

2. Yuklab olingan API ni 'protected/extensions/BraintreeApi' yo`l bo`yicha joylaymiz

3. "config/main.php" faylimizga quyidagicha kod kiritamiz

'params'=>array(
        // bu braintree contactimizda foydalanilayotgan emailimiz
        'adminEmail'=>'your@email.com',
        'braintreeapi' => array(
            'class' => 'ext.BraintreeApi.BraintreeApi',//ishlatishingiz kerak bo`lgan class bu yerda siz yuklab olgan class chaqirilmoqda
            'environment' => 'sandbox', //'sandbox' yoki 'production' bu yerda sandbox braintree dan shunchaki ro`yhatdan o`tiladi sizning hisobingizga visual asli kuchga ega bo`lmagan miqdorda sizning hisobingizga pul tushirib beradi. production bu endi haqiqiy pul aylanmasi. sandbox aslida qilayotgan integratsiyangizni to`g`ri ishlayotganini tekshirish uchun kerak bo`ladi.
            'merchant_id' => '',// siz braintree dan ro`yhatdan o`tganingizdan keyin sizga yagona id ko`rinishidagi kodni beradi.
            'public_key' => '',
            'private_key' => '',
            'clientside_key' => '',
        ),
    ),

4. Controllerimizga quyidagicha kodni qo`shamiz:

public function actionPayment() {
        $model = User::model()->findByPk(Yii::app()->user->id);
        Yii::import('ext.BraintreeApi.models.BraintreeCCForm');
        $payment = new BraintreeCCForm('charge'); //'customer', 'address', va 'creditcard' kabi to`lov amalga oshirishning turlari
        if(isset($_POST['BraintreeCCForm'])) {
            $payment->setAttributes($_POST['BraintreeCCForm']);
            if($payment->validate()) {
                $result = $payment->send();
                if($result) {
                    //Success
                }
            }
        }
 
        $this->render('payment',array('model'=>$model,'payment'=>$payment));
    }

5. Viewimizga quyidagicha kod kiritamiz:

<div class="form">
    <?php $form = $this->beginWidget(`CActiveForm`, array('id'=>'payment-form')); ?>
     <?php
// $form widget boshlanishi
$this->widget('ext.BraintreeApi.widgets.CCForm', array(
        'form' => $form,
        'form_id' => 'payment-form', forma idsi
        'model' => $payment,
        'values' => $payment->attributes,  //$payment attributlarini olish        'fields' => array( foydalanish kerak bo`lgan maydonlar
            'amount', // bu yerda amount maydonidan foydalanamiz
            'creditCard' => array('number','cvv','date'), // creditCard maydonidan foydalanamiz. 
        ), 
    ));
<div class="row submit">
            <?php echo CHtml::submitButton(Yii::t('Billing', 'OK')); ?>
        </div> 
     
    <?php $this->endWidget(); ?>
    </div><!-- form -->

Credit cardda berilganlar:
1. Credit Card number - karta nomeri.

2. Credit Card CVV ("Card Verification Value") - bu sizning kartangizdagi PIN (Personal Identification Number) emas, shunga yanglishmang. U Visa, MasterCard kabi kartalarda 3 xonali, American Express kartalarida 4 xonali bo`ladi. Chegarasi 4 xonadan oshmaydi. Quyidagi rasmda ko`rsatilgan.

3. Credit Card date - bu yerda kartada ko`rsatilgan bo`lib, kartaning tugash muddati hisoblanadi. Biz bergan ushbu misolimizda faqat shu 3 parametr bilan ishlangan. "MM/YYYY" ko`rinishida kiritiladi.

Yuqoridagi widget maxsus yasalgan bo`lib uni extensiondan chaqirib to`g`ri ishlata olsangiz bo`lgani. Dizayn va shunga o`xshash ishlarni widget fayli orqali ishlashingiz mumkin bo`ladi.

Batafsil ma`lumot uchun braintreegateway.com shaxsiy saytidan olishingiz mumkin.

Ma`lumotlar habrahabr.ru va yiiframework.com saytlaridan olingan holda tayyorlandi.

Manba:


JONNY

Muallif haqida

JONNY Arduino, Java, C#, Android, Windows, Linux, Debian, Javascript.


Blogdagi so‘nggi maqolalar:


Birinchi bo‘ling!

Iltimos, fikr bildirish uchun saytga kiring yoki ro‘yxatdan o‘ting!