تشترك هذه المقالة في المعلومات ذات الصلة حول الدفع JSAPI + رسائل النموذج الإرسال للرجوع إليها. المحتوى المحدد كما يلي
1. الأدوات
راجع فئة الأدوات: WeChat Pay Java نسخة من الدفع الأصلي
2. إعدادات الحساب العام
3. تنفيذ الكود
OpenId: OpenID هو المؤشر الفريد بين المستخدم والحساب العام. تتضمن الفئات التالية إنشاء الرموز ، ومكالمات واجهة الإغلاق ، والحصول على معلومات ملف التكوين ، وفئات الأدوات. هناك تطبيقات رمز محددة في مقالات أخرى.
package com.zhrd.bussinss.platform.controller.rest ؛ استيراد java.io.file ؛ استيراد java.io.fileInputStream ؛ استيراد java.io.inputStream ؛ استيراد java.security.keystore ؛ استيراد java.text.simpledateThormat ؛ java.util.hashmap ؛ استيراد java.util.list ؛ استيراد java.util.map ؛ import javax.net.ssl.sslcontext ؛ import javax.servlet.http.httpservletrequest ؛ import javax.servlet.http.httpserverd ؛ org.apache.http.httpentity ؛ import org.apache.http.client.methods.closablehttpresponse ؛ import org.apache.http.client.methods.htpost ؛ import org.apache.http.conn.conn.ssl.sslconnection ؛ org.apache.http.conn.ssl.sslcontexts ؛ import org.apache.http.entity.stringentity ؛ import org.apache.http.impl.client.closablehttpclient ؛ import org.apache.http.impl.impl.httpclients ؛ org.apache.http.util.entityUtils ؛ استيراد org.dom4j.document ؛ استيراد org.dom4j.documentHelper ؛ import org.dom4j.element ؛ import org.dom4j.io.saxReader ؛ import org.springframewewek.beans.factory.Annotation.Atowired ؛ org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.bind.annotation.requestmethod ؛ استيراد org.springframework.web.bind.annotation.responsebody ؛ com.zhrd.bussinss.platform.bo.jspay ؛ استيراد com.zhrd.bussinss.platform.bo.payhist com.zhrd.bussinss.platform.service.getweixinaccesstokenservice ؛ استيراد com.zhrd.bussinss.platform.service.weixinpayservice ؛ import com.zhrd.bussinss.platform.utils.closeweixinordertils ؛ com.zhrd.bussinss.platform.Utils.CustomizedProperTyplyDerConfigurer ؛ import com.zhrd.bussinss.platform.weixinpayutils.clientcustomssl ؛@restController requestmapping ("/rest/weixinsendmessage") weixinpayservice weixinpayservice ؛ autowired getWeixinAccessTokenService getWeixInAccessTokenService ؛ Static Static Long Standate = 1662652800000L ؛ /** * WeChat إرسال رسالة * param طلب * param استجابة * regurn */ @requestmapping (value = "/weixinsend" ، method = requestMethod.get) responsebody public Object Weixinsend (httpservletrequest report ، httpservletsponse ، string orderno ، string openid) { System.out.println ("============================================== ================================================================ ================================================================ ================================================================ ================================================================ ================================================================ ================================================================ ================================================================ CustomPropertyPlateR.getContextProperty ("Wx.cert"). sslcontexts.custom (). loadKeyMaterial (keystore ، "10061401" .Tochararray ()). build () ؛ // السماح بروتوكول TLSV1 فقط SSLConnectionsCONKEFFACTORY SSLSF = جديد SSLConnectionSOCKETFACTORY (SSLCONTEXT ، سلسلة جديدة [] {"TLSV1" ، null ، sslConnectionSocketFactory.allow_all_hostname_verifier) ؛ closablehttpclient httpclient = httpclients.custom () .SetSslsocketFactory (sslsf) .build () ؛ // httpget httpget = new // httpget ("https://api.mch.weixin.qq.com/secapi/pay/refund") ؛ // للحصول على التفاصيل للحصول على رمز رمز ، راجع المقالة حول الحصول على الرمز المميز httppost httppost = new httppost ("https://api.weixin.qq.com/cgi-bin/message/template/send؟access_token="+getWeixinAccEssTokenService.Accessoken () ؛ PAYHIST PH = NULL ؛ قائمة <map <string ، object >> td = weixinpayservice.getTrade (orderno) ؛ تاريخ dt = تاريخ جديد () ؛ SimplEdateFormat SDF = جديد spiStFormat ("Yyyymmddhhmmss") ؛ سلسلة noncestr = sdf.format (dt) .toString () ؛ التاريخ الآن = تاريخ جديد () ؛ String TradePayNo = orderno+string.format ("٪ 10d" ، standardtime - now.getTime ()). substring (0 ، 10) ؛ System.out.println ("Order Label Orderno ======================================================================================================= الرقم ====================== " التفاصيل ، يرجى الرجوع إلى معلومات ملف التكوين SimpleDateFormat (yyyymddhhmms ") ؛ System.out.println ("MIDESTART =="+noncestr) ؛ jsonobject resultjspay = (jsonobject) getJspay (noncestr ، "order" ، tradepayno ، price ، noncester ، timeExpire ، OpenId) ؛ resultjspay.getString ("prepayid") ؛ System.out.println ("=================== 222Prepay_id222 =========================="+resultjspay.getString ("prepayid"). ToString ()) ؛ قائمة <map <string ، map <string ، string >>> data = new ArrayList <map <string ، map <string ، string >>> () ؛ خريطة <string ، خريطة <string ، string >> firstparam = new hashmap <string ، map <string ، string >> () ؛ خريطة <string ، string> valueparam = new hashmap <string ، string> () ؛ valueparam.put ("value" ، td.get (0) .get ("buyername")+"(mr./ms.) order") ؛ valueparam.put ("color" ، "#173177") ؛ خريطة <string ، string> valueparam1 = new hashmap <string ، string> () ؛ valueparam1.put ("value" ، orderno) ؛ Valueparam1.put ("color" ، "#173177") ؛ خريطة <string ، string> valueparam2 = new hashmap <string ، string> () ؛ Valueparam2.put ("القيمة" ، "Smart Community Love Fresh Order") ؛ Valueparam2.put ("Color" ، "#173177") ؛ خريطة <string ، string> valueparam3 = new HashMap <string ، string> () ؛ valueparam3.put ("value" ، td.get (0) .get ("price")+"meta") ؛ valueparam3.put ("color" ، "#173177") ؛ خريطة <string ، string> valueparam4 = new HashMap <string ، string> () ؛ valueparam4.put ("القيمة" ، "انتظر للدفع") ؛ Valueparam4.put ("color" ، "#173177") ؛ خريطة <string ، string> valueparam5 = new HashMap <string ، string> () ؛ Valueparam5.put ("القيمة" ، "انقر للدفع") ؛ Valueparam5.put ("color" ، "#173177") ؛ firstparam.put ("First" ، Valueparam) ؛ firstparam.put ("Keyword1" ، Valueparam1) ؛ FirstParam.put ("Keyword2" ، Valueparam2) ؛ firstparam.put ("Keyword3" ، Valueparam3) ؛ firstparam.put ("Keyword4" ، Valueparam4) ؛ firstparam.put ("ملاحظة" ، Valueparam5) ؛ data.add (firstparam) ؛ JSpay JP = New JSpay () ؛ JP.Settouser (OpenId) ؛ jp.settemplate_id ("miexd4-4uqrfmdjnvqmjh0egfypm16r5dpdt6p9gpgg") ؛ JP.SettopColor ("#173177") ؛ jp.seturl ("http: // رابط لإعدادات الحساب العام/weixin_jspay/weixinjspay/init.action؟ packagevalue ="+resultjspay.getString ("prepayid"). tostring ()) ؛ JP.SetData (البيانات) ؛ jsonobject jsonobject = jsonobject.fromObject (jp) ؛ String str = new string (jsonobject.toString (). getBytes ("UTF-8") ، "ISO8859-1") ؛ // string xml = clientcustomssl.refundnativePackage (WeixinRefUndService.getTradePayno (Orderno) ، noncestr ، totalfee ، reactfee ، noncestr) ؛ حاول {system.out.println ("البيانات ========================================================================================================================================================================= clientcustomssl.refundnative (weixinrefundervice.gettradepayno (Orderno) Httpentity ictity = byte byte [1024] ؛ in.close () ؛ String (B ، 0 ، Len)) ؛ Ph.SetTradePayurl ("") ؛ Ph.SetPayTradeno (Orderno) ؛ Ph.SetTradePayno (TradePayno) ؛ Ph.SetPayStatus (payhistorypaystatus.wechat_pay_status_wait) ؛ Ph.SetPayType (payhistorypaytype.wechat_js_pay) ؛ قائمة <DayHist> payhistlist = weixinpayservice.getPayhist (Orderno ، "WeChat" ، "") ؛ if (payhistlist == null || payhistlist.size () == 0) {weixinpayservice.addpayhist (ph) ؛ } آخر {// للحصول على تفاصيل حول أوامر الإغلاق ، راجع المقالة حول إلغاء الطلبات. jsonobject strstatus = (jsonoBject) closeweixinorderutils.closeweixinorder (payhistlist.get (0) .getTradePayno ()) ؛ if (strstatus.getString ("status"). يساوي ("النجاح")) {system.out.println (ph.getTradePayno ()) ؛ weixinpayservice.updatepayhist (ph) ؛ }}} نتيجة الإرجاع ؛ } entityUtils.consume (الكيان) ؛ } أخيرًا {responseentry.close () ؛ }} أخيرًا {httpclient.close () ؛ } إرجاع فارغ ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ JSonObject Result = New JSonObject () ؛ result.put ("الحالة" ، "خطأ") ؛ result.put ("msg" ، e.getMessage ()) ؛ نتيجة العودة }} الكائن الثابت العام getjspay (سلسلة noncestr ، string orderdescribe ، string orderno ، سعر السلسلة ، الطابع الزمني للسلسلة ، string timeexpire ، string openId) {try {keystore keystore = keystore.getInstance ("pkcs12") ؛ FileInputStream instream = new FileInputStream (ملف جديد (CustomProperTyPlaterConfigurer.getContextProperty ("wx.cert"). toString ())) ؛ Try {keystore.load (instream ، "10061401" .tochararray ()) ؛ } أخيرًا {entersream.close () ؛ } // Trust Own CA وجميع certs sslcontext sslcontext = sslcontexts.custom (). loadkeymaterial (keystore ، "انظر البريد الإلكتروني". tochararray ()). build () ؛ // السماح بروتوكول TLSV1 فقط SSLConnectionsCONKEFFACTORY SSLSF = جديد SSLConnectionSOCKETFACTORY (SSLCONTEXT ، سلسلة جديدة [] {"TLSV1" ، null ، sslConnectionSocketFactory.allow_all_hostname_verifier) ؛ closablehttpclient httpclient = httpclients.custom () .SetSslsocketFactory (sslsf) .build () ؛ // httpget httpget = new // httpget ("https://api.mch.weixin.qq.com/secapi/pay/refund") ؛ httppost httppost = new httppost ("https://api.mch.weixin.qq.com/pay/unifiedorder") ؛ String xml = clientcustomssl.createjSapiPackage (noncestr ، orderdescribe ، orderno ، price ، mathestart ، timeExpire ، OpenId) ؛ حاول {stringentity se = new striterity (xml) ؛ httppost.setentity (se) ؛ system.out.println ("request request" + httppost.getRequestLine ()) ؛ closablehttpresponse desponseentry = httpclient.execute (httppost) ؛ جرب {httpentity unitity = responseentry.getentity () ؛ System.out.println ("----------------------------------------------") ؛ System.out.println (reponseentry.getStatusLine ()) ؛ if (ectity! = null) {system.out.println ("طول محتوى الاستجابة:" + entity.getContentLength ()) ؛ SaxReader SaxReader = New SaxReader () ؛ وثيقة المستند = saxreader.read (entity.getContent ()) ؛ element rootelt = document.getRootElement () ؛ documentxml = documentHelper.Parsetext (XML) ؛ element rooteltxml = documentxml.getRootElement () ؛ System.out.println ("Root Node:" + rootelt.getName ()) ؛ System.out.println ("==="+rootelt.elementText ("result_code")) ؛ System.out.println ("==="+rootelt.elementText ("return_msg")) ؛ string resultcode = rootelt.elementText ("result_code") ؛ JSonObject Result = New JSonObject () ؛ if (resultCode.equals ("Success")) {system.out.println ("================== prepay_id ====================================" result.put ("prepayid" ، rootelt.elementText ("prepay_id")) ؛ result.put ("sign" ، rooteltxml.elementText ("sign")) ؛ result.put ("الحالة" ، "النجاح") ؛ النتيجة. } آخر {result.put ("الحالة" ، "false") ؛ result.put ("msg" ، rootelt.elementText ("err_code_des")) ؛ } نتيجة الإرجاع ؛ } entityUtils.consume (الكيان) ؛ } أخيرًا {responseentry.close () ؛ }} أخيرًا {httpclient.close () ؛ } إرجاع فارغ ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ JSonObject Result = New JSonObject () ؛ result.put ("الحالة" ، "خطأ") ؛ result.put ("msg" ، e.getMessage ()) ؛ نتيجة العودة }}} 4. رمز طبقة التحكم في تنفيذ التعليمات البرمجية في مشروع Weixin_jspay
package com.weixin.jspay.controller ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ import org.springframework.stereopye org.springframework.web.bind.annotation.requestmethod ؛@controller@requestMapping ("/weixinjspay") class public weixinjspaycontroller {requestmapp 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 页面跳转开始 ==================") ؛ العودة "Weixin" ؛ }}
رمز JSP
<٪@ page language = "java" contentType = "text/html ؛ charset = utf-8" pageencoding = "utf-8" ٪> <! "http://www.w3. '$ {packageValue}' ؛ var paysign = '$ {paysign}' ؛ ALERT ("packageValue ============"+packageValue) ؛ ALERT ("paysign ================"+paysign) ؛ var signstring = "appid = see account public & noncestr = string & package ="+packagevalue+"& paysign ="+paysign+"& signtype = md5 & timestamp = time" ؛ // ALERT (signString) ؛ var md5signvalue = ("" + cryptojs.md5 (signString)). touppercase () ؛ // ALERT (MD5SignValue) ؛ weixinjsbridge.invoke ('getBrandwCpayRequest' ، {"appid": "<span style =" font-family: arial ، helvetica ، sans-serif ؛ "MD5" ، "Paysign": MD5SignValue} ، الدالة (Res) {Alert (res.err_msg) ؛ "get_brand_wcpay_request: إلغاء") {Alert ("دفع المستخدم") ؛ </body> </html>WeChat Payment MD5.JS: MD5.JS و WeChat Development Develop
تم تجميع هذه المقالة في "ملخص لمهارات تطوير JavaScript WeChat" ، والجميع مرحب بهم للتعلم والقراءة.
أوصي بتعليمي حول تطبيقات WeChat التي تهتم للغاية الآن: قام محرر "برنامج تطوير برنامج WeChat Mini" بتجميعه بعناية للجميع ، وآمل أن يعجبك ذلك.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.