Jadi apa yang harus dilakukan oleh pemilik perniagaan kecil? Di sinilah penyelesaian pembayaran Braintree masuk. Saya harus menyebut bahawa tidak Braintree atau mana -mana pembekal perkhidmatan patuh PCI DSS yang lain boleh memberitahu anda yang SAQ untuk mengisi, atau sama ada sistem anda mematuhi. Tetapi mereka telah berpasangan dengan metrik keselamatan, QSA yang terkemuka di industri, untuk menyediakan penyelesaian bebas kos untuk membantu semua pelanggan mereka mencapai dan mengekalkan pematuhan PCI. Dan dalam pengalaman mereka, pelanggan menggunakan sama ada telus atau braintree.js biasanya dapat mengisi SAQ A, yang kurang terlibat (dan oleh itu mahal) daripada Saq D. Anda boleh membaca lebih lanjut di sini.
tetapi latar belakang yang cukup; Mari kita tulis beberapa kod.
Artikel ini akan memberi tumpuan kepada kaedah redirect telus. Perkara pertama yang perlu kita lakukan ialah menuju ke Braintree untuk mendapatkan kunci API pelayan kami. Bagi anda tanpa akaun pengeluaran, arahkan penyemak imbas anda ke kotak pasir Braintree dan mendaftar untuk akaun ujian. Log masuk, dan klik pada "Akaun -> Kekunci API." Kemudian, klik butang "Menjana Baru", dan akhirnya klik "Lihat" di bawah lajur kunci peribadi kunci API yang baru dijana. Anda akan dibawa ke skrin berikut, yang mengandungi semua maklumat yang anda perlukan untuk mengkonfigurasi Perpustakaan Pelanggan Braintree.
Sekarang sudah tiba masanya untuk memasang perpustakaan klien Braintree PHP sebenar. Kita boleh melakukannya dengan komposer dengan menjalankan perintah berikut:
composer require braintree/braintree:*
Dengan pengalihan telus, bagaimanapun, tindakan borang ditetapkan supaya borang itu akan disiarkan terus ke pelayan Braintree, dan responsnya dihantar kembali kepada pelayar pelanggan. Pelayar kemudian diarahkan ke skrip pada pelayan web menggunakan redirect HTTP 303. Akhirnya, skrip pelayan web mengesahkan transaksi dengan Braintree, dan membentangkan hasilnya kepada pelayar pelanggan. Jadi model itu kelihatan lebih seperti ini:
Sekarang kita mempunyai teori di bawah tali pinggang kita, mari kita teruskan dan tulis beberapa kod. Mereka yang ingin melihat versi lengkap dapat menemuinya di GitHub.
Perkara pertama yang akan kita lakukan ialah membuat borang HTML yang sangat asas supaya kita dapat memasukkan beberapa data untuk dihantar ke Braintree untuk diproses. Saya akan membuat ini semudah mungkin supaya kita dapat memberi tumpuan kepada fungsi.
composer require braintree/braintree:*
Tidak ada yang rumit berlaku di sini. Satu -satunya perkara yang anda perhatikan ialah nama medan input berada dalam format array. Anda dapat melihat senarai penuh nama medan yang sah di sini. Perkara lain yang saya akan tunjukkan dari halaman itu ialah jika anda menggunakan rangka kerja yang mempunyai masalah dengan menggunakan array untuk nama input (saya melihat anda, rangka kerja Zend!), Maka anda boleh menggunakan pengganti berganda berganda sintaks. Jadi input tarikh tamat tempoh anda akan kelihatan seperti ini:
<span><span><!doctype html></span> </span> <span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><div</span> id<span>="wrap"</span>></span> </span> <span><span><span><form</span> method<span>="post"</span> action<span>=""</span> autocomplete<span>="off"</span>></span> </span> <span><span><span><label</span>></span>Name on Card: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cardholder_name]"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>Card Number: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][number]"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>CVV: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cvv]"</span> class<span>="short"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>Expiration Date (MM/YYYY): <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][expiration_date]"</span> class<span>="short"</span>></span><span><span></label</span>></span> </span> <span><span><span><input</span> type<span>="submit"</span> value<span>="submit payment"</span>></span> </span> <span><span><span></form</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span></body</span>></span> </span> <span><span><span></html</span>></span></span>
Satu -satunya perkara lain yang anda perhatikan ialah saya telah menambah atribut "autocomplete" ke borang saya, dan menetapkan nilainya. Braintree mengesyorkan melakukan ini, dan saya harap sebab ini jelas ...
Terdapat beberapa perkara lain yang perlu kita lakukan untuk memanfaatkan keajaiban pengalihan telus pada borang kami. Tetapi sebelum kita berbuat demikian, kita perlu mengkonfigurasi skrip kita untuk bekerja dengan API Braintree.
Sebelum saya memberitahu anda bagaimana untuk melakukannya, saya akan menyebutnya, demi kejelasan, saya telah meletakkan semua PHP dan HTML dalam fail yang sama dalam kod sampel saya. Saya harap ia tidak mengatakan bahawa dalam projek pengeluaran bahawa kod persediaan akan masuk dalam fail bootstrap projek saya, dan kod pemprosesan borang akan masuk ke tindakan pengawal atau fail berasingan yang lain. Ok, cukup minta maaf - mari kita buat perkara ini!
<span><span><span><input</span> type<span>="text"</span> name<span>="transaction__credit_card__expiration_date"</span>></span></span>
Baris pertama hanya membolehkan kami memanfaatkan autoloader komposer dan menggunakan perpustakaan Braintree tanpa secara eksplisit termasuk sebarang fail tambahan. Mudah -mudahan, empat baris seterusnya kelihatan biasa, kerana mereka telah disalin verbatim dari alat utama API Panel Kawalan Sandbox yang saya memperkenalkan anda ke bahagian sebelumnya. Jelas sekali anda akan menggantikannya dengan kod dari akaun panel kawalan anda sendiri.
Perkara seterusnya yang saya mahu lakukan ialah menetapkan tindakan borang supaya pelanggan kami akan menghantar data sensitif mereka terus ke Braintree, yang merupakan titik keseluruhan menggunakan TR. Nasib baik, Perpustakaan Braintree menjadikannya sangat mudah dengan menyediakan objek/kaedah penolong. Oleh itu, ubah suai kod borang anda seperti:
composer require braintree/braintree:*
satu -satunya perkara lain yang perlu kita lakukan ialah membuat input tersembunyi yang mengandungi perwakilan hashed URL yang anda mahu Braintree untuk mengalihkan pelanggan kepada selepas mereka menyerahkan borang itu, serta maklumat yang anda tidak mahukan mereka dapat menentukan. Sebagai contoh, ini adalah di mana anda boleh meletakkan jumlah urus niaga. Sama seperti gaya, saya suka menetapkan URL kembali ke borang pembayaran itu sendiri supaya saya dapat memaparkan sebarang kesilapan kepada pengguna dan memberi mereka peluang untuk menghantar semula. Jadi inilah yang akan kelihatan seperti:
<span><span><!doctype html></span> </span> <span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><div</span> id<span>="wrap"</span>></span> </span> <span><span><span><form</span> method<span>="post"</span> action<span>=""</span> autocomplete<span>="off"</span>></span> </span> <span><span><span><label</span>></span>Name on Card: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cardholder_name]"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>Card Number: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][number]"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>CVV: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cvv]"</span> class<span>="short"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>Expiration Date (MM/YYYY): <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][expiration_date]"</span> class<span>="short"</span>></span><span><span></label</span>></span> </span> <span><span><span><input</span> type<span>="submit"</span> value<span>="submit payment"</span>></span> </span> <span><span><span></form</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span></body</span>></span> </span> <span><span><span></html</span>></span></span>
Jelas sekali saya mengodkan jumlahnya di sini, tetapi dalam aplikasi pengeluaran anda sama ada akan menghasilkan ini menggunakan beberapa logik sisi pelayan, atau dalam hal borang sumbangan dengan jumlah yang tidak ditentukan, anda akan membuat medan borang dan biarkan pengguna menyediakannya. Saya juga biasanya menetapkan pilihan "Hantar Penyelesaian" kepada Benar. Jika tidak, transaksi ini hanya akan
sekarang saya hanya perlu menambahkan ini sebagai medan tersembunyi ke bentuk saya seperti:
<span><span><span><input</span> type<span>="text"</span> name<span>="transaction__credit_card__expiration_date"</span>></span></span>
<span><span><?php </span></span><span> <span>require('vendor/autoload.php'); </span></span><span> </span><span> <span>Braintree_Configuration<span>::</span>environment('sandbox'); </span></span><span> <span>Braintree_Configuration<span>::</span>merchantId('YOUR_MERCHANT_ID'); </span></span><span> <span>Braintree_Configuration<span>::</span>publicKey('YOUR_PUBLIC_KEY'); </span></span><span> <span>Braintree_Configuration<span>::</span>privateKey('YOUR_PRIVATE_KEY'); </span></span><span> </span><span> <span>?></span></span>
Apabila data berjaya diserahkan, salah satu daripada parameter tersebut akan menjadi http_status, dan jika semuanya berjalan lancar dengan pelayan Braintree, ia akan ditetapkan kepada 200. Tetapi buat masa ini kami hanya memastikan hanya melaksanakan kod di dalam ini jika pernyataan jika kami berjaya menyerahkan maklumat pembayaran kami kepada sistem mereka.
Perkara seterusnya yang berlaku ialah kita perlu mengambil rentetan pertanyaan dari pengalihan telus kami dan menghantarnya kembali ke Braintree untuk menyelesaikan transaksi. Oleh itu, kami menjalankan fungsi perpustakaan yang lain (Braintree_TransparentRedirect :: mengesahkan) dan memberikannya dengan rentetan pertanyaan URL kami, untuk memberitahu Braintree untuk meneruskan dan memproses pembayaran kami. Setelah itu berlaku, Braintree menghantar skrip kami kembali objek hasil. Secara dalaman, objek itu boleh menjadi braintree_result_error atau braintree_result_successful, tetapi kedua -dua objek mempunyai harta kejayaan Boolean supaya anda dapat melihat sama ada urus niaga itu berjaya atau tidak.
Anda juga mungkin menyedari bahawa saya membungkus keseluruhan pengesahan dalam blok percubaan/tangkapan. Satu kelemahan menggunakan halaman yang sama untuk memaparkan borang dan memproses hasilnya ialah anda hanya boleh mengesahkan rentetan pertanyaan TR sekali. Ini bermakna jika seseorang memukul butang tambah nilai selepas urus niaga yang gagal, kod anda akan cuba mengesahkan rentetan pertanyaan yang telah tamat tempoh, dan Braintree akan membuang pengecualian.
Sekarang kita mempunyai segala yang kita perlukan, kita dapat meneruskan dan menjalankan beberapa urus niaga ujian. Dokumentasi penuh menggunakan kotak pasir boleh didapati di sini, tetapi jika anda benar -benar teruja dan ingin menjalankan transaksi yang berjaya dengan segera, teruskan dan masukkan nama anda dalam "Nama pada Kad", 411111111111111 (4 diikuti oleh lima belas) Sebagai "nombor kad", 123 dalam kotak CVV, dan mana -mana tarikh di masa depan sebagai tarikh tamat tempoh. Jika semuanya berjalan lancar, anda sepatutnya dapat kembali ke kotak pasir, klik "Transaksi" di bawah "Carian Lanjutan", dan selepas mengklik butang "Carian", lihat transaksi pertama anda yang berjaya.
Mendapatkan mewah
Nama API adalah apa yang akan anda rujuk dalam atribut nama input bentuk. Nama paparan adalah untuk rujukan anda, dan anda boleh menentukan sama ada anda mahu menyimpan nilai medan tersuai anda pada Braintree dengan transaksi anda, atau hanya lulus kembali ke pelayan anda.
mengumpulkannya adalah hanya satu perkara yang menambahkan medan berikut ke borang anda.
Jika anda cuba melakukannya tanpa menambah medan tersuai dalam panel Kawalan Braintree, anda akan mencetuskan ralat pengesahan.
composer require braintree/braintree:*
Bercakap tentang pengesahan, TR boleh merumitkan pengesahan sisi pelayan borang pembayaran anda. Katakan saya mahu memerlukan alamat e -mel pelanggan saya. Saya tidak tahu bahawa pengguna telah meninggalkannya kosong sehingga selepas transaksi telah disahkan. Penyelesaian yang saya dapati adalah untuk menjalankan pengesahan saya di blok kejayaan skrip TR saya, dan kemudian membatalkan urus niaga jika pengesahan saya tidak lulus. Jadi itu akan mengubah kod kami seperti ini:
Seperti yang anda dapat lihat, jika pengesahan tempatan saya tidak lulus, saya menggunakan perpustakaan klien untuk membatalkan urus niaga, menggunakan ID transaksi dari objek Braintree_Result_Success.
<span><span><!doctype html></span> </span> <span><span><span><html</span> lang<span>="en"</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><div</span> id<span>="wrap"</span>></span> </span> <span><span><span><form</span> method<span>="post"</span> action<span>=""</span> autocomplete<span>="off"</span>></span> </span> <span><span><span><label</span>></span>Name on Card: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cardholder_name]"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>Card Number: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][number]"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>CVV: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cvv]"</span> class<span>="short"</span>></span><span><span></label</span>></span> </span> <span><span><span><label</span>></span>Expiration Date (MM/YYYY): <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][expiration_date]"</span> class<span>="short"</span>></span><span><span></label</span>></span> </span> <span><span><span><input</span> type<span>="submit"</span> value<span>="submit payment"</span>></span> </span> <span><span><span></form</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span></body</span>></span> </span> <span><span><span></html</span>></span></span>
Akhirnya, dalam contoh asas kami, saya tidak mengganggu bidang bentuk repopulating untuk pengguna, kerana semua bidang kami mengandungi data kad kredit sensitif yang Braintree menyembunyikan dari pelayan kami. Tetapi sekarang kami telah menambah beberapa data pelanggan, saya boleh menduduki medan yang kurang sensitif dengan data dari objek hasil Braintree. Anda dapat melihat kod penuh dalam sampel github saya, tetapi helah untuk memahami apa yang sedang berlaku adalah untuk mengetahui bahawa objek Braintree_Result_Success menyimpan data borang yang dikemukakan pengguna dalam harta transaksinya, sedangkan Braintree_Result_error menyimpannya dalam harta param. Jadi misalnya, pemboleh ubah nama pertama akan dijumpai dalam $ hasil-> transaksi-> pelanggan ['firstname'] apabila urus niaga berjaya, sementara transaksi yang gagal akan menyimpannya dalam $ hasil-> params ['transaksi'] [' Pelanggan '] [' FirstName '].
Pengalihan telus Braintree adalah salah satu cara untuk meminimumkan pendedahan aplikasi anda kepada data pelanggan yang sensitif, dengan itu mengurangkan beban pematuhan PCI anda, dan perpustakaan klien php mereka memudahkan proses integrasi, tetapi ia menjadikannya lebih sukar untuk mengumpul dan mengesahkan bukan Maklumat berkaitan pembayaran pada borang yang sama dengan maklumat kad kredit pelanggan anda.
Lain kali, kita akan melihat penyelesaian pintar mereka yang lain: Braintree.js.
Melaksanakan pengalihan telus memerlukan beberapa pengetahuan teknikal. Anda perlu mengintegrasikan laman web anda dengan API Pembayaran Gateway. Ini melibatkan penubuhan borang di laman web anda yang menyiarkan maklumat pembayaran pelanggan terus ke pintu masuk. Gateway kemudian memproses transaksi dan menghantar respons kembali ke laman web anda.
Atas ialah kandungan terperinci Pengalihan telus dengan Braintree. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!