Artikel ini membagikan informasi yang relevan tentang pembayaran JSAPI + pesan templat pengiriman untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
1. Alat
Lihat Kategori Alat: WeChat Pay Versi Java dari Pembayaran Asli
2. Pengaturan Akun Publik
3. Implementasi Kode
OpenID: OpenID adalah indikasi unik antara pengguna dan akun publik. Kelas -kelas berikut melibatkan pembuatan token, panggilan antarmuka pesanan penutupan, mendapatkan informasi file konfigurasi, dan kelas alat. Ada implementasi kode khusus di artikel lain.
Paket com.zhrd.bussinss.platform.controller.rest; import java.io.file; impor java.io.fileInputStream; impor java.io.inputStream; impor java. java.util.hashmap; import java.util.list; import java.util.map; import javax.net.ssl.sslcontext; impor javax.servlet.http.htpservletrequest; impor javax.servlet.http.htpservletRequest; org.apache.http.httpentity; impor org.apache.http.client.methods.closeableHttpresponse; impor org.apache.http.client.methods.htpppost; impor org.apache.http.conn.sl.sl.ssonspospost; org.apache.http.conn.ssl.sslcontexts; impor org.apache.http.entity.stringentity; impor org.apache.http.impl.client.closieHtpClient; import org.apache.htp.impl.client.htpClient; impor; http.impl.client.htpClient; org.apache.htp.impl.client.htpClient; Impor; org.apache.http.util.entityutils; impor org.dom4j.document; impor org.dom4j.documenthelper; impor org.dom4j.element; impor org.dom4j.io.saxreader; impor org.springframework.beans.factory.annot org.springframework.web.bind.annotation.requestmapping; impor org.springframework.web.bind.annotation.requestmethod; impor org.springframework.web.bind.annotation.responseBody; impor org.springfram.winb.bind.annotation.responseBody; Impor org.springfram.wind.bind.annotation. com.zhrd.bussinss.platform.bo.JsPay;import com.zhrd.bussinss.platform.bo.PayHist;import com.zhrd.bussinss.platform.constants.PayHistoryPayStatus;import com.zhrd.bussinss.platform.constants.PayHistoryPayType;import com.zhrd.bussinss.platform.service.getweixinAccessTokenService; impor com.zhrd.bussinss.platform.service.weixinpayservice; import com.zhrd.bussinss.platform.utils.closeweixinorders; impor com.zhrd.bussinss.platform.utils.customizedPropertyplaceHolderConfigurer; impor com.zhrd.bussinss.platform.weixinpayutils.clientcustomssl;@restcontroller@requestMapping ("/rest/weixinsendMessage") weixinsroler@requestMapping ("/rest/weixinsendMessage") public class Weixinpayservice weixinpayservice; @Autowired getweixinAccessTokenservice getWeixIncescessTokeService; Private Static Long Standardtime = 1662652800000L; /** * WeChat send message* @param request * @param response * @return */ @RequestMapping(value="/weiXinSend",method=RequestMethod.GET) @ResponseBody public Object weiXinSend(HttpServletRequest request,HttpServletResponse response,String orderNo,String openId){ System.out.println ("=============================================== ==================================================================== ==================================================================== ==================================================================== ==================================================================== ==================================================================== ==================================================================== ==================================================================== CustomizedPropertyPlainerConfigurer.getContextProperty ("wx.cert"). ToString ()))); Sslcontexts.custom (). LoadKeyMaterial (keystore, "10061401" .tochararray ()). Build (); // Izinkan TLSV1 Protocol Hanya SSLConnectionCocketFactory SSLSF = SSLConnectionCockeTfactory baru (SSLContext, String baru [] {"tlsv1"}, null, sslconnectionCocketFactory.allow_all_hostname_HostName_Verifier); CloseableHttpClient httpClient = httpclients.custom () .setsslsocketfactory (sslsf) .build (); // httpget httpget = baru // httpget ("https://api.mch.weixin.qq.com/secapi/pay/refund"); // Untuk detail untuk mendapatkan token, lihat artikel tentang mendapatkan token httppost httppost = httppost baru ("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+getweixinaccesstokenservice.accesstoken () (); PAYHIST PH = NULL; Daftar <peta <string, objek >> td = weixInpayservice.gettrade (orderno); Tanggal dt = tanggal baru (); SimpleDateFormat SDF = new SimpleDateFormat ("yyyymmddhhmmss"); String noncestr = sdf.format (dt) .toString (); Tanggal sekarang = tanggal baru (); String tradepayno = orderno+string.format ("%10d", standar waktu - sekarang.getTime ()). Substring (0, 10); System.out.println ("Pesanan label orderno ===========================================================; System.out.println (" 10-bit acak angka ==================== "+String.Format ("%10d ", StandardTime - Now.getTime ()). Substring (0, 10)); harga string = math.round (float.valueof (td.get (0) .get (" harga "). // detailnya, silakan merujuk ke artikel tentang mendapatkan informasi file konfigurasi. Dtsdfformat dtsdf = new SimpleDateFormat ("yyyymmddhhmmss"); System.out.println ("Harga =="+Harga); JSONObject resultjspay = (jsonObject) getjspay (noncestr, "order", tradepayno, harga, noncestr, timeexPire, openId); resultjspay.getString ("prepayid"); System.out.println ("================= 222Prepay_ID222 ==========================="+hasilnya. Daftar <peta <string, peta <string, string >>> data = new arraylist <peta <string, peta <string, string >>> (); Peta <string, peta <string, string >> firstparam = new HashMap <string, peta <string, string >> (); Peta <string, string> valueParam = hashmap baru <string, string> (); valueparam.put ("value", td.get (0) .get ("buyerName")+"(Mr./ms.) order"); valueparam.put ("color", "#173177"); Peta <string, string> valueParam1 = hashmap baru <string, string> (); valueparam1.put ("nilai", orderno); valueparam1.put ("color", "#173177"); Peta <String, String> valueParam2 = hashmap baru <string, string> (); valueparam2.put ("nilai", "komunitas pintar menyukai pesanan segar"); valueparam2.put ("color", "#173177"); Peta <String, String> valueParam3 = hashmap baru <string, string> (); valueparam3.put ("nilai", td.get (0) .get ("harga")+"meta"); valueparam3.put ("color", "#173177"); Peta <String, String> valueParam4 = hashmap baru <string, string> (); valueparam4.put ("nilai", "tunggu pembayaran"); valueparam4.put ("color", "#173177"); Peta <String, String> ValueParam5 = HashMap baru <String, String> (); valueparam5.put ("nilai", "klik untuk membayar"); valueparam5.put ("color", "#173177"); firstparam.put ("first", valueparam); firstparam.put ("kata kunci1", valueparam1); firstparam.put ("kata kunci2", valueparam2); firstparam.put ("kata kunci3", valueparam3); firstparam.put ("kata kunci4", valueparam4); firstparam.put ("komentar", valueparam5); data.add (firstparam); Jspay jp = jspay baru (); JP.Settouser (OpenID); jp.settemplate_id ("miexd4-4uqrfmdjnvqmjhh0egfypm16r5dpdt6p9gpgg"); jp.settopcolor ("#173177"); jp.setUrl ("http: // tautan untuk pengaturan akun publik/weixin_jspay/weixinjspay/init.action? packagevalue ="+resultjspay.getString ("prepayid"). toString ()); jp.setData (data); JsonObject jsonObject = jsonobject.fromObject (jp); String str = string baru (jsonobject.toString (). GetBytes ("UTF-8"), "iso8859-1"); // string xml = clientcustomssl.refundnativePackage (weixinrefundservice.gettradepayno (orderno), noncestr, totalfee, refundfee, noncestr); Coba {System.out.println ("Data ========================================================================================================================================= ClientCustomssl.refundnativePackage (weixinrefundservice.gettradepayno (orderno), noncestr, noncestr) coba {System.out.println ("Execxionsed" + httppost.get.get.geCkeT (); Httpentity entitas = responseEntry.getEntity (); len ++;} in.close (); Jsonobject.fromObject (string baru (b, 0, len)); ph.settradepayurl (""); ph.setpaytradeno (orderno); ph.settradepayno (tradepayno); ph.setpaystatus (payhistorypaystatus.wechat_pay_status_wait); ph.setPayType (payhistorypaytype.wechat_js_pay); Daftar <Payhist> payhistlist = weixInpayservice.getpayhist (orderno, "weChat", ""); if (payhistlist == null || payhistlist.size () == 0) {weixInpayservice.addpayhist (ph); } else {// Untuk detail tentang penutupan penutupan, lihat artikel tentang pembatalan pesanan. JsonObject strstatus = (jsonObject) closeWeixInderutils.closeweixInorder (payhistlist.get (0) .gettradepayno ()); if (strstatus.getString ("status"). Equals ("Success")) {System.out.println (ph.gettradepayno ()); weixinpayservice.updatepayhist (ph); }}} hasil pengembalian; } Entityutils.consume (entitas); } akhirnya {responseEntry.close (); }} akhirnya {httpclient.close (); } return null; } catch (Exception e) {E.PrintStackTrace (); JSONObject hasil = jsonObject () baru; result.put ("status", "error"); result.put ("msg", e.getMessage ()); hasil pengembalian; }} Objek statis public getjspay (string noncestr, string orderdescribe, string orderno, string harga, string timestArt, string timeExPire, string openId) {coba {keystore keystore = keystore.getInstance ("pkcs12"); FileInputStream instream = new FileInputStream (file baru (CustomizedPropertyplaceCerConfigurer.getContextProperty ("wx.cert"). ToString ())); coba {keystore.load (instream, "10061401" .tochararray ()); } akhirnya {enterstream.close (); } // mempercayai ca sendiri dan semua sertifikat sendiri sslcontext sslcontext = sslcontexts.custom (). LoadKeyMaterial (keystore, "lihat email" .tochararray ()). Build (); // Izinkan TLSV1 Protocol Hanya SSLConnectionCocketFactory SSLSF = SSLConnectionCockeTfactory baru (SSLContext, String baru [] {"tlsv1"}, null, sslconnectionCocketFactory.allow_all_hostname_HostName_Verifier); CloseableHttpClient httpClient = httpclients.custom () .setsslsocketfactory (sslsf) .build (); // httpget httpget = baru // httpget ("https://api.mch.weixin.qq.com/secapi/pay/refund"); Httppost httppost = httppost baru ("https://api.mch.weixin.qq.com/pay/unifiedorder"); String xml = clientcustomssl.createJsapipackage (noncestr, orderdescribe, orderno, price, timeStart, timeexPire, openId); coba {stringEntity se = new stringEntity (xml); httppost.setentity (SE); System.out.println ("Execting Request" + httppost.getRequestline ()); CloseableHttpresponse responseEntry = httpclient.execute (httppost); coba {httpentity entity = responseEntry.getEntity (); System.out.println ("----------------------------------------"); System.out.println (responsEntry.getStatusLine ()); if (entitas! = null) {System.out.println ("Panjang konten respons:" + entity.getContentLength ()); Saxreader Saxreader = Saxreader baru (); Dokumen dokumen = saxreader.read (entity.getContent ()); Elemen rootelt = document.getrooteLement (); Dokumen dokumenxml = documenthelper.parsetext (xml); Elemen rooteltxml = documentxml.getrooteLement (); System.out.println ("Node Root:" + rootelt.getName ()); System.out.println ("==="+rootelt.elementText ("result_code")); System.out.println ("==="+rootelt.elementText ("return_msg")); String resultCode = rootelt.elementText ("result_code"); JSONObject hasil = jsonObject () baru; if (resultCode.equals ("Success")) {System.out.println ("================== Prepay_id ====================="+ rootelt.elementText ("prepay_id"))); result.put ("prepayid", rootelt.elementText ("prepay_id")); result.put ("tanda", rooteltxml.elementText ("tanda")); result.put ("status", "sukses"); result.put ("msg", "success"); } else {result.put ("status", "false"); result.put ("msg", rootelt.elementText ("err_code_des")); } hasil pengembalian; } Entityutils.consume (entitas); } akhirnya {responseEntry.close (); }} akhirnya {httpclient.close (); } return null; } catch (Exception e) {E.PrintStackTrace (); JSONObject hasil = jsonObject () baru; result.put ("status", "error"); result.put ("msg", e.getMessage ()); hasil pengembalian; }}} 4. Kode Kontrol Implementasi Kode Kode Lapisan di Proyek Weixin_JSPAY
package com.weixin.jspay.controller;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;@Controller@RequestMapping("/weixinJsPay")public class WeiXinJsPayController { @RequestMapping(value = "/init", method = RequestMethod.GET) public String init( HttpServletRequest request,HttpServletResponse response,String packageValue,String paySign) {System.out.println ("==================== 微信 JSpay 开始 ==================="); System.out.println ("PackageValue ================"+PackageValue); System.out.println ("paySign ======================"+paySign); request.setAttribute ("packageValue", "prepay_id =" + packageValue); request.setAttribute ("paySign", paySign); System.out.println ("==================== 微信 JSpay 页面跳转开始 ==================="); mengembalikan "weixin"; }}
Kode JSP
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transisi // en" "http://www.w3.org/tr/html4/loose.dtd"><html><head><script type =" Text/JavaScript "src ="/weixin_jspay/js/md5.js "> </script> <script language =" javascript (javascript = (javascript "> (script =" javascript "> JAVAS/MD. '$ {PackageValue}'; var paySign = '$ {paySign}'; alert ("packageValue ============"+PackageValue); alert ("paySign ================"+paySign); var SignString = "appId = lihat akun publik & noncestr = random string & package ="+packageValue+"& paySign ="+paySign+"& SignType = md5 & timestamp = waktu"; // waspada (SignString); var md5SignValue = ("" + cryptojs.md5 (SignString)). Toupercase (); // waspada (md5signvalue); Weixinjsbridge.invoke ('getbrandwcpayRequest', {"appid": "<span style =" font-family: arial, helvetica, sans-serif; "> lihat akun publik </span>", "jadwal waktu": "1395712654", "noncestr": ":" 1395712654 "," noncestr ":": "NonCestr": "1395712654", "noncestr": "noncestr": "noncestr": "noncestr": "noncestr", "MD5", "PaySign": MD5SignValue}, function (res) {waspada (res.err_msg); "Get_brand_wcpay_request: cancel") {alert ("Pembayaran Pembatalan Pengguna"); </body> </html>Pembayaran WeChat MD5.JS: MD5.JS dan WeChat PEMBAYARAN DOKUMEN PENGEMBANGAN: Alamat unduh
Artikel ini telah dikompilasi menjadi "Ringkasan Keterampilan Pengembangan JavaScript WeChat", dan semua orang dipersilakan untuk belajar dan membaca.
Saya merekomendasikan tutorial tentang applet WeChat yang sangat prihatin sekarang: editor "Tutorial Pengembangan Program Mini WeChat" telah dengan hati -hati menyusunnya untuk semua orang, saya harap Anda menyukainya.
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.