شارك المقالة

كيفية ربط Hala POS في مشروع أندرويد خطوة بخطوة

إذا كنت تعمل على تطبيق أندرويد يحتاج إلى تنفيذ عمليات دفع عبر أجهزة نقاط البيع، فإن ربط Hala POS داخل مشروعك يسمح للتطبيق بإرسال طلبات الدفع أو الاسترجاع إلى تطبيق الدفع، ثم استقبال نتيجة العملية ومعالجتها داخل التطبيق.

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

ما هو Hala POS Payment Integration؟

Hala POS Payment Integration هو SDK مخصص لربط تطبيقك مع تطبيق الدفع الخاص بـ Hala. الفكرة الأساسية أن تطبيقك يقوم بإنشاء طلب دفع أو استرجاع، ثم يقوم محرك التكامل بتمرير الطلب إلى تطبيق الدفع، وبعد تنفيذ العملية يتم إرجاع النتيجة إلى تطبيقك.

سير العملية كما هو موضح في ملف الربط يكون بالشكل التالي:

  1. يقوم التطبيق المدمج بإرسال الطلب.
  2. يقوم Integration Engine بالاستماع للطلب القادم.
  3. يتم التحقق من صحة البيانات.
  4. يتم تمرير البيانات إلى تطبيق الدفع.
  5. تتم معالجة عملية الدفع.
  6. يتم إرجاع النتيجة إلى محرك التكامل.
  7. يتم إرسال نتيجة العملية إلى التطبيق المدمج.

متطلبات الربط

قبل البدء، تأكد من توفر ملف SDK الخاص بالتكامل:

integrationSDK.arr

هذا الملف يجب إضافته داخل مجلد libs في مشروع Android الخاص بك.

كيفية ربط Hala POS في مشروع أندرويد خطوة بخطوة

الخطوة الأولى: إضافة ملف 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"
)

شرح أهم معاملات الطلب

المعاملالنوعالوصفمثال
transactionTypeTransactionTypeنوع العملية، إما Purchase أو RefundTransactionType.PURCHASE
requestAmountStringمبلغ العملية40.00
PWDStringكلمة مرور الاسترجاع123456
RRNStringرقم مرجع العملية123456789012
transactionDateStringتاريخ العملية1/2021
transactionApprovalCodeStringرمز الموافقة الخاص بالعملية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_REGISTEREDSuccess
paymentResponseDataبيانات العمليةResponse Data Buffer
paymentResponseCRCقيمة تحقق أمنيةSecurity checksum

حالات العملية Transaction Status

من أهم الحقول التي يجب التعامل معها داخل التطبيق حقل transactionStatus، حيث يوضح نتيجة العملية.

القيمةالمعنى
0Approved
1Offline Approved
-1Declined
-2Timeout
-3Cancelled
-4EMV_REJECTED
-5MANUAL_ENTRY_CANCELLED
-6APPLICATION_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
شاهد أيضًا
مقالات ذات صلة

🚫 مانع الإعلانات مفعل

يجب إيقاف مانع الإعلانات لاستكمال تصفح الموقع