Baru -baru ini, pengembangan pembayaran akun publik WeChat telah dieksplorasi selama beberapa hari karena telah dilakukan untuk pertama kalinya, dan hanya mencapai tingkat fungsi implementasi
Pembayaran keseluruhan akun publik WeChat sebenarnya sangat sederhana, dan secara kasar dibagi menjadi tiga langkah. Langkah pertama perlu diperoleh dengan otorisasi pengguna; Berikut ini memperkenalkan proses pengembangan setiap langkah.
Pertama -tama, perlu untuk mengklarifikasi bahwa pembayaran akun publik WeChat adalah pembayaran versi web, jadi perlu untuk satu langkah lebih banyak otorisasi WeChat daripada aplikasi yang langsung diambil dari pembayaran WeChat. Artinya, Anda perlu mendapatkan OpenID pengguna. Jenis transaksi yang digunakan oleh akun publik WeChat adalah JSAPI, jadi dokumen antarmuka pesanan terpadu ditulis dengan jelas
Karena itu, kita harus mendapatkan OpenID, dan pada saat yang sama kita bisa menangani beberapa logika yang kita butuhkan. Ada dua cara untuk mendapatkan otorisasi pengguna: 1.scope = snsapi_base;
Lingkup adalah snsapi_base
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&rdirect_uri=http%2Fchong.qq.com 26cphp%2Findex Judul% 3D1%26VB2CTAG%3D4_2030_5_1194_60 & response_type = kode & cakupan = snsapi_base & state = 123#weChat_redirect
Lingkup adalah snsapi_userinfo
https/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http% & stateponpi.blueWebgame # State#wechat_redirect
Dokumen resmi WeChat juga memiliki penjelasan terperinci tentang setiap parameter, dan saya akan dengan hati -hati menjelaskan parameter utama. Pertama -tama, appid tidak banyak untuk mengatakan bahwa appid dari akun publik WeChat Anda ditetapkan sampai mati. Anda dapat menjahit parameter yang Anda butuhkan pada tautan ini. Parameter negara dapat dipahami sebagai bidang yang diperluas. Berikut ini adalah klip kode OpenID.
// Dapatkan OpenID httpclientutil util = httpclientutil.getInstance (); , Wxpayconfig.appsecret); /Sns/oauth2/access_token ", null, peta); logger.info (" returnstr: [" + returnstr +"] "); AccessStoken at = json.parseObject (returnstr, accessstoken.c lass);AccessToken.java
Public AccessStoken {Private String Access_Token; Return Expires_in;} public void setExpires_in (string Expires_in) {this.expires_in = Expires_in public getRefresh_token () {return refresh_token;} public setRefresh_token (string refresh_token) {this.refresher_teKen = refresh; OpenId;} public void setopenId (String openId) {this.openid = openId;} public string e () {return scope;} public void setscope (string scope) {this.scope = scope;} public string getunionId () {return UnionID;} public void setUlionID (String UnionID) {this.unionId = UnionID; OpenId = " + OpenId +", SCOPE = " + SCOPE +", UnionId = " + UnionId +"] "]"] "Kedua, setelah kami memperoleh OpenID, kami dapat melakukan penempatan pesanan terpadu berikutnya. Dokumen antarmuka tunggal di WeChat lebih rinci, dan saya tidak akan memperkenalkan makna parameter spesifik. Kode paling intuitif diposting di bawah ini, terutama mengingatkan bahwa Anda harus memperhatikan tanda tangan yang benar. Kunci yang digunakan dalam tanda tangan bukanlah appsecret tetapi kunci pedagang yang Anda tentukan saat Anda melamar.
// Seragam Data WXPaysEndData = WXPaysEndData baru (); ; IP); alias ("xml", wxpayreturndata.class);UnifiedorderService.java
Kelas Publik UnifiedOrderService {Private Final Static Logger = LoggerFactory.GetLogger (UnifiedornderService.class); Object, Parameters = TREEMAP BARU <Object, Object> (); ; .getout_trade_no ()); ", Data.getopenid ()); parameter.put (" device_info ", d lah.getdevice_info ()); logger.info (" tanda: "+wxsign.createSign (parameter, kunci)); F-8", baru XMLFriendlyNamecoder ("- _", "_")); xml); " + Returnxml);} catch (Exception e) {e.printstacktrace ();} return returnxml;}}}}}}}}}Wxsign
Public Class WXSign {Private Static String CharacterEncoding = "UTF-8"; Parameter.entryset (); // semua parameter yang berpartisipasi dalam parameter diurutkan menurut akun (promotor) iterator itu = es.iterator (); itu. {sb.append (k + "=" + v + "&");}} sb.append ("key =" + key); ); {Return string.valueof (System.CurrentTTimeMillis () / 1000);}}Hal terakhir yang disebutkan adalah alamat panggilan balik notify_url untuk menerima alamat panggilan balik pemberitahuan asinkron weChat.
Kami telah memperoleh persiapan persiapan transaksi pra -pembayaran, sehingga kami dapat melakukan operasi langkah terakhir. Gunakan H5 untuk menyesuaikan API pembayaran.
// H5 Turn Up pembayaran attr.addattribute ("appId", redata.getappid ()); ); ; ); ", wxSign.createSign (SignMap, wxpayconfig.key));Setelah meneruskan parameter yang diperlukan ke halaman, gunakan WeChat untuk memberikan metode untuk mengatur pembayaran.
<script> function getUrlparam (name) {// Bangun objek ekspresi reguler yang berisi parameter target var reg = regexp baru ("(^| &)" + name + "= ([^&]*) (& | $))) "); // Cocokkan parameter target var r = window.location.search.substr (1) .match (reg); // mengembalikan nilai parameter jika (r! = null) mengembalikan unescape (r [2]); null;} function onbridgeready () {var appid = getUrlparam ('appid'); 'SignType'); var paySign = getUrlparam ('paySign'); Timestamp, // "1395712654", // Timelia, jumlah kedua detik sejak 1970 "noncestr": noncestr, // "e61463f8efa94090b1f366cccfbb444", // paket acak "Paket" ge, // "prepcfbbb444" ": SignType, //" Md5 ", // Metode Tanda Tangan WeChat:" PaySign ": PaySign, //" 70EA570631E4BB79628FBCA905343FFADD89 "" // WeChat Signature}, Fungsi (res) {// Gunakan Metode di atas untuk menghakimi ujung depan The Front the The Front end {res) {// menggunakan Metode di atas untuk menilai ke depan untuk menghakimi ujung depan {res) Kembali, tim WeChat dengan sungguh -sungguh mengingatkan: res.err_msg akan kembali ke OK setelah pengguna membayar dengan sukses, tetapi tidak menjamin bahwa itu benar -benar dapat diandalkan. get_brand_wcpay_request: cancel ") {alert (" cancellation transaction ");} if (res.err_msg ==" get_wcpay_request: fail ") lert (" kegagalan pembayaran ");});} function callpay () {if if (typyefsinjs"); == "underfined") {if (document.addeventristener) {document.addeventListener ('wei xinjsbridgeready', onbridgeready, false);} lain jika (dokumen .atachevent) {document.attachevent ('weixinjsbridgereidy', onbridgere. lampiran ('onweixinjsbridgeready', onbridgeready);}} else {onbridgeready ();}} </ptript>Anda dapat menyesuaikan halaman pengembalian Anda sendiri tempat Anda mengembalikan hasilnya.
Ringkasan: Karena saya juga melakukannya untuk pertama kalinya, menulis artikel ini adalah untuk merekam hasil kerja saya, dan teman -teman yang berbagi dengan pemula dapat memiliki bantuan kemajuan.
Di atas adalah semua isi dari pengembangan pembayaran publik WeChat.