Artikel sebelumnya telah memperoleh OpenID pengguna
Artikel ini terutama memanggil API tunggal terpadu untuk pembayaran publik WeChat
Alamat API: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
Melihat dokumen, proses utamanya adalah merangkum sekitar 20 parameter ke dalam format XML dan mengirimnya ke alamat antarmuka yang diberikan oleh WeChat, dan kemudian Anda bisa mendapatkan konten yang dikembalikan. pembayaran.
Parameter permintaan tidak akan dijelaskan.
Di antara mereka, string acak: Saya menggunakan UUID untuk menggambar garis tengah
string statis public create_nonce_str () {return uuid.randomuuid (). ToString (). REPLACE ("-", "");Nomor Pesanan Pedagang: Setiap nomor pesanan hanya dapat digunakan sekali, sehingga cap waktu yang ditambahkan ke nomor pesanan sistem digunakan.
Jumlah total: tidak mungkin
Alamat Pemberitahuan: Alamat panggilan balik ke sistem setelah pembayaran WeChat yang berhasil atau gagal
tanda:
Impor PayInfo kelas publik; String out_trade_no; Sistem Bizorder Nomor Pesanan Bisnis di * @param Alamat IP Pengguna IP * @param OpenID OpenID * @Return */ payInfo Publik CreatePayInfo (Bizorder Bizorder, String IP, String OpenID) {payInfo payInfo = payInfo baru (); Constants.Appid); Berikut adalah tubuh dari beberapa beras putih "); payInfo.setattach (bizorder.getId ()); payInfo.setout_trade_no (bizorder.getordercode (). Concat (" a "). Concat (dateFormatutils.for mat (tanggal baru () () , Mmddhhmmss ")); (OpenID);Dapatkan tanda tangannya:
/ ** * Dapatkan tanda tangan * @param payInfo * @return * @throws Exception */ Public String getSign (payInfo payInfo) melempar pengecualian {string SignTemp = "appid ="+payInfo.getappid ()+"& lampiran ="+payInfo. getattach () +"& body =" +payInfo.getBody () +"& device_info =" +payInfo.getDevice_info () +"& mch_id =" +payInfo.getMch_id () +"& nonc E_str =" +payInfo.getnonce_str () +" ¬ ify_url = "+payInfo.getNotify_url ()+" & openId = "+payInfo.getOpenId ()+" & out_trade_no = "+payInfo.getout_trade_no ()+" & spbill_ create_ip = "+payInfo.getspbill_crate_crate_krate_prate_prate_prate_prate_prate_prate ="+"+"+"+"+"+"+" payInfo. ); Catatan: Nilai konstanta di atas.
Beberapa Metode Alat: Dapatkan Alamat IP, Konversikan Array Byte ke String Hexadecimal, Konversi Byte menjadi Hexadecimal String
/ ** * Konversi array byte ke string hexadecimal * * @param bytearray * @return */ public static string bytetoStr (byte [] bytearray) {string strdigest = ""; ) {strdigest += bytetohexstr (bytearray [i]);} return strdigest; Digit = {'', '', '', '', '', '', '', '', '', '', '', ',' ',' ',' ',' '' , '', '', '', 'A', 'b', 'c', 'd', 'e', 'f'}; (bytes >>>) & xf]; */ string statis public getIpaddr (permintaan pencarian httpservletre) {inetaddress addr = null; (); ipaddrstr;} Dengan cara ini, tanda tangan diperoleh, dan tanda tangan dan data lain dalam payInfo dikonversi menjadi format XML, dan diteruskan ke alamat tunggal terpadu sebagai parameter.
PayInfo pi = pu.createPayInfo (bo, "...", "");
Objek ke xml
/** * Perpanjang xStream untuk mendukung cdata */private static xstream xStream = new xstream (xppdriver baru () {public hierarchicalStreamWriter createWriter (penulis keluar) {re turn New PrettyPrintWriter (out) {// tambahkan tag cdata boolean cdata = true; true; @SuppressWarnings ("RawTypes") public void startNode (nama string, class clazz) {super.startnode (name, clazz); <! [Cdata ["); writer.write (text); writer.write ("]> ");} else {writer.write (teks);}}};}}); string statis public payInfotoxml (public static payInfotoxml ( Payin fo pi) {xstream.alias ("xml", pi.getClass ());XML untuk memetakan
@SuppressWarnings ("Uncecked") Puber Statis Public <String, String> parsexml (String xml) melempar Exception {MAP <String, String> MAP = HashMap baru <ST Ring, String> (); ); } Berikut ini adalah URL untuk memanggil pesanan terpadu
log.info (messageutil.payinfotoxml (pi) .replace ("__", "_")); Pay/UnifiedOrder "," POST ", Messageutil.PayInfotoxMl (PI) .replace (" __ "," _ "). Ganti (" <! [CDATA ["," ") .replace ("]> "," ")); log.info (peta); peta statis public <string, string> httpsRequestToxMl (string requestUrl, string requestMethod, string outputStr) {peta <string, str ing> result = hashmap baru <> (); buffer = httpsRequest (requestUrl, requestMethod, outputstr); Catch (Exception e) {LOG.Error ("HTTPS Permintaan Pengecualian:"+ECE.GetMessage ()); Metode httpsRequest () ada di artikel pertama
Jika peta yang diperoleh di atas berhasil, akan ada
String return_code = map.get ("return_code"); if (stringutils.isnotblank (return_code) && return_code.equals ("Success")) {string return _msg = map.get ("return_msg"); return_msg) &&! Return_msg.equals ("OK")) {return "Unified Single Error!";Prepay_id ini adalah ID prabayar. Bayar nanti membutuhkannya.