17

مكتبة PHP للتعامل مع بوابة الدفع Payfort

السلام عليكم ورحمة الله وبركاته

  • المكتبة [1] كُتبت ضمن مشروع خاص عملت عليه، فقمت بتعديلها لتصلح للاستخدام العام وطرحها لمن أراد استخدام البوابة في عمليات الدفع الإلكترونية.

  • المكتبة خاصة ببوابة الدفع [2] Payfort وهي بوابة لحلول الدفع الإلكترونية في الشرق الأوسط وتدعم بعض الدول العربية منها (السعودية ومصر والأردن وعمان ولبنان والإمارات المُتحدة)

المكتبة خاصة للغة PHP وتتعامل مع الـ API الخاص بالبوابة عبر [3] Merchant Page 2.0

يُمكنك تهيئة المكتبة عبر composer أو بتضمين الملف بشكل مباشر، ويُمكنك استخدامها مع اطارات كـ Laravel والعمل بشكل مباشر عبر تضمينها من خلال composer أو بشكل مباشر .

لتهيئة المكتبة من خلال composer نفذ الأمر التالي من شاشة الأوامر/الطرفية وأنت داخل مجلد المشروع:

composer require ahmedsaoud31/payfort-php dev-master

أو من خلال تعديل ملف composer.json

{
    "require": {
        "ahmedsaoud31/payfort-php": "dev-master"
    }
}

ثم نفذ الأمر التالي عبر شاشة الأوامر/الطرفية:

composer update

لاستخدام المكتبة قم بتضمين ملف التحميل التلقائي للفئات autoload.php كالتالي:

<?php
require 'vendor/autoload.php';

use Payfort\Payfort;

$payfort = new Payfort;

ولتضمين المكتبة بشكل مباشر استخدم

<?php
require 'path/to/Payfort.php';

use Payfort\Payfort;

$payfort = new Payfort;

لضبط الإعدادات الخاصة بالبوابة قم بالتعديل على الملفpath/to/config.php لضبط كافة الإعدادات الخاصة بالبيئة الإختبارية Sandbox والبيئة الفعلية Live.

لاجراء عملية دفع عبر البوابة يجب عليك تفعيل TLS v1.2 ومكتبة CURL وضبط شهادة الموقع https (من غير الضروري توقيع الشهادة في البيئة التجريبية)

أولاً: عليك تكوين نموذج بالبيانات (اسم صاحب البطاقة ورقم البطاقة وتاريخ الإنتهاء والرقم التأكيدي)

<form role="form" id="gatawayForm" method="POST" action="#">
    <input type="hidden" name="card_holder_name" value="">
    <input type="hidden" name="card_number" value="">
    <input type="hidden" name="card_security_code" value="">
    <input type="hidden" name="expiry_date" value="">
</form>
  • قبل ارسال النموذج لبوابة الدفع عليك ارسال طلب للخادم الخاص بك واستلام البيانات المُعادة من الدالة getFormData وتضمينها في النموذج في الأعلى باستخدام لغة javaScipt وضبط الـ action للنموذج من القيمة host المُعادة من نفس الدالة.

  • ملف استدعاء دالة getFormData على الخادم يكون على النحو التالي:

    $payfort = new Payfort;
    $result = $payfort->setMerchantReference('ABc123')
                    ->setLanguage('en')
                    ->getFormData();
    
  • وداخل ملف معالجة الطلب المُعاد من البوابة والذي يتم ضبطه في الإعدادات return_url سيكون كود الدفع كالتالي:

    $result = $payfort->setCardHolderName('Ahmed')
                        ->setCustomerEmail('ahmedsaoud31@gmail.com')                            ->setCurrency('USD')
                        ->setAmount(100)
                        ->pay();
    
    if(!isset($payfort->response)){
        echo 'Call payment gataway error!';
    }
    
    if(isset($payfort->response->{'3ds_url'})){
        header('Location: '.$payfort->response->{'3ds_url'});
    }
    
    if($result->pay){
        echo 'Success';
    }else{
        echo 'Failed';
    }
    
  • للتحويل من البيئة التجريبية للبيئة الفعلية أثناء وقت الشغيل يُمكنك التبديل من خلال الدالة setLive وتأخذ قيمة منطقية true للتبديل للبيئة الفعلية وfalse للتبديل للبيئة التجريبية -سيتم تجاهل التي تم ضبطها في ملف الإعدادات عند استخدام تلك الدالة للكائن الحالي المطبقة عليه-

    $payfort->setLive(false)
            ->...
    
  • ضبط بعض الاعدادت أثناء وقت الشغيل:

    $payfort->setLive($data)
            ->setCommand($data)
            ->setServiceCommand($data)
            ->setMerchantReference($data)
            ->setLanguage($data)
            ->setRememberMe($data)
            ->setExpiryDate($data)
            ->setCardNumber($data)
            ->setCardSecurityCode($data)
            ->setReturnUrl($data)
            ->setCustomerIP($data)
            ->setCardHolderName($data)
            ->setCustomerEmail($data)
            ->setCurrency($data)
            ->setAmount($data)
            ->pay();
    

[1]

[2]

https://www.payfort.com

[3]

https://testfort.payfort.co...

[4]

https://testfort.payfort.co...

@SamirEmile


آخر مرة تقدمنا الى خدمة Payfort للحصول على حساب تجاري لدمجه كبوابة دفع تم رفض الطلب ، قبل شراءها من طرف أمازون

تمركز الخدمات في الدول العربية و عدم دعمها للدول العربية أكبر فشل نشأت به الشركات العربية كحال بايفرت و حافظت على الفشل الشركات الأجنبية التي استحوذت عليها مثل أمازون.

اليوم تم التجربة مجددا و كان جد مفرح وجود الجزائر في القائمة و عند التسجيل بدء مرحلة الجد نجد أنه لا يتم قبول الا الشركات الاماراتية و هذا في رأيي أكبر فشل تشتريه شركة أمازون في الرقعة العربية.

  • نعم أعلم وجود معوقات كثيرة في قبول الشركات ولكني لا أرى حالياً الجزائر من ضمن القائمة التي تدعمها باي فورت وهي (الإمارات والسعودية وقطر وعمان ومصر ولبنان والأردن).
  • نفس المشكل، تقدمت لشركة بايفورت لطلب الحصول على العضوية عن طريق الدعم الفني مباشرة (قلت في نفسي لنجرب طرق ملتوية لعلّهم يقبلوننا بها) فردت علي احدى العاملات بتأسّفها و عدم القدرة على قبول دول خارج النّطاق المعمول به.

  • أنشأنا بوابة دفع جزائرية مشابهة لبايفورت تماماً و نقدم وظائف متطورة و برمجيات جاهزة لكن قوانين الجزائر ألزمتنا بفتح سجل تجاري و الاشتراك مع بنك ربوي لكي يضمنك و يضمن أموالك مع أننا نستعمل نفس خدماتهم بطريقة مبتكرة! و عن طريقهم مباشرة ..


سؤال جانبي .. من أي ولاية أنت أخي @الدكتور خالد ؟