1. Ikhtisar Pembayaran Online
Apa itu pembayaran online? Itu benar, itu hanya menghabiskan uang secara online! Setiap orang pasti memiliki pengalaman seperti itu. Tetapi Anda mungkin tidak tahu banyak tentang "cerita dalam" pembayaran online, mari kita pelajari tentangnya di bawah ini!
Jika Anda mulai menjalankan situs web e-commerce sekarang, pengguna harus membayar jika mereka membeli sesuatu. Situs web Anda harus dapat terhubung ke bank -bank besar. Kemudian, setelah pembayaran selesai, kembali ke situs web Anda untuk menampilkan "Sukses Pembayaran"!
Inilah yang akan kami lakukan hari ini, terhubung ke sistem perbankan online bank untuk menyelesaikan pembayaran. Untuk menjadi lebih profesional, kami menyebutnya "mengembangkan gateway untuk pembayaran online"
2. Dua cara untuk membayar online
Ada dua cara untuk membayar online:
*E-commerce terhubung langsung dengan bank
*E-commerce terhubung dengan bank melalui platform pembayaran pihak ketiga
E-commerce terhubung langsung dengan bank, yang mensyaratkan persetujuan bank, tetapi sayangnya, bank sangat "luar biasa" dan bukan siapa pun yang ingin terhubung dengan mereka. Jika bisnis e-commerce Anda memiliki aliran modal harian yang besar, bank akan terhubung dengan Anda karena semua uang yang dibayarkan oleh pelanggan ke e-commerce disetor ke rekening bank! Tetapi jika aliran modal kecil, bank tidak akan memperhatikan Anda!
Ketika situs web kecil tidak mencukupi dalam dana dan tidak dapat terhubung dengan bank, mereka akan memilih untuk bekerja sama dengan perusahaan pembayaran pihak ketiga. Setiap orang juga memahami perusahaan apa ini, seperti Alipay, Yibao, Fortune, Kuaiqian dan perusahaan lain relatif terkenal di Cina. Perusahaan-perusahaan ini dapat terhubung dengan bank (karena mereka memiliki cukup dana), dan kemudian perusahaan e-commerce kecil dapat terhubung dengan mereka! Tapi pihak ketiga membutuhkan biaya! Pihak ketiga umumnya membebankan 1% dari biaya e-commerce, tetapi mereka tidak akan membebankan uang kepada pelanggan.
Melalui gambar di atas, Anda dapat mengetahui bahwa nama mal, nomor pesanan RMB, dan waktu pemesanan akan ditampilkan di halaman bank. . . , Bagaimana bank tahu tentang hal -hal ini? Tentu saja, diteruskan ke bank oleh e-commerce. Setelah perusahaan e-commerce terhubung dengan bank, perusahaan e-commerce perlu melewati parameter yang disyaratkan oleh halaman bank ke halaman bank, sehingga halaman bank dapat menampilkan data ini!
Namun, mal kami tidak hanya tidak terhubung ke satu bank! Kita harus terhubung dengan empat perusahaan BOC, CCB, ABC dan ICBC! Parameter docking yang diperlukan oleh bank yang berbeda berbeda, yang berarti bahwa kita perlu menulis kode docking yang berbeda untuk bank yang berbeda selama pengembangan. Ini juga kerugian dari terhubung langsung dengan bank! Tentu saja, hubungan langsung dengan bank juga bermanfaat, yaitu, keamanan tidak diperlukan, tidak ada biaya penanganan!
Mengembangkan kode yang berbeda untuk bank yang berbeda (kerugian);
Keselamatan (keunggulan);
Tidak ada biaya penanganan (keunggulan);
Bank e-commerce kecil tidak mengizinkan koneksi (kerugian).
Seperti yang ditunjukkan pada gambar di atas, setelah pelanggan mengklik untuk mengkonfirmasi pembayaran di situs web e-commerce, ia akan diarahkan ke situs web pihak ketiga, dan kemudian pihak ketiga akan terhubung dengan bank. Ini menunjukkan bahwa e-commerce perlu meneruskan parameter ke pihak ketiga! Pihak ketiga kemudian menyerahkan parameter ke bank. Keuntungan dari metode ini adalah bahwa ia hanya perlu dikembangkan untuk pihak ketiga tanpa memberikan parameter untuk masing -masing bank. Ini adalah tugas pihak ketiga untuk memberikan parameter untuk setiap bank. Namun, jika pihak ketiga tidak tua dan dapat diandalkan, jika pihak ketiga bangkrut dan orang -orang melarikan diri, maka uang Anda akan hilang. Karena uang yang dibayarkan oleh pelanggan tidak pergi ke rekening bank Anda, itu dibayarkan ke rekening bank pihak ketiga, dan Anda memiliki rekening pada pihak ketiga. Selain itu, pihak ketiga juga membebankan biaya penanganan, biasanya 1%, yang bukan sejumlah kecil (sangat buruk).
3. Melalui aturan pembayaran online pihak ketiga
Jika e-commerce ingin mendaftarkan pedagang dengan pihak ketiga, ia perlu memberikan sertifikasi ICP kepada pihak ketiga. Lisensi Bisnis ICP adalah lisensi bisnis situs web yang harus diproses oleh situs web bisnis sesuai dengan "langkah -langkah manajemen internet" nasional. Jika tidak, itu ilegal untuk beroperasi.
Kami tidak dapat melamar ICP hanya karena latihan! Jadi kami tidak dapat mendaftarkan pedagang dengan pihak ketiga. Namun, kami sudah memiliki pedagang siap pakai yang terdaftar di Yibao, jadi langkah ini dapat diabaikan.
Ketika Anda berhasil mendaftar dengan Yibao, Yibao akan memberi Anda hal -hal berikut:
Buka akun di Yibao (mis. Kode Pedagang): 10001126856
SPESIFIKASI AKSES YIBAO: Kelas Algoritma Enkripsi Simetris File CHM: Paymentutil.java
Kunci: 69Cl522AV6Q613II4W6U8K6XUW8VM1N6BFGYV769220IUYE9U37N4Y7RI4PL
Dalam spesifikasi akses YIBAO, kita dapat menemukan gateway pembayaran Yibao, yang sebenarnya adalah URL, URL yang digunakan untuk terhubung dengan YIBAO: https://www.yeepay.com/app-merchant-proxy/node
Dalam spesifikasi akses YIBAO, Anda juga dapat menemukan parameter yang diperlukan oleh YIBAO. Ketika e-commerce terhubung dengan YIBAO, parameter ini perlu diteruskan ke gateway pembayaran:
Alamat Permintaan Resmi: https://www.yeepay.com/app-merchant-proxy/node
Parameter ini perlu ditambahkan ke URL.
Namun, ketahuilah bahwa nilai -nilai parameter ini perlu dienkripsi. Baik kunci enkripsi dan algoritma enkripsi yang akan disediakan Yibao!
di mana P8_URL menunjukkan halaman mana yang akan dikembalikan ketika pembayaran berhasil. Ini berarti kita perlu menulis halaman yang menampilkan hasilnya. Setelah pembayaran berhasil, pihak ketiga akan mengarahkan kembali ke halaman pengembalian yang kami tentukan, dan juga akan memberi kami beberapa parameter. Halaman kami perlu mendapatkan parameter ini dan menampilkannya di halaman. Berikut ini adalah parameter yang dikembalikan oleh pihak ketiga:
4. Kembangkan sistem pembayaran online pihak ketiga
melangkah:
index.jsp halaman: Formulir yang dikirimkan ke BuyServlet. Item formulir meliputi: nomor pesanan, jumlah pembayaran, pemilihan bank
BuyServlet: Dapatkan data formulir dan bersiaplah untuk terhubung ke gateway pihak ketiga. Karena hanya 3 parameter yang diberikan di halaman index.jsp, dan ada banyak parameter yang diperlukan oleh pihak ketiga, parameter yang tidak diberikan oleh halaman ditambah dengan Buyservlet. Dan parameter juga perlu dienkripsi, yang juga perlu diselesaikan di Buyservlet
Backservlet: Ketika pengguna membayar dengan sukses, pihak ketiga akan mengarahkan kembali ke halaman pengembalian yang kami tentukan. Kami menggunakan BackserVlet sebagai halaman pengembalian, yang digunakan untuk menerima parameter yang dilewati oleh pihak ketiga dan menampilkannya di halaman.
Karena kami sudah memiliki bisnis terdaftar di Yibao, kami tidak perlu mendaftarkan bisnis sendiri. Jadi di sini adalah menggunakan Yibao sebagai platform pembayaran pihak ketiga untuk pengujian. Karena saya tidak memiliki e-commerce (e-commerce yang harus melewati sertifikasi ICP), saya juga tidak dapat mendaftarkan bisnis dengan pihak ketiga.
Bisnis Yibao yang kami gunakan sekarang disediakan oleh Chuanzhi Podcast, sebuah bisnis yang terdaftar oleh Baba Sports Network di Yibao. Jadi uang yang dibayarkan selama tes diberikan kepada perusahaan yang terdaftar oleh Baba Sports Network di Yibao.
Langkah 1: Index.jsp
<Form Action = "" Method = "Post"> Nomor pesanan: <input type = "text" name = "p2_order"/> <br/> Jumlah: <input type = "text" name = "p3_amt"/<br/> pilih bank: <input type = "Radio" name = "PD_FRPID" value = "icbc-net-b2 SRC = "Bank_IMG/ICBC.BMP" Align = "Middle"/> <input type = "Radio" name = "pd_frpid" value = "boc-net-b2c"/> Bank of china <img src = "bank_img/icbc.bmp" align = "middle"/<padio = "radio =" radio = "radio =" radio = "radio =" Radio = "Radio =" Radio = "Radio =" Radio = "Radio =" Radio "," value = "boc-net-b2c"/> bank of china <img src = "bank_img/bc.bmp" align = "middle"/> <br/> <input type = "radio" name = "PD_FRPID" Nilai = "ABC-NET-B2C"/> Bank Agricultural of China <IMG SRC = "ABC-NET-B2C"/> Bank Agricultural of China <IMG SRC = "Bank =" Bank = "Bank =" Bank = "ABC-B2C"/> APRICULTURAL BANK OF IMG <IMG SRC = "ABC-NET-B2C"/> type = "Radio" name = "pd_frpid" value = "ccb-net-b2c"/> Bank konstruksi <img src = "bank_img/ccb.bmp" align = "tengah"/> <br/> <input type = "radio" nama = "PD_FRPID" Nilai = "Boco-B2C" SRC = "Bank_IMG/BCC.BMP" Align = "Middle"/> <br/> <input type = "kirim" value = "konfirmasi pembayaran"/> </form>
Nilai yang sesuai dari setiap bank:
Langkah 2: Buyservlet.java
Buyservlet kelas publik memperluas httpservlet {public void dopost (httpservletRequest, respons httpservletresponse) melempar servletException, ioException {request.setcharacterencoding ("UTF-8"); response.setContentType ("Teks/html; charset = utf-8"); String p0_cmd = "buy"; // tipe bisnis, nilai tetap adalah buy, yaitu, "beli" string p1_merid = "10001126856"; // nama bisnis string p2_order = request.getParameter ("p2_order"); // nomor pesanan p3_amt = request.getParameter ("p3_order"); nomor p3_amt = p3_amt = getparameter ("p3_amer =" p3_am ("p3_am (" p3_am ("p3_am (" p3_am); "CNY"; // Mata uang transaksi, nilai tetap adalah CNY, menunjukkan string rmb p5_pid = ""; // nama produk string p6_pcat = ""; // string nama produk p7_pdesc = ""; // deskripsi produk p8_url = "http: // localhost: 8080/back/backser =" http: // localhost: 8080/back/backserver "; "http: // localhost: 8080/buy/backservlet"; // halaman pengembalian e-commerce, ketika pembayaran berhasil, yibao akan mengarahkan ke halaman ini string p9_saf = ""; // alamat pengiriman pa_mp = ""; // Informasi ekstensi produk string PD_FRPID = get, "getprepid. String pr_needResponse = "1"; // mekanisme respons, nilai tetap adalah 1 // kunci, disediakan oleh yibao, hanya pedagang dan yibao yang tahu kunci ini. String keyvalue = "69cl522av6q613ii4w6u8k6xuw8vm1n6bfgyv769220iuye9u37n4y7ri4pl"; // Melalui parameter, kunci, dan algoritma enkripsi di atas, nilai HMAC dihasilkan // Urutan parameter diperlukan. Jika tidak ada nilai, nol tidak dapat diberikan, tetapi string kosong harus diberikan. String hmac = paymentutil.buildhmac (p0_cmd, p1_merid, p2_order, p3_amt, p4_cur, p5_pid, p6_pcat, p7_pdesc, p8_url, p9_saf, pa_mp, pd_frpid, pr_needs // Hubungkan semua parameter ke gateway alamat string url = "https://www.yeepay.com/app-merchant-proxy/node"; url + = "? p0_cmd =" + p0_cmd + "& p1_merid =" + p1_merid + "& p2_order =" + p2_order + "& p3_amt =" + p3_amt + "& p4_cur =" + P4_CUR + "& P5_PID =" p7_pdesc = " + p7_pdesc +" & p8_url = " + p8_url =" + p8_url + "& p9_saf =" + p9_saf + "& pa_mp =" + pa_mp + "& pd_ress =" & pa_mp = " + pa_mp +" & pd_frp = "& pdever =" + pa_pfr. " + pr_needResponse + "& hmac =" + hmac; System.out.println (URL); // redirect ke gateway response.sendredirect (url); }}Langkah 3: Backservlet
BackserVlet kelas publik memperluas httpservlet {public void doGet (httpservletRequest, respons httpservletResponse) melempar servletException, ioException {response.setContentType ("Teks/html; charset = utf-8"); / * * YIBAO akan memberikan serangkaian parameter hasil, kita bisa mendapatkan apa yang kita butuhkan di dalamnya * Dapatkan hasil pembayaran: R1_Code, 1 berarti pembayaran berhasil. * Dapatkan Jumlah Pembayaran: R3_AMT * Dapatkan E-Commerce Nomor Pesanan: R6_Order * Dapatkan Jenis Pengembalian Hasil: R9_BType, 1 berarti pengembalian pengalihan, 2 berarti pengembalian poin-ke-titik, * tetapi kami tidak dapat menerima point-to-point, karena IPS kami adalah IPS LAN. */ String r1_code = request.getParameter ("r1_code"); String r3_amt = request.getParameter ("r3_amt"); String r6_order = request.getParameter ("r6_order"); String r9_btype = request.getParameter ("r9_btype"); if (r1_code.equals ("1")) {if (r9_btype.equals ("1")) {response.getWriter (). print ("<H1> Bayar dengan sukses! </h1>"); // Faktanya, ketika pembayaran tidak ada. " "<br/>"); response.getWriter (). print ("Nomor pesanan adalah:" + r6_order + "<br/>"); }}}}Alat untuk mendapatkan HMAC yang disediakan oleh pembayaran YIBAO
Public Class Paymentutil {Private Static String encodingCharset = "UTF-8"; /*** Hasilkan metode HMAC** @param p0_cmd Jenis bisnis* @param p1_merid Nomor pedagang* @param p2_order Nomor pesanan pedagang* @param p3_amt Jumlah produk* @param p6_pcur evelsion* P5_pid Name Produk* @param p6_pcur *ppare *ppare *ppare *pparpese *parpese name produk* @param p6_pcat @param @param* @param p6_pcur the merchant receiving payment success data* @param p9_SAF Delivery address* @param pa_MP Merchant extension information* @param pd_FrpId Bank code* @param pr_NeedResponse response mechanism* @param keyValue Merchant key* @return */ public static String buildHmac(String p0_Cmd,String p1_MerId, String p2_Order, String p3_Amt, String p4_cur, string p5_pid, string p6_pcat, string p7_pdesc, string p8_url, string p9_saf, string pa_mp, string pd_frpid, string pr_needResponse, string keyValue) {stringBuilder svalue = new baru (); // jenis bisnis svalue.append (p0_cmd); // nomor pedagang svalue.append (p1_merid); // nomor pesanan pedagang svalue.append (p2_order); // jumlah pembayaran svalue.append (p3_amt); // Mata Uang Perdagangan SValue.Append (P4_CUR); // nama produk svalue.append (p5_pid); // Jenis Produk SValue.Append (P6_PCAT); // Deskripsi Produk SValue.Append (p7_pdesc); // alamat pedagang yang menerima data keberhasilan pembayaran svalue.append (p8_url); // alamat pengiriman svalue.append (p9_saf); // informasi ekstensi pedagang svalue.append (pa_mp); // kode bank svalue.append (PD_FRPID); // mekanisme respons svalue.append (pr_needResponse); pengembalian pembayaran. } /*** Kembali ke Verifikasi Metode HMAC** @param HMAC Kode Verifikasi Dienkripsi Dikirim oleh Gateway Pembayaran* @param P1_Merid Nomor Pedagang* @param R0_CMD Jenis Bisnis* @param r1_code Hasil pembayaran* @param r2_trxid yibao nomor transaksi pembayaran* @paraction @param r3 @param r3 @param r3 @param* r5_Pid Product name* @param r6_Order Merchant order number* @param r7_Uid Yibao Payment member ID * @param r8_MP Merchant extension information* @param r9_BType Transaction result return type* @param keyValue key* @return */ public static boolean verifyCallback(String hmac, String p1_MerId, String r0_Cmd, String r1_Code, String r2_trxid, string r3_amt, string r4_cur, string r5_pid, string r6_order, string r7_uid, string r8_mp, string r9_btype, string keyValue) {stringBuilder svalue = stringBuilder baru (); // nomor pedagang svalue.append (p1_merid); // jenis bisnis svalue.append (r0_cmd); // hasil pembayaran svalue.append (r1_code); // yibao nomor transaksi pembayaran svalue.append (r2_trxid); // jumlah pembayaran svalue.append (r3_amt); // mata uang transaksi svalue.append (r4_cur); // nama produk svalue.append (r5_pid); // nomor pesanan pedagang svalue.append (r6_order); // ID Anggota Pembayaran YIBAO SValue.Append (R7_UID); // informasi ekstensi pedagang svalue.append (r8_mp); // Hasil Transaksi Tipe Pengembalian SValue.Append (R9_Btype); String snewstring = paymentutil.hmacsign (svalue.tostring (), keyValue); return SnewString.Equals (HMAC); } / ** * @param avalue * @param akey * @return * / public static string hmacsign (string avalue, string akey) {byte k_ipad [] = byte baru [64]; byte k_opad [] = byte baru [64]; byte keyb []; nilai byte []; coba {keyb = akey.getbytes (encodingcharset); value = avalue.getBytes (encodingCharset); } catch (UnsupportedEncodingException e) {keyb = akey.getbytes (); nilai = avalue.getbytes (); } Arrays.fill (k_ipad, keyb.length, 64, (byte) 54); Arrays.fill (k_opad, keyb.length, 64, (byte) 92); untuk (int i = 0; i <keyb.length; i ++) {k_ipad [i] = (byte) (keyb [i] ^ 0x36); k_opad [i] = (byte) (keyb [i] ^ 0x5c); } MessageScageTest md = null; coba {md = messageSmentIgest.getInstance ("md5"); } catch (nosuchalgorithmException e) {return null; } md.update (k_ipad); md.update (nilai); byte dg [] = md.digest (); md.reset (); md.update (k_opad); md.update (dg, 0, 16); dg = md.digest (); Kembalikan Tohex (DG); } public static string tohex (input byte []) {if (input == null) return null; StringBuffer output = stringBuffer baru (input.length * 2); untuk (int i = 0; i <input.length; i ++) {int arus = input [i] & 0xff; if (arus <16) output.Append ("0"); output.append (integer.tostring (saat ini, 16)); } return output.toString (); } / ** * * @param args * @param Key * @return * / public static String getHmac (string [] args, tombol string) {if (args == null || args.length == 0) {return (null); } StringBuffer str = new StringBuffer (); untuk (int i = 0; i <args.length; i ++) {str.Append (args [i]); } return (hmacsign (str.toString (), key)); } / ** * @param avalue * @return * / public static string digest (string avalue) {avalue = avalue.trim (); nilai byte []; coba {value = avalue.getbytes (encodingcharset); } catch (UnsupportedEncodingException e) {value = avalue.getbytes (); } MessageScageTest md = null; Coba {md = messageDigest.getInstance ("sha"); } catch (nosuchalgorithMexception e) {e.printstacktrace (); kembali nol; } return tohex (md.digest (value)); } // public static void main (string [] args) {// System.out.println (HMACSIGN ("Annulcard1000043252120080620160450.0http: //localhost/szxpro/callback.asp 海? 4 564868265473632445648682654736324511 "," 8upp0ke8sq73zvp370vko7c39403rtk1ywx40td6irh216036h27eb12792t ")) (/// }}Callback Yibao
Peer-to-Peer: Yibao secara langsung mengakses e-commerce, tidak ada klien di sini.
Metode ini harus digunakan, dan kami tidak dapat menerimanya dengan cara ini! Karena kami tidak memiliki IP tetap
Yibao memiliki mekanisme pengiriman kembali. Jika itu mengunjungi Anda dan Anda tidak mengirimkannya kembali pesannya, itu akan terus ditarik kembali!
E-commerce perlu mengembalikan string yang dimulai dengan kesuksesan!
Bimbing browser klien untuk mengarahkan kembali ke e-commerce. Ini untuk membiarkan klien mengakses e-commerce!
Tidak bisa digunakan!
HMAC: 13 Nilai Parameter + KeyValue (Key) + Algoritma (MD5)
13 Nilai Parameter: Ditetapkan sendiri!
KeyValue: Yang Yibao dikirimkan kepada kami setelah kami mendaftar, hanya kami dan Yibao yang tahu tentang hal ini!
Algoritma dengan MD5 yang mendasarinya: Paymentutil.buildhmac (14), yang mengembalikan HMAC
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.