Tanpa basa -basi lagi, lihat saja kodenya.
RequestHandler requestHandler = New RequestHandler (super.getRequest (), super.getResponse ()); // Dapatkan token // valid dalam dua jam, dan kembali token setelah dua jam = requestHandler.getToken (); // Perbarui token ke aplikasi requestHandler.getTokenReal (); System.out.println ("WeChat Pay Get Token ============================:" +token); // RequestHandler menginisialisasi requestHandler.init (); requestHandler.init (appid, appsecret, appkey, mitra, kunci); Kode: Sistem lokal menghasilkan pesanan
// atur parameter pesanan paket sortedmap <string, string> packageParams = new treemap <string, string> (); packageParams.put ("bank_type", "wx"); // jenis pembayaran packageParams.put ("body", "xxxx"); // Deskripsi Produk PackageParams.put ("feed_type", "1"); // Bank Currency PackageParams.put ("input_charset", "UTF-8"); // Set karakter packageParams.put ("notify_url", "http://xxxx.com/xxxx/wxcallback"); // Alamat pemberitahuan di sini diuji menggunakan alamat jaringan eksternal, dan perhatikan apakah port 80 terbuka. packageParams.put ("out_trade_no", tidak); // nomor pesanan pedagang packageParams.put ("mitra", mitra); // atur nomor pedagang packageParams.put ("spbill_create_ip", super.getRequest (). GetRemotehost ()); // IP Mesin yang dihasilkan oleh pesanan mengacu pada browser IP packageParams.put ("total_fee", string.valueof (rstotal)); // Jumlah total produk dibagi menjadi unit // atur parameter pembayaran sortedmap <string, string> Signparams = new TreeMap <string, string> (); Signparams.put ("appid", appid); Signparams.put ("noncestr", noncestr); Signparams.put ("TraceId", PropertiesUtils.getorderNo ()); Signparams.put ("Timestamp", Timestamp); Signparams.put ("Paket", PackageValue); Signparams.put ("appkey", this.appkey); // Untuk menghasilkan tanda tangan pembayaran, nilai asli urlencoder harus digunakan untuk algoritma SHA1! String Sign = ""; coba {Sign = sha1util.createsha1Sign (SignParams); } catch (Exception e) {E.PrintStackTrace (); } // Tambahkan parameter tambahan untuk tanda tangan yang tidak berpartisipasi ke SignParams.put ("Sign_method", "sha1"); Signparams.put ("App_Signature", tanda); // Api payment package ends --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- :" + prepayid); Kode: menghasilkan penyelesaian pesanan cepat prabayar
// Hasilkan pesanan cepat prabayar untuk menyelesaikan, kembali ke Android, iOS dan lepas parameter yang diperlukan untuk WeChat. Sortedmap <string, string> payparams = new treemap <string, string> (); payparams.put ("appid", appid); payparams.put ("noncestr", noncestr); payparams.put ("paket", "tanda = wxpay"); payparams.put ("mitra", mitra); payparams.put ("prepayid", persiapkan); payparams.put ("appkey", this.appkey); // Perbedaannya di sini adalah 1000 karena batas panjang parameter. int time = (int) (System.CurrentTimeMillis () / 1000); payparams.put ("timestamp", string.valueof (waktu)); System.out.println ("Timestamp:" + Time); // string tanda tangan paySign = ""; coba {paySign = sha1util.createsha1sign (payparams); } catch (Exception e) {E.PrintStackTrace (); } payparams.put ("tanda", paySign); // Data spoof JSON dikembalikan ke klien BASICDBObject backObject = new BasicDbObject (); backObject.put ("appid", appID); backObject.put ("noncestr", payparams.get ("noncestr")); backObject.put ("package", "Sign = wxpay"); backObject.put ("mitra", payparams.get ("mitraId")); backObject.put ("prepayid", payparams.get ("prepayid")); backObject.put ("appkey", this.appkey); backObject.put ("timestamp", payparams.get ("timestamp")); backObject.put ("tanda", payparams.get ("tanda")); String backstr = dataObject.toString (); System.out.println ("backstr:" + backstr); kembali backstr; Sejauh ini, pesanan prabayar telah dihasilkan dan telah dikembalikan ke klien, menunggu server WeChat untuk memberi tahu. Alamat pemberitahuan adalah notify_url yang menghasilkan pesanan prabayar.
ResponseHandler reshandler = New ResponseHandler (permintaan, respons); reshandler.setkey (mitra); // Buat Objek Permintaan // QueryREQ EquailtHandler = new RequestHandler (Request, Response); //queryreq.init (); if (reshandler.istenpaysign () == true) {// nomor pesanan pedagang string out_trade_no = reshandler.getParameter ("out_trade_no"); System.out.println ("out_trade_no:" + out_trade_no); // TenPay Order Number String Transaction_ID = reshandler.getParameter ("transaction_id"); System.out.println ("Transaction_id:" + transaction_id); // jumlah, dalam satuan string divisi total_fee = reshandler.getParameter ("total_fee"); // Jika kupon diskon digunakan, diskon memiliki nilai, total_fee+diskon = Total_fee string diskon yang diminta = reshandler.getParameter ("Diskon"); // Hasil pembayaran string trade_state = reshandler.getParameter ("trade_state"); // menilai tanda tangan dan hasil jika ("0" .Equals (trade_state)) { // ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Kirim pesan yang berhasil ke sistem TenPay. Sistem TenPay tidak akan lagi memberikan pemberitahuan selanjutnya setelah menerima hasil ini Reshandler.sendtocft ("Sukses"); // mengembalikan kesuksesan ke server wechat sebaliknya 8 pemberitahuan dalam 30 menit pengembalian "kesuksesan"; } else {System.out.println ("Beri tahu verifikasi tanda tangan gagal"); reshandler.sendtocft ("gagal"); response.setcharacterencoding ("UTF-8"); }} else {System.out.println ("Gagal -Md5 Gagal"); }Di atas adalah kode yang diimplementasikan Java server pembayaran WeChat. Saya berharap semua orang akan mempelajarinya dengan cermat untuk mewujudkan pembayaran WeChat.