В этой статье используется соответствующая информация о оплате JSAPI + отправка шаблонных сообщений для вашей ссылки. Конкретный контент заключается в следующем
1. Инструменты
См. Категория инструментов: WeChat Pay Java версия нативного платежа
2. Настройки общественного счета
3. Реализация кода
OpenID: OpenID - это уникальная индикация между пользователем и публичной учетной записью. Следующие классы включают в себя генерирование токенов, звонки интерфейса закрытия, получение информации о файле конфигурации и классы инструментов. Есть конкретные реализации кода в других статьях.
пакет com.zhrd.bussinss.platform.controller.rest; import java.io.file; импорт java.io.fileinputstream; import java.io.inputstream; импорт java.security.keystore; импорт java.text.simpledateformat; import java.utlistlist; java.util.hashmap; import java.util.list; import java.util.map; import javax.net.ssl.sslcontext; импорт javax.servlet.http.httpservletrequest; import.servlet.http.httpservessesponse; import.jssonobject.http.httpservessesponse; org.apache.http.httpentity; import org.apache.http.client.methods.closablehttprespons org.apache.http.conn.ssl.sslcontexts; import org.apache.http.entity.stringentity; import org.apache.http.impl.client.closablehtpclient; импорт org.apache.http.impl.client.httpclient; org.apache.http.util.entityutils; import org.dom4j.document; import org.dom4j.documentHelper; import org.dom4j.element; import org.dom4j.io.saxreader; import org.spramework.beans.factory.annotation.autwowired; org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmethod; импорт org.springframework.web.bindtation.responsebody; импорт org.spramework.web.bindtation.restollor; com.zhrd.bussinss.platform.bo.jspay; import com.zhrd.bussinss.platform.bo.payhist; import com.zhrd.bussins.platform.constants.payhistorypaystatus; importm.zhrd.bussinss.platform.constants.payhistorypaypaypetype; com.zhrd.bussinss.platform.service.getweixinaccesstokenservice; import com.zhrd.bussins.platform.service.weixinpayservice; импорт com.zhrd.bussinss.platform.closewexinordorutils; import com.zhrd.bussinss.platform.utils.customizedpropertiplaceholderconfigurer; import com.zhrd.bussins.platform.weixinpayutils.clientcustomssl;@restcontroller@requestmapp weixinpayservice; @Autowired getWeixinaccessTokenService getWeixinaccessTokenService; Частный статический длинный стандарт = 1662652800000L; /** * WeChat Отправить сообщение * @param запрос * @param response * @return */@requestmapping (value = "/weixinsend", method = requestmethod.get) @responsebody public obj System.out.println ("========================================================================= ======================================================================= ======================================================================= ======================================================================== ======================================================================= ======================================================================= ======================================================================= ======================================================================== Industiablepropertyplace holderconfigurer.getContextProperty ("wx.cert"). ToString ()); Sslcontexts.custom (). Loadkeymaterial (KeyStore, "10061401" .tochararray ()). Build (); // Разрешение TLSV1 Протокол только sslConnectionsocketCactory sslsf = new sslConnectionsockeCtectory (sslContext, new String [] {"tlsv1"}, null, sslConnectionsocteckectectactory.ally_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="+getwexinaccesstokenservice.accesstoken (); PAYHIST PH = NULL; Список <map <string, object >> td = weixinpayservice.gettrade (orderno); Дата DT = новая дата (); SimpleDateFormat SDF = new SimpleDateFormat ("yyyyMmddhhmmss"); String noncestr = sdf.format (dt) .toString (); Дата сейчас = новая дата (); String tradePayno = orderno+string.format ("%10d", standardtime - now.gettime ()). Substring (0, 10); System.out.println ("label label orderno ====================================================================================== номер =================== "+String.format ("%10d ", StandardTime - now.getTime ()). substring (0, 10)); строка цена = math.round (float.valueof (td.get (0) .get (" цена "). Пожалуйста, обратитесь к статье о получении информации о конфигурации New SimpleDateformat ("yyyymmddhmmss"); System.out.println ("timeStart =="+noncest); JsonObject resultJspay = (jsonObject) getJSpay (noncestr, "order", tradepayno, цена, не Cestry, TimeExpire, OpenID); resultJspay.getString ("Predayid"); System.out.println ("====================================================== Список <map <string, map <string, string >>> data = new ArrayList <map <string, map <string, string >>> (); Map <string, map <string, string >> firstparam = new hashmap <string, map <string, string >> (); Map <string, string> valueParam = new hashmap <string, string> (); valueparam.put ("value", td.get (0) .get ("buyername")+"(г -н/мс.) Порядок"); valueparam.put ("color", "#173177"); Map <string, string> valueParam1 = new hashmap <string, string> (); valueParam1.put ("value", orderno); ValueParam1.put ("color", "#173177"); Map <string, string> valueParam2 = new hashmap <string, string> (); ValueParam2.put («Value», «Smart Community Love Fresh Order»); ValueParam2.put ("color", "#173177"); Map <string, string> valueParam3 = new hashmap <string, string> (); valueParam3.put ("value", td.get (0) .get ("цена")+"meta"); valueparam3.put ("color", "#173177"); Map <string, string> valueParam4 = new hashmap <string, string> (); valueParam4.put ("value", "ждать оплаты"); valueparam4.put ("color", "#173177"); Map <string, string> valueParam5 = new hashmap <string, string> (); valueParam5.put ("value", "нажмите, чтобы заплатить"); 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: // link для настройки публичной учетной записи/weixin_jspay/weixinjspay/init.action? 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), не CestR, TotalFee, refundFee, noncestR); Попробуйте {System.out.println ("data ================================================================================================== ClientCustomssl.RefundnativePackage (weixinrefundservice.gettradepayno (orderno), noncest, noncest); Httpentity entity = replowentry.getentity (); } in.close (); Jsonobject.fromobject (new 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); Список <payhist> payhistlist = weixinpayservice.getpayhist (orderno, "weChat", ""); if (payhistlist == null || payhistlist.size () == 0) {weixinpayservice.addpayhist (ph); } else {// Для получения подробной информации о закрытии заказов см. В статье об отмене заказов. JsonObject strStatus = (jsonObject) closeWexinOrderUtils.closewexinorder (payhistlist.get (0) .getTradePayno ()); if (strstatus.getString ("status"). equals ("success")) {System.out.println (ph.getTradepayno ()); weixinpayservice.updatepayhist (pH); }}} return result; } Entityutils.consume (Entity); } наконец {responseNtry.close (); }} наконец {httpclient.close (); } return null; } catch (Exception e) {e.printstackTrace (); JsonObject result = new jsonObject (); result.put ("status", "ошибка"); result.put ("msg", e.getmessage ()); результат возврата; }} public Static Object getJSpay (String noncest, String orderdescribe, String orderno, String Price, String TimeStart, String TimeExpire, String OpenID) {try {KeyStore KeyStore = KeyStore.getInstance ("pkcs12"); FileInputStream inStream = new FileInputStream (новый файл (CamentiaDPropertyPlaceholderConfigurer.getContextProperty ("wx.cert"). ToString ())); try {keystore.load (instream, "10061401" .tchararray ()); } наконец {enterstream.close (); } // Доверие собственного CA и всех саморегистрированных Certs sslContext sslContext = sslContexts.custom (). // Разрешение TLSV1 Протокол только sslConnectionsocketCactory sslsf = new sslConnectionsockeCtectory (sslContext, new String [] {"tlsv1"}, null, sslConnectionsocteckectectactory.ally_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/unififiedorder"); String xml = clientCustomssl.createjsapipackage (noncestr, orderdescribe, orderno, price, timestart, timeexpire, openid); try {stryentity se = new строгость (xml); httppost.setentity (se); System.out.println («выполнение запроса» + httppost.getRequestline ()); ClosableHttpresponse responsentry = httpclient.execute (httppost); try {httpentity entity = responsentry.getentity (); System.out.println ("-----------------------------------------"); System.out.println (responseNtry.getStatusLine ()); if (Entity! = null) {System.out.println ("Длина содержимого ответа:" + entity.getContentLength ()); SaxReader SaxReader = new SaxReader (); Документ документ = saxreader.read (entity.getContent ()); Element rootelt = document.getrootelement (); Document 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 ("================= PREANTE_ID ================== result.put ("predayid", rootelt.elementtext ("prepay_id")); result.put ("sign", rooteltxml.elementtext ("sign")); result.put («статус», «успех»); result.put ("msg", "успех"); } else {result.put ("status", "false"); result.put ("msg", rootelt.elementtext ("err_code_des")); } return Result; } Entityutils.consume (Entity); } наконец {responseNtry.close (); }} наконец {httpclient.close (); } return null; } catch (Exception e) {e.printstackTrace (); JsonObject result = new jsonObject (); result.put ("status", "ошибка"); result.put ("msg", e.getmessage ()); результат возврата; }}} 4. Код управления реализацией кода в проекте weixin_jspay
пакет com.wiexin.jspay.controller; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework. org.springframework.web.bind.annotation.requestmethod;@controller@requestmapping ("/weixinjspay") public class weixinjspaycontroller {@requestmapping (value = "/init", methodmethod.get) paysign) {System.out.println ("=================== 微信 jspay 开始 ================== System.out.println ("packageValue ==============="+PackageValue); System.out.println ("paysign ======================"+Paysign); request.setAttribute ("packageValue", "preapay_id =" + packageValue); request.setattribute ("paysign", paysign); System.out.println ("=================== 微信 jspay 页面跳转开始 ===================================================== вернуть "weixin"; }}
код JSP
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <! doctype html public "-// w3c // dtd html 4.01 transitional // en"-// w3c // dtd html 4.01 // en "http://www.w3.org/tr/html4/loose.dtd"><html><head><script type =" text/javascript "src ="/weixin_jspay/js/md5.js "> </script> <script =" javascript "> window.Onload = aLude = aLud '$ {packageValue}'; var paysign = '$ {paysign}'; Alert ("PackageValue ============"+PackageValue); Alert ("PaySign ==============="+PaySign); var signstring = "appid = см. Общественная учетная запись и noncestr = random String & package ="+packagevalue+"& paysign ="+paysign+"& signtype = md5 & timestamp = time"; // предупреждение (Signstring); var md5signvalue = ("" + cryptojs.md5 (signstring)). touppercase (); // предупреждение (MD5SignValue); Weixinjsbridge.invoke ('getbrandwcpayrequest', {"appid": "<span style =" font-family: arial, helvetica, sans-serif; "> См. Общедоступный аккаунт </span>", "TimeStamp": "1395712654", "Не-CESTR": "1234566", "PACKERVE": "PACKEREVE": "PACKEREVE": "PACKEREVE": ". «MD5», «PaySign»: MD5SignValue}, функция (RES) {Alert (RES.ERR_MSG); "get_brand_wcpay_request: Cancel") {alert ("Оплата пользователя"); </body> </html>WeChat Payment MD5.js: MD5.js и WeChat Development Development Document: Загрузить адрес
Эта статья была составлена в «Краткое описание навыков развития WeChat JavaScript», и все могут учиться и читать.
Я рекомендую учебник по апплетам WeChat, который очень обеспокоен сейчас: редактор «Учебник по разработке программ WeChat Mini» тщательно скомпилировал его для всех, я надеюсь, что вам понравится.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.