Saya pergi ke kantor dengan kereta - saya harus melewati satu stasiun, dan saya akan hampir sampai.
Setiap pagi saya membeli tiket kereta di aplikasi dan menderita. Lebih murah di sana, tetapi perbedaan harga tidak membayar rasa sakit saya ketika saya mengalami tiga menit stres ini. Bahkan tanpa menyebutkan waktu pemuatan masing-masing dari lima layar aplikasi, orang tidak bisa tidak mengatakan tentang perbankan WebView dengan peta yang disimpan, memasukkan kode dari SMS dalam perjalanan dan kerusakan yang tak terduga.
Ini terjadi ketika Anda berlari di kereta, dan mereka mengatakan "Ada yang salah" dan menghapus uang, tetapi mereka tidak memberikan tiket. Kembali tiba di sana, tetapi kereta sudah pergi. Ini terjadi beberapa kali dalam sebulan, terlepas dari kualitas Internet. Tidak perlu berbicara tentang saham apa pun.

Saat ini Anda sedang berpikir - mungkin ada cara yang lebih sederhana? Ya, tidak memiliki tampilan web sama sekali, cantik dan asli. Dan ya, ada cara seperti itu. Detail di bawah potongan.
tl; dr Kami membuat antarmuka untuk menerima pembayaran melalui Apple Pay, Google Pay, bank seluler Sberbank, dan Yandex.Money di iOS dan Android. Tidak, Anda tidak perlu menggambar formulir pembayaran. Ya, itu juga dalam open source.
Secara umum, ada sekitar dua skenario untuk menerima pembayaran dalam aplikasi seluler.
Yang pertama adalah melalui WebView dengan halaman pembayaran. Jadi, Anda dapat menerima pembayaran melalui dompet, kartu bank, ponsel, atau apa pun. Masalahnya adalah bahwa WebView tidak memiliki akses ke cookie browser, yang berarti itu tidak memiliki otorisasi untuk beberapa metode pembayaran, sehingga Anda tidak akan dapat membayar.
Dalam skenario kedua, pedagang melewati data kartu melalui bagian belakangnya - untuk ini Anda harus mematuhi PCI DSS, yang mahal, panjang dan sulit.
SDK Seluler
SDK seluler Yandex.Kassi adalah perpustakaan untuk iOS dan Android yang telah kami buat untuk menyederhanakan kehidupan pedagang, pengembang aplikasi, dan mereka yang peduli dengan penggunanya. Bahkan, SDK seluler adalah alat untuk tokenizing kartu bank dan instrumen pembayaran lainnya. Tokenisasi adalah pertukaran data yang diperlukan untuk melakukan pembayaran untuk pengidentifikasi unik - token.
Di musim semi, kami meluncurkan versi pertama SDK - ada pembayaran dengan kartu dan dari dompet Yandex.Money. Sekarang semuanya menjadi lebih baik - dalam rilis Juli mereka menambahkan Google Pay, Apple Pay dan pembayaran melalui Sberbank dengan konfirmasi melalui SMS.
Tentang manfaatnya

Manfaat utama adalah bahwa pembeli membayar apa pun, tetapi bagi pedagang, kelihatannya seperti token yang dapat dioperasikan alih-alih data pembayaran.
Belum diperlukan untuk lulus sertifikasi untuk kepatuhan PCI DSS - data kartu akan diproses pada perimeter kami. Setiap tahun kami melewati sertifikasi, mematuhi semua peraturan regulator, dan menghilangkan toko yang terhubung ke Kasir. Jadi itu mungkin.
Dengan SDK, pembayaran di Android dan iOS terlihat familier bagi pengguna, dan sekarang mereka tidak perlu meninggalkan konteks aplikasi pada saat pembayaran. Mereka yang membayar dari dompet elektronik juga tidak perlu masuk - jika pengguna masuk ke aplikasi Uang, Anda hanya perlu memilih akun yang Anda butuhkan melalui Yandex.Passport.
Bagaimana cara mulai menggunakan di rumah?
Jika ingin menyamaratakan sepenuhnya, maka dua hal perlu dilakukan:
- Integrasikan API pembayaran Yandex.Cash - untuk menerima pembayaran;
- Hubungkan SDK seluler - untuk tokenisasi dan antarmuka asli.
Untuk menambahkan Apple Pay, cukup untuk mengaktifkan penerimaan pembayaran kartu bank dan
kunci masalah di akun pengembang Apple.
Google Pay sedikit berbeda. Membutuhkan:
- Mempersiapkan test build dari APK.
- Isi daftar periksa integrasi - konfirmasi bahwa aplikasi Anda tidak akan mengambil alih dunia, dan beberapa hal lagi.
- Isi majelis untuk verifikasi di Google Pay.
Google akan memeriksa semuanya dan mengizinkan (atau tidak mengizinkan) memposting aplikasi di Google Play.
SDK seluler disematkan dalam aplikasi klien sehingga pembayaran asli dapat melewatinya. Kerjanya seperti ini: detail kartu langsung ke perimeter PCI DSS kami, tanpa jatuh ke backend toko. Kami memeriksa, memproses, dan mengembalikan token pembayaran kepada pedagang dengan masa pakai 30 menit - dapat digunakan sekali.
Skema interaksi pengguna, pedagang, SDK seluler, dan API Ya.KassaDengan partisipasi SDK, pembayaran terdiri dari tiga tahap:
- Inisiasi pembayaran dan penerimaan token. Aplikasi memulai pembayaran melalui SDK, dan menerima token pembayaran di output.
- Buat pembayaran. Token masuk ke server, yang memulai pembayaran melalui API.
- Minta status pembayaran. Ini diperlukan untuk menggambar jendela yang benar dengan keberhasilan atau kesalahan.
Kenapa itu bagus?
- Arsitekturnya homogen dalam berbagai skenario pembayaran.
- Tidak perlu bekerja dengan kartu kredit di bagian belakang toko.
Tentang pengembangan dan pengujian
Dalam versi iOS kami menggunakan VIPER dan layanan microser.
Modul tokenization adalah landasan SDK seluler - modul ini mengontrol proses sehingga pedagang hanya melihat token untuk output Yandex.Kassi API, terlepas dari apa yang dibayar pengguna. Modul tokenization lain memutuskan jendela mana yang akan ditampilkan kepada pengguna sekarang, dan membuat permintaan POST ke server. Kami menulis pembungkus untuk API untuk bekerja dengan permintaan HTTP / HTTPS ke YandexMoneyCoreApi - ini membuat hidup lebih mudah.
Layanan adalah penyimpanan dan objek yang berfungsi dengan API klien Yandex.Kassi.
Kode mereka ternyata bersih dan ringkas, tanpa banyak cabang dan pintu keluar awal, karena departemen pengembangan berhasil memikirkan seluruh arsitektur sebelumnya. Layanan SDK memiliki jumlah pemrograman fungsional terkonsentrasi - di sini kami telah mengungkapkan kemampuannya secara penuh. Di mana kami harus bekerja dengan Functor, Monad, Functor Applicative, Janji biasa membantu kami.
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
Satu-satunya kesulitan muncul dengan VIPER - kami mulai menambahkan jenis pembayaran baru dan menyadari bahwa modul pusat berkembang pesat. Ketika ada sekitar 1000 baris di dalamnya, kami memutuskan bahwa kami harus melakukan sesuatu dengan ini dan merevisi arsitekturnya.
Kami menyukai gagasan modul pusat untuk proses tersebut, dan kami memutuskan untuk meninggalkannya. Dalam proyek lain, kami menggunakan mesin negara hingga deterministik untuk menggambarkan proses, tetapi di sini tidak akan menyelesaikan masalah, karena implementasi banyak hal akan tetap dalam modul yang sama. Jadi kami memutuskan untuk menerapkan pola "strategi" untuk mengisolasi proses setiap instrumen pembayaran. Setelah pengguna memilih metode pembayaran, kami membuat strategi untuk metode pembayaran, yang mengontrol kartu transisi dan memutuskan proses mana yang diikuti.
Aplikasi demo

Kami berhasil.
Semuanya dimulai dengan fakta bahwa departemen pengujian membutuhkan sesuatu untuk menguji SDK seluler. Tanpa aplikasi pengujian, mereka tidak dapat memeriksa cara kerja SDK, dan tidak ada pengembang untuk kedua platform di antara penguji.
Dalam prosesnya, ternyata, selain tugas pengujian, aplikasi demo adalah cara yang baik untuk menunjukkan kepada mitra kami apa itu SDK seluler. Siapa pun yang tidak tahu cara memprogram di Swift atau Kotlin (baca: siapa saja) dapat melihat cara kerja SDK. Karena itu, kami mengunggah
aplikasi demo di Google Play dan
versi iOS ke situs web Yandex.Cash.Ternyata hal di mana Anda dapat melihat cara kerja berbagai metode pembayaran, bermain dengan pengaturan atau menunjukkannya kepada seseorang yang bertanggung jawab untuk memilih agregator pembayaran. Jangan malu-malu.
Sumber terbuka
Beberapa bulan setelah peluncuran, kami mendistribusikan perpustakaan dengan sangat tidak nyaman - membagikan tautan ke situs atau mengirim file melalui surat. Orang baik tidak melakukan ini - mereka memposting semuanya di GitHub di bawah lisensi MIT. Jadi kami melakukan hal itu.
Selain keajaiban tokenization, pedagang dapat menyesuaikan warna, mengubah logo, atau membuat perubahan lain ke perpustakaan. Dan untuk membuatnya sangat nyaman, kami menerbitkan SDK seluler di CocoaPods untuk pengembang iOS dan Maven untuk Android.
Jika Anda sudah menerima pembayaran melalui Kasir, tetapi sekarang Anda ingin melakukannya dengan lebih baik dan lebih produktif - hubungkan SDK seluler. Jika Anda baru saja membuka toko, hubungkan Kasir. Kami baik-baik saja.
Tautan yang bermanfaat
โ
Perpustakaan untuk aplikasi selulerโ
dokumentasi SDKโ
SDK untuk iOS dan
Android di GitHub.
โ
MavenItu saja. Ajukan pertanyaan di komentar!