بسیاری از اپلیکیشن ها برای ارائه خدمات یا کالا ساخته می شوند و به همین خاطر شامل بخشی برای پرداخت و اتصال به درگاههای بانکی می باشند.
اما همیشه برای برنامه نویسان این ابهام و سوال وجود دارد که مراحل این کار به چه صورت است؟
درگاه های پرداخت بسیاری وجود دارد که برخی از آنها مستقیم و برخی دیگر، درگاه واسط می باشند. درگاه های مستقیم از طریق بانک ها قابل ارائه است. اما چون نیاز به مدارک زیادی دارد و مراحل دریافت درگاه، در این بانکها دشوار است، درگاه های واسط ایجاد گردیدند.
درگاه های واسط در حقیقت واسطه ای میان ما (خدمات گیرنده) و بانکها (خدمات دهنده) می باشند. مزیت درگاه های واسط عدم نیاز به مدارک زیاد و سریع تر بودن روند دریافت درگاه می باشد.
هرکدام از این بانک ها و واسط ها، روال کاری خود را برای پرداخت دارند. اما کلیت کار در همه آن ها مشابه است.
در این مطلب من سعی کردم کلیت کار و نحوه پیاده سازی را در یک اپلیکیشن اندرویدی نشان دهم.
اتصال به درگاه پرداخت شامل دو بخش نسبتا مجزا است:
1. بخش مربوط به اپلیکیشن و برنامه نویس اندروید
2. بخش مربوط به عملیات پرداخت و برنامه نویس سرور
در این مطلب مراحل مربوط به هر دو بخش اپلیکیشن و سرور توضیح داده خواهد شد، اما تمرکز اصلی روی اپلیکیشن اندرویدی خواهد بود.
(خوشحال میشم اگه کسی مقاله کاملی در مورد بخش سرور نوشته به من اطلاع بده تا لینکش رو همینجا بیارم)
نکته: بخش مربوط به اپلیکیشن اندروید می تواند به دو صورت پرداخت در وب ویو و پرداخت در مرورگر انجام شود. اما پرداخت در وب ویو از امنیت لازم برخوردار نیست و لذا برخی از مارکت های داخلی اجازه پرداخت در وب ویو را نمی دهند.
مراحل اتصال به درگاه پرداخت:
(توضیحات هر بخش بصورت مختصر داخل فلوچارت نوشته شده اما در صورتی که ابهامی وجود داشت لطفا در کامنت اعلام کنید تا بیشتر توضیح بدم.)
همانطور که در نمودار مشخص است، دو مرحله 1 و 5 مربوط به اپلیکیشن اندرویدی بوده، پس کدهای این دو بخش را در زیر می بینیم:
مرحله 1. وقتی کاربر روی دکمه پرداخت کلیک کرد باید کاربر را به مرورگر و صفحه request (یا send) که برنامه نویس سرور اعلام کرده هدایت کنیم، و اطلاعات مورد نیاز را پاس دهیم.
String uri = Uri.parse("https://www.mySite.com/payment/request") .buildUpon() .appendQueryParameter("param1", "param1") .appendQueryParameter("param2", "parma2") .build().toString(); Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri)); startActivity(browserIntent);
مرحله 5. ما باید در اپلیکیشن مشخص کنیم که کاربر پس از انجام عملیات پرداخت، به کدام اکتیویتی هدایت شود. لذا کدهای زیر را در منیفست و برای اکتیویتی مورد نظر اضافه می کنیم.
<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="yourScheme" /> </intent-filter>
توجه کنید که بجای yourScheme میتوانید هر عنوان دلخواهی را وارد کنید، با این شرط که در آدرسی که در مرحله 4 برای هدایت کاربر از مرورگر به اپلیکیشن استفاده می شود نیز همین عنوان استفاده شده باشد. به این صورت:
yourScheme://?data=hello&status=1
و سپس در اکتیویتی مقصد می توانید دیتای ارسالی را دریافت کرده و طبق آن عملیات متناسبی انجام دهید:
final Uri data = getIntent().getData(); final String tmpData = data.getQueryParameter("data"); final String tmpState = data.getQueryParameter("status");