كيفية ربط Hala POS في مشروع أندرويد خطوة بخطوة
إذا كنت تعمل على تطبيق أندرويد يحتاج إلى تنفيذ عمليات دفع عبر أجهزة نقاط البيع، فإن ربط Hala POS داخل مشروعك يسمح للتطبيق بإرسال طلبات الدفع أو الاسترجاع إلى تطبيق الدفع، ثم استقبال نتيجة العملية ومعالجتها داخل التطبيق.
بحسب ملف التكامل الرسمي المرفق، يتم الربط من خلال إضافة ملف integrationSDK.arr إلى مشروع Android، ثم تهيئة الـ SDK داخل الـ Activity، وبعدها استخدام دوال جاهزة لإنشاء طلبات الدفع وقراءة الاستجابة. :contentReference[oaicite:0]{index=0}
ما هو Hala POS Payment Integration؟
Hala POS Payment Integration هو SDK مخصص لربط تطبيقك مع تطبيق الدفع الخاص بـ Hala. الفكرة الأساسية أن تطبيقك يقوم بإنشاء طلب دفع أو استرجاع، ثم يقوم محرك التكامل بتمرير الطلب إلى تطبيق الدفع، وبعد تنفيذ العملية يتم إرجاع النتيجة إلى تطبيقك.
سير العملية كما هو موضح في ملف الربط يكون بالشكل التالي:
- يقوم التطبيق المدمج بإرسال الطلب.
- يقوم Integration Engine بالاستماع للطلب القادم.
- يتم التحقق من صحة البيانات.
- يتم تمرير البيانات إلى تطبيق الدفع.
- تتم معالجة عملية الدفع.
- يتم إرجاع النتيجة إلى محرك التكامل.
- يتم إرسال نتيجة العملية إلى التطبيق المدمج.
متطلبات الربط
قبل البدء، تأكد من توفر ملف SDK الخاص بالتكامل:
integrationSDK.arr هذا الملف يجب إضافته داخل مجلد libs في مشروع Android الخاص بك.

الخطوة الأولى: إضافة ملف SDK إلى المشروع
افتح مشروعك في Android Studio، ثم أضف ملف:
integrationSDK.arrداخل المسار التالي:
app/libs/ إذا لم يكن مجلد libs موجودًا، يمكنك إنشاؤه يدويًا داخل مجلد app.
الخطوة الثانية: إضافة SDK إلى ملف Gradle
بعد إضافة الملف داخل مجلد libs، افتح ملف build.gradle الخاص بالموديول، ثم أضف الاعتماد التالي داخل قسم dependencies:
dependencies {
...
implementation files('../libs/AppToApp-v2.1.1.aar')
implementation files('../libs/T1_USDK_1223.jar')
}بعد ذلك قم بعمل Sync للمشروع من Android Studio حتى يتعرف المشروع على ملف SDK.
الخطوة الثالثة: تعديل AndroidManifest.xml
في حال كان التطبيق يعمل على Android API Level 30 أو أعلى، يجب إضافة وسم queries داخل ملف AndroidManifest.xml قبل وسم application.
<queries>
<package android:name="com.example.halalah" />
</queries>مثال كامل:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<queries>
<package android:name="com.example.halalah" />
</queries>
<application
android:theme="@style/AppTheme"
android:label="@string/app_name">
</application>
</manifest>الخطوة الرابعة: تهيئة SDK داخل Activity
بعد إضافة SDK للمشروع، يجب إنشاء instance من IntegrationPOSSDK داخل الـ Activity، ثم تهيئته داخل دالة onCreate.
var integrationSDK = IntegrationPOSSDK.getInstance()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
integrationSDK!!.initializeSDK(
this, // ViewModelStoreOwner
this // Activity
)
}بهذه الخطوة يصبح SDK جاهزًا للتعامل مع طلبات الدفع والاسترجاع.
الخطوة الخامسة: إنشاء طلب دفع Purchase
لإنشاء عملية دفع عادية، استخدم الدالة createRequest مع تمرير نوع العملية والمبلغ المطلوب.
fun createRequest(
transactionType: TransactionType,
requestAmount: String
): Intمثال:
val requestId = integrationSDK?.createRequest(
TransactionType.PURCHASE,
"40.00"
) القيمة الراجعة من الدالة هي requestId، وهو رقم العملية الذي يمكن استخدامه لاحقًا لجلب نتيجة العملية.
الخطوة السادسة: إنشاء طلب استرجاع Refund
لإنشاء عملية استرجاع، تحتاج إلى تمرير بيانات إضافية مثل كلمة مرور الاسترجاع، رقم RRN، تاريخ العملية، ورمز الموافقة.
fun createRequest(
transactionType: TransactionType,
requestAmount: String,
PWD: String,
RRN: String,
transactionDate: String,
transactionApprovalCode: String
): Intمثال:
val requestId = integrationSDK?.createRequest(
TransactionType.REFUND,
"40.00",
PWD = "123456",
RRN = "123456789012",
transactionDate = "1/2021",
transactionApprovalCode = "871237"
)شرح أهم معاملات الطلب
| المعامل | النوع | الوصف | مثال |
|---|---|---|---|
| transactionType | TransactionType | نوع العملية، إما Purchase أو Refund | TransactionType.PURCHASE |
| requestAmount | String | مبلغ العملية | 40.00 |
| PWD | String | كلمة مرور الاسترجاع | 123456 |
| RRN | String | رقم مرجع العملية | 123456789012 |
| transactionDate | String | تاريخ العملية | 1/2021 |
| transactionApprovalCode | String | رمز الموافقة الخاص بالعملية | 871237 |
الخطوة السابعة: قراءة نتيجة العملية باستخدام Request ID
بعد إنشاء الطلب، يمكنك استخدام رقم الطلب requestId لجلب نتيجة العملية.
fun getResponseByID(requestID: Int?): PaymentResponse?مثال:
val integrationResponse = integrationSDK?.getResponseByID(requestId)هذه الدالة مفيدة عندما تريد قراءة نتيجة عملية معينة بناءً على رقم الطلب.
الخطوة الثامنة: قراءة آخر استجابة
يمكنك أيضًا قراءة آخر نتيجة عملية تم تنفيذها من خلال الدالة:
fun getLastResponse(): IntegrationResponse?مثال:
val integrationResponse = integrationSDK?.getLastResponse()أهم بيانات الاستجابة
تحتوي الاستجابة على معلومات مهمة تساعدك في معرفة حالة العملية وتفاصيل الدفع.
| الحقل | الوصف | مثال |
|---|---|---|
| paymentResponseID | رقم العملية | 26172 |
| integrationResponseStatus | حالة الاستجابة مثل Success أو Failed أو Rejected أو TERMINAL_NOT_REGISTERED | Success |
| paymentResponseData | بيانات العملية | Response Data Buffer |
| paymentResponseCRC | قيمة تحقق أمنية | Security checksum |
حالات العملية Transaction Status
من أهم الحقول التي يجب التعامل معها داخل التطبيق حقل transactionStatus، حيث يوضح نتيجة العملية.
| القيمة | المعنى |
|---|---|
| 0 | Approved |
| 1 | Offline Approved |
| -1 | Declined |
| -2 | Timeout |
| -3 | Cancelled |
| -4 | EMV_REJECTED |
| -5 | MANUAL_ENTRY_CANCELLED |
| -6 | APPLICATION_ERROR |
بيانات مهمة قد تظهر في نتيجة الدفع
قد تحتوي نتيجة العملية على بيانات مثل:
MerchantNameArabic: اسم التاجر بالعربية.MerchantNameEnglish: اسم التاجر بالإنجليزية.TID: رقم جهاز نقاط البيع.MID: رقم التاجر.RRN: رقم مرجع العملية.schemeEnglishName: نوع البطاقة مثل mada.TXN_TYPE: نوع العملية Purchase أو Refund.PAN: رقم البطاقة مخفيًا.amount: مبلغ العملية.ApprovalCode: رمز الموافقة.RC: كود استجابة البنك.
الخطوة التاسعة: حذف طلب باستخدام Request ID
إذا أردت حذف طلب معين، يمكنك استخدام الدالة:
fun deleteRequestByID(requestID: String)مثال:
integrationSDK?.deleteRequestByID("2153")الخطوة العاشرة: مسح جميع الاستجابات
لمسح جميع الاستجابات المخزنة، استخدم:
fun clearResponse()مثال:
integrationSDK?.clearResponse()مثال عملي مبسط لعملية دفع كاملة
class PaymentActivity : AppCompatActivity() {
private var integrationSDK = IntegrationPOSSDK.getInstance()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
integrationSDK!!.initializeSDK(
this,
this
)
startPurchase()
}
private fun startPurchase() {
val requestId = integrationSDK?.createRequest(
TransactionType.PURCHASE,
"40.00"
)
if (requestId != null && requestId != -1) {
val response = integrationSDK?.getResponseByID(requestId)
if (response != null) {
// تعامل مع نتيجة الدفع هنا
}
} else {
// البيانات غير صحيحة أو فشل إنشاء الطلب
}
}
}نصائح مهمة عند الربط
- تأكد من وضع ملف
integrationSDK.arrداخل مجلدlibsالصحيح. - بعد إضافة الاعتماد في Gradle، قم بعمل Sync للمشروع.
- لا تنس إضافة وسم
queriesفيAndroidManifest.xmlخصوصًا عند استهداف Android 11 أو أعلى. - تحقق دائمًا من أن
requestIdلا يساوي-1، لأن هذه القيمة تعني أن البيانات غير صالحة. - تعامل مع حالات الرفض، الإلغاء، انتهاء المهلة، وأخطاء التطبيق داخل واجهة المستخدم.
- لا تعرض بيانات البطاقة الحساسة للمستخدم، واعتمد فقط على البيانات المقنعة مثل
PAN.
مميزات ربط Hala POS في تطبيقك
- تنفيذ عمليات الدفع مباشرة من داخل التطبيق.
- دعم عمليات الشراء والاسترجاع.
- إمكانية قراءة نتيجة كل عملية باستخدام رقم الطلب.
- إمكانية قراءة آخر استجابة محفوظة.
- الحصول على تفاصيل مهمة مثل RRN وApproval Code وTID وMID.
الخلاصة
ربط Hala POS داخل مشروع أندرويد يتم عبر خطوات واضحة: إضافة ملف SDK إلى مجلد libs، تعريفه داخل Gradle، إضافة إعدادات AndroidManifest.xml، ثم تهيئة IntegrationPOSSDK داخل الـ Activity. بعد ذلك يمكنك إنشاء عمليات شراء أو استرجاع، وقراءة نتائج العمليات من خلال requestId أو من خلال آخر استجابة محفوظة.
هذا التكامل مناسب للتطبيقات التي تحتاج إلى تنفيذ عمليات دفع عبر أجهزة نقاط البيع مع إمكانية متابعة حالة العملية ومعالجة نتائجها داخل التطبيق.
تحميل مرفقات Halaلمزيد من المقالات شاهد : شرح Flutter AnimatedContainer UI لإنشاء واجهات تفاعلية احترافية في Flutter






