تعبت من قبول المدفوعات من خلال WebView. ماذا افعل؟

أذهب إلى المكتب بالقطار - أحتاج إلى الذهاب عبر محطة واحدة ، وسوف أكون هناك تقريبًا.

كل صباح أشتري تذاكر القطار في التطبيق وأعاني. إنه أرخص هناك ، ولكن فرق السعر لا يدفع ثمن الألم الذي أشعر به عندما أتعرض لهذه الدقائق الثلاث من الضغط. بدون ذكر وقت التحميل لكل شاشة من شاشات التطبيق الخمس ، لا يسع المرء إلا أن يقول عن عرض WebView المصرفي مع خريطة محفوظة ، وإدخال الرمز من الرسائل القصيرة أثناء التشغيل والأعطال غير المتوقعة.

هذا عندما تركض في قطار ، ويقولون "حدث خطأ ما" وشطب المال ، لكنهم لا يعطون تذكرة. عودة هناك ، لكن القطار غادر بالفعل. يحدث هذا مرتين في الشهر ، بغض النظر عن جودة الإنترنت. ليست هناك حاجة للحديث عن أي أسهم.



في هذه اللحظة أنت تفكر - ربما هناك طريقة أبسط؟ حسنًا ، ليس لديك عرض ويب على الإطلاق ، جميل وموطني. ونعم ، هناك مثل هذه الطريقة. التفاصيل تحت القطع.

tl؛ dr لقد أنشأنا واجهة لقبول الدفعات عبر Apple Pay و Google Pay و Sberbank mobile bank و Yandex.Money في iOS و Android. لا ، ليس عليك سحب نماذج الدفع. نعم ، إنها أيضًا مفتوحة المصدر.

بشكل عام ، هناك ما يقرب من سيناريوهين لقبول المدفوعات في تطبيقات الهاتف المحمول.

الأول من خلال WebView مع صفحة الدفع. لذلك يمكنك قبول المدفوعات من خلال محفظة أو بطاقة مصرفية أو هاتف محمول أو أي شيء آخر. تكمن المشكلة في أن WebView لا يمتلك حق الوصول إلى ملفات تعريف ارتباط المتصفح ، مما يعني أنه ليس لديه تفويض لبعض طرق الدفع ، لذلك لن تتمكن من الدفع.

في السيناريو الثاني ، يقوم التاجر بتمرير بيانات البطاقة من خلال الواجهة الخلفية - لهذا تحتاج إلى الامتثال لـ PCI DSS ، وهو مكلف وطويل وصعب.

SDK للجوال


Yandex.Kassi mobile SDK هي مكتبة لنظامي التشغيل iOS و Android أنشأناها لتبسيط حياة التجار ومطوري التطبيقات وأولئك الذين يهتمون بمستخدميهم. في الواقع ، تعد SDK للجوال أداة لتمييز البطاقات المصرفية وأدوات الدفع الأخرى. الرمز المميز هو تبادل البيانات اللازمة لإجراء الدفع لمعرف فريد - رمز مميز.

في الربيع ، طرحنا الإصدار الأول من SDK - كان هناك الدفع عن طريق البطاقة ومن محفظة Yandex.Money. الآن أصبح كل شيء أفضل - في إصدار يوليو أضافوا Google Pay و Apple Pay والمدفوعات عبر Sberbank مع التأكيد عن طريق الرسائل القصيرة.

حول الفوائد


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

ليس من الضروري بعد اجتياز شهادة توافق PCI DSS - ستتم معالجة بيانات البطاقة في محيطنا. كل عام نمر الشهادة ، والامتثال لجميع قواعد المنظمين ، والقضاء على المخازن المتصلة بالصراف. لذا فمن الممكن.

باستخدام SDK ، تبدو الدفعات في Android و iOS مألوفة للمستخدمين ، والآن لا يحتاجون إلى مغادرة سياق التطبيق في وقت الدفع. لا يحتاج أولئك الذين يدفعون من محفظة إلكترونية أيضًا إلى تسجيل الدخول - إذا قام المستخدم بتسجيل الدخول إلى تطبيق Money ، فأنت بحاجة فقط إلى تحديد الحساب الذي تحتاجه من خلال Yandex.Passport.

كيف تبدأ الاستخدام في المنزل؟


إذا كان التعميم تمامًا ، فيجب عمل شيئين:

  • دمج واجهة برمجة تطبيقات الدفع Yandex.Cash - لاستلام الدفعات ؛
  • قم بتوصيل SDK للجوال - للترميز والواجهة الأصلية.

لإضافة Apple Pay ، يكفي تنشيط قبول مدفوعات البطاقة المصرفية وإصدار المفاتيح في حساب مطور Apple.

Google Pay مختلف قليلاً. تحتاج:

  1. قم بإعداد نسخة تجريبية من APK.
  2. املأ قائمة التحقق من التكامل - تأكد من أن تطبيقك لن يسيطر على العالم ، وبعض الأشياء الأخرى.
  3. املأ التجميع للتحقق من Google Pay.

ستتحقق Google من كل شيء وتسمح (أو لا تسمح) بنشر التطبيق على Google Play.

يتم تضمين SDK للجوال في تطبيق العميل بحيث تعمل الدفعات الأصلية من خلاله. تعمل هذه الطريقة: تذهب تفاصيل البطاقة مباشرة إلى محيط PCI DSS ، دون الوقوع في الواجهة الخلفية للمتجر. نحن نتحقق ونعالج ونعيد إلى التاجر رمز دفع لمدة 30 دقيقة - يمكن استخدامه مرة واحدة.


مخطط تفاعل المستخدم ، التاجر ، SDK للجوال و API Ya.Kassa

بمشاركة SDK ، يتكون الدفع من ثلاث مراحل:

  1. بدء الدفع واستلام رمز مميز. يبدأ التطبيق دفعة من خلال SDK ، ويتلقى رمز دفع عند الإخراج.
  2. إنشاء دفعة. ينتقل الرمز المميز إلى الخادم ، الذي يبدأ الدفع من خلال واجهة برمجة التطبيقات.
  3. طلب حالة الدفع. هذا ضروري من أجل رسم النافذة الصحيحة مع النجاح أو الأخطاء.

لماذا هذا جيد؟


  1. الهندسة المعمارية متجانسة في سيناريوهات الدفع المختلفة.
  2. لا حاجة للعمل مع بطاقة ائتمان على الواجهة الخلفية للمتجر.

حول التطوير والاختبار


في إصدار iOS نستخدم خدمات VIPER والخدمات المصغرة.

وحدة الترميز هي حجر الزاوية في SDK للجوال - فهي تتحكم في العملية بحيث يرى التاجر الرمز المميز فقط لإخراج واجهة برمجة تطبيقات Yandex.Kassi ، بغض النظر عن ما دفعه المستخدم. تحدد وحدة الرمز المميز الأخرى النافذة التي ستظهر للمستخدم الآن ، وتقدم طلبات POST إلى الخادم. لقد كتبنا غلافنا لواجهة برمجة التطبيقات للعمل مع طلبات HTTP / HTTPS إلى YandexMoneyCoreApi - مما جعل الحياة أسهل.

الخدمات عبارة عن مخازن وعناصر تعمل مع واجهة برمجة تطبيقات عميل Yandex.Kassi.
تبين أن كودهم نظيف وموجز ، بدون عدد كبير من الفروع والمخارج المبكرة ، لأن قسم التطوير تمكن من التفكير في العمارة بأكملها مقدمًا. تحتوي خدمات SDK على كمية مركزة من البرمجة الوظيفية - لقد كشفنا هنا عن قدراتها بالكامل. حيث كان علينا العمل مع Functor ، Monad ، Fun Application Functor ، وعد عادي ساعدتنا.

let method = PaymentOptions.Method(oauthToken: clientApplicationKey, passportAuthorization: passportToken, gatewayId: gatewayId, amount: amount, currency: currency) let paymentOptions = session.perform(apiMethod: method).responseApi() let allItems = getItems <^> paymentOptions let items = paymentMethodHandler.filterPaymentMethods <^> allItems let itemsWithEmptyError = items .recover(on: .global(), mapError) .then(makeErrors) return itemsWithEmptyError 

نشأت الصعوبة الوحيدة مع VIPER - بدأنا في إضافة أنواع جديدة من الدفع وأدركنا أن الوحدة المركزية تنمو بسرعة. عندما كان هناك حوالي 1000 سطر ، قررنا أنه يجب علينا القيام بشيء بهذا ومراجعة الهيكل.

لقد أحببنا فكرة الوحدة المركزية للعملية ، وقررنا تركها. في مشاريع أخرى ، نستخدم آلة حالة محددة حتمية لوصف العملية ، ولكن هنا لن تحل المشاكل ، حيث سيظل تنفيذ العديد من الأشياء في نفس الوحدة. لذلك قررنا تطبيق نمط "الاستراتيجية" لعزل عمليات كل وسيلة دفع. بعد أن يختار المستخدم طريقة الدفع ، ننشئ استراتيجية لطريقة الدفع ، والتي تتحكم في بطاقة النقل وتقرر العملية التي يتم اتباعها.

تطبيق تجريبي


لقد نجحنا.

بدأ كل شيء بحقيقة أن قسم الاختبار بحاجة إلى شيء لاختبار اختبار SDK للجوال. بدون تطبيق اختبار ، لم يتمكن الرجال من التحقق من كيفية عمل SDK ، ولم يكن هناك مطورين لكلا النظامين الأساسيين بين المختبرين.

في هذه العملية ، اتضح أنه بالإضافة إلى مهام الاختبار ، يعد التطبيق التجريبي طريقة جيدة لإظهار شركائنا ما هو SDK المحمول. يمكن لأي شخص لا يعرف كيفية البرمجة في Swift أو Kotlin (اقرأ: أي شخص) معرفة كيفية عمل SDK. لذلك ، قمنا بتحميل التطبيق التجريبي على Google Play وإصدار iOS إلى موقع Yandex.Cash على الويب.

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

المصدر المفتوح


بعد بضعة أشهر من إطلاقها ، قمنا بتوزيع المكتبة بشكل غير مريح للغاية - شاركنا رابطًا إلى الموقع أو أرسلنا ملفات عن طريق البريد. الرجال الجيدون لا يفعلون ذلك - إنهم ينشرون كل شيء على GitHub بموجب ترخيص MIT. لذلك فعلنا ذلك بالضبط.

بالإضافة إلى سحر الرمز المميز ، يمكن للتجار تخصيص الألوان أو تغيير الشعارات أو إجراء أي تغييرات أخرى على المكتبة. ولجعلها مريحة للغاية ، قمنا بنشر SDK للجوال في CocoaPods لمطوري iOS وفي Maven لرجال Android.

إذا كنت قد قبلت بالفعل الدفعات من خلال أمين الصندوق ، ولكنك تريد الآن القيام بذلك بشكل أفضل وأكثر إنتاجية - قم بتوصيل SDK للجوال. إذا كنت تقوم بفتح متجر فقط ، قم بتوصيل أمين الصندوق. نحن بخير.

روابط مفيدة


مكتبة لتطبيقات الهاتف المحمول
وثائق SDK
SDK لنظامي التشغيل iOS و Android على GitHub.
مخضرم

هذا كل شيء. اطرح أسئلة في التعليقات!

Source: https://habr.com/ru/post/ar416871/


All Articles