Otorisasi di Apple Pay untuk yang terkecil

Otorisasi di Apple Pay untuk yang terkecil


Perhatian akan dibayarkan ke titik tertentu - ini mendapatkan kriptogram dari Apple setelah pembeli lulus dari TouchID atau FaceID. Bahasa backend adalah PHP.


Nama saya Alexander, saya seorang programmer PHP junior di Moguta, dan saya harus menghadapi integrasi Apple Pay di Moguta.CMS kami dalam perjalanan. Hari ini saya akan memberi tahu Anda cara mengotorisasi diri melalui Apple Pay untuk melakukan pembayaran tanpa mempelajari materi koneksi dan sertifikat yang aman, karena pada awal perjalanan saya, saya tidak memiliki materi seperti itu.


Pendahuluan


Saya tidak akan melukis di sini seluruh lembar untuk memperkenalkan Apple Pay ke situs saya. Petunjuk tentang cara mendaftarkan akun pengembang Apple, tempat membuat sertifikat Pemrosesan Pembayaran, tempat mengirim jawaban yang diterima, lengkap di RuNet, tanyakan pada Google โ€œintegrasi pembayaran apel di situsโ€ dan pilih pengumpul pembayaran yang Anda sukai, yang akan merinci semua langkah yang diperlukan tindakan.


Ulasan singkat


Persyaratan minimum untuk instruksi ini adalah keberadaan MacOS untuk bekerja dengan kunci, karena bekerja dengan sertifikat pada OS lain sudah merupakan materi terpisah, yang saya tidak akan memperhatikan di sini.


Mari kita cari tahu di mana tempat permusuhan kita nantinya. Algoritma adalah sebagai berikut:


  1. Pengguna memulai proses pembayaran melalui Apple Pay di toko online;
  2. Toko online mengirimkan informasi pembayaran ke Apple;
  3. Apple merespons dengan tautan ke data penjual;
  4. Toko online mengirimkan data penjual melalui tautan melalui TLS Dua Arah;
  5. Apple mengirimkan data yang mengandung PaymentData;
  6. Toko online mengalihkan PaymentData ke gateway pembayaran dan memproses respons;

Kami tertarik pada poin ke-4, karena permintaan CURL yang biasa tidak cukup.


Kami mendapatkan sertifikat


Agar Apple percaya bahwa itu berkaitan secara pribadi dengan kami, Anda harus terlebih dahulu mendapatkan sertifikat Identifikasi Pedagang (agar tidak bingung dengan Pemrosesan Pembayaran, diperlukan untuk gateway pembayaran). Pertama, kami akan merumuskan permintaan sertifikat sesuai dengan instruksi resmi . File yang dihasilkan dilampirkan ke Apple Identity Merchant Certificate of Merchant ID Anda.


Buat sertifikat


Sebagai tanggapan, kami mendapatkan merchant_id.cer, yang kami tambahkan ke banyak. Berdasarkan kunci privatnya, kami membuat file .p12. Untuk melakukan ini, panggil menu konteks kunci pribadi dan pilih "Ekspor ..."


Ekspor Ke hal


Kami mengeluarkan kunci dengan perintah berikut (kata sandi yang akan diminta oleh terminal akan menjadi kata sandi untuk kunci tersebut, kami akan membutuhkannya saat menghubungkan ke Apple)


openssl pkcs12 -in <  >.p12 -out ApplePay.key.pem -nocerts -nodes 

dan menyusul sertifikat kami di pem


  openssl x509 -inform der -in merchant_id.cer -out merchant_id.pem 

Sekarang kita memiliki semua file yang diperlukan yang akan kita buktikan ke server apple bahwa kita adalah siapa yang kita klaim.


Kirim permintaan


Kami mengabaikan saat menerima tautan ke validasi ( baca lebih lanjut di artikel lain tentang Habr ), kami lewati saat ketika skrip JS di Safari mengirim server kami permintaan otorisasi di Apple.


Untuk ini kami menggunakan PHP dengan cURL. Contoh kode:


 $ch = curl_init(); $data = '{"merchantIdentifier":"<,      Merchan ID>", "domainName":"< ->", "displayName":"< -,       TouchID/FaceID>"}'; curl_setopt($ch, CURLOPT_URL, '<  Apple,   validationURL>'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_CERTINFO, true); curl_setopt($ch, CURLOPT_VERBOSE, true); curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); curl_setopt($ch, CURLOPT_SSLCERT, '<  >.pem'); curl_setopt($ch, CURLOPT_SSLKEY, '<  >.pem'>); curl_setopt($ch, CURLOPT_SSLKEYPASSWD, '<  >'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json")); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $res = curl_exec($ch); curl_close($ch); echo json_encode($res); 

Kami menarik data pembayaran dari respons yang diterima dan mengirimkannya ke gateway pembayaran kami. Selamat, otorisasi dilewatkan, Anda dapat mendayung uang.


Catatan


Nasib tidak membiarkan saya bersukacita atas koneksi yang telah dibuat untuk waktu yang lama, dan Apple memberi saya jawaban berikut:


 Payment Services Exception merchantId=< > unauthorized to service on behalf of merchantId=<  > reason=\"The latter is not registered for Apple Pay on the web\"" 

Teks pesannya tidak cukup jelas, seperti yang kita inginkan. Informasi di jaringan, sekali lagi, tidak. Ternyata, kemungkinan besar ini berarti Anda cukup memasukkan nilai yang salah di bidang merchantIdentifier.


Ringkasan


Saya akan senang mendengar saran, tip atau kritik dalam komentar.


Saya berharap artikel ini akan bermanfaat bagi jiwa yang hilang sama seperti saya.

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


All Articles