السلام عليكم ورحمة الله وبركاته
https://github.com/ahmedsaoud31/payfort-php
المكتبة [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] https://github.com/ahmedsaoud31/payfort-php
[3] https://testfort.payfort.com/api/docs/merchant-page-two/build/index.html
[4] https://testfort.payfort.com/api
</div>