微信小程序> Java调用微信扫一扫-微信扫一扫开发-微信小程序扫一扫功能

Java调用微信扫一扫-微信扫一扫开发-微信小程序扫一扫功能

浏览量:2304 时间: 来源:Luo_Gang7
1.

公司公众号二次开发需要调用微信扫一扫接口,在网上查了很多相关资料感觉也不是特别的全,在此特意整理一遍资料,供给自己和大家参考,如有相关缺陷请大家指出。

2.

步骤一:绑定域名

3.

https://mp.weixin.qq.com/wiki?tresource/res_mainidmp1421141115打开微信官方文档链接,查看接入步骤

4.

注意这个地方填写JS接口安全域名例如域名是https://www.baidu.com/填写www.baidu.com即可

5.

步骤二:引入JS文件

6.

页面引入即可scriptsrc"http://res.wx.qq.com/open/js/jweixin-1.0.0.js"/script

7.

步骤三:通过config接口注入权限验证配置

8.

关键关键关键,重要的事情说三遍,看附录一,重要的是access_token和jsapi_ticket,首先获的access_token然后用获得的access_token再获取jsapi_ticket,最后利用签名算法获得参与签名的字段包括noncestr(随机字符串),有效的jsapi_ticket,timestamp(时间戳),url(当前网页的URL,不包含#及其后面部分)

9.

签名算法

packagecom.wx.utils;importnet.sf.json.JSONObject;importjava.io.IOException;importjava.io.UnsupportedEncodingException;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;importjava.util.Formatter;importjava.util.HashMap;importjava.util.Map;importjava.util.UUID;/***官方给的使用js的验证工具*@authorGang_Luo**/publicclassJsSignUtil{publicstaticStringaccessTokennull;publicstaticMapString,Stringsign(Stringurl)throwsIOException{JSONObjectaccesTokenObjectAuthUtil.doGetJson(Constants.ACCESS_TOKEN_URL);StringaccesToken(String)accesTokenObject.get("access_token");System.out.println("微信返回accesTokenObject"+accesTokenObject);JSONObjectjsapiTicketObjectAuthUtil.doGetJson("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token"+accesToken+"typejsapi");StringjsapiTicket(String)jsapiTicketObject.get("ticket");System.out.println("微信返回jsapiTicketObject"+jsapiTicketObject);MapString,StringretnewHashMapString,String();Stringnonce_strcreate_nonce_str();Stringtimestampcreate_timestamp();Stringstring1;Stringsignature"";//注意这里参数名必须全部小写,且必须有序string1"jsapi_ticket"+jsapi_ticket+"noncestr"+nonce_str+"timestamp"+timestamp+"url"+url;System.out.println("string1"+string1);try{MessageDigestcryptMessageDigest.getInstance("SHA-1");crypt.reset();crypt.update(string1.getBytes("UTF-8"));signaturebyteToHex(crypt.digest());}catch(NoSuchAlgorithmExceptione){e.printStackTrace();}catch(UnsupportedEncodingExceptione){e.printStackTrace();}ret.put("url",url);ret.put("jsapi_ticket",jsapiTicket);ret.put("nonceStr",nonce_str);ret.put("timestamp",timestamp);ret.put("signature",signature);ret.put("appId","wx1d91459aadf9156e");System.out.println("1.ticket(原始)"+jsapiTicket);System.out.println("2.url"+ret.get("url"));System.out.println("3.jsapi_ticket(处理后)"+ret.get("jsapi_ticket"));System.out.println("4.nonceStr"+ret.get("nonceStr"));System.out.println("5.signature"+ret.get("signature"));System.out.println("6.timestamp"+ret.get("timestamp"));returnret;}/***随机加密*@paramhash*@return*/privatestaticStringbyteToHex(finalbyte[]hash){FormatterformatternewFormatter();for(byteb:hash){formatter.format("%02x",b);}Stringresultformatter.toString();formatter.close();returnresult;}/***产生随机串--由程序自己随机产生*@return*/privatestaticStringcreate_nonce_str(){returnUUID.randomUUID().toString();}/***由程序自己获取当前时间*@return*/privatestaticStringcreate_timestamp(){returnLong.toString(System.currentTimeMillis()/1000);}}packagecom.wx.utils;publicclassConstants{publicstaticfinalStringAPP_ID"对应公众号appid";publicstaticfinalStringAPP_SECRET"对应公众号app_secret";publicstaticfinalStringACCESS_TOKEN_URL"https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credentialappid对应公众号appidsecret对应公众号app_secret";importorg.apache.http.util.EntityUtils;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;importjava.io.IOException;importjava.net.URLEncoder;publicclassAuthUtil{publicstaticJSONObjectdoGetJson(Stringurl)throwsIOException{JSONObjectjsonObjectnull;DefaultHttpClientclientnewDefaultHttpClient();HttpGethttpGetnewHttpGet(url);HttpResponseresponseclient.execute(httpGet);HttpEntityentityresponse.getEntity();if(entity!null){StringresultEntityUtils.toString(entity,"utf-8");jsonObjectJSONObject.fromObject(result);}httpGet.releaseConnection();returnjsonObject;}}packagecom.wx.scan;importcom.wx.utils.AuthUtil;importcom.wx.utils.Constants;importcom.wx.utils.JsSignUtil;importnet.sf.json.JSONObject;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.web.servlet.ModelAndView;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;importjava.util.Map;@Controller@RequestMapping("/scan/")publicclassScanController{privateLoglogLogFactory.getLog(this.getClass());@RequestMapping("test")publicObjecttest(HttpServletRequestrequest)throwsIOException{log.info("--------进入了方法-------");Stringurlrequest.getRequestURL().toString();MapString,StringsignJsSignUtil.sign(url);ModelAndViewmavnewModelAndView("scan/scan");mav.addObject("sign",sign);returnmav;}}10.

步骤四:通过ready接口处理成功验证

11.

步骤五:通过error接口处理失败验证

%--CreatedbyIntelliJIDEA.User:AdministratorDate:2018/4/20Time:11:19TochangethistemplateuseFile|Settings|FileTemplates.--%%@pagecontentType"text/html;charsetUTF-8"language"java"%htmlheadmetaname"viewport"content"widthdevice-width,initial-scale1,maximum-scale1,user-scalableno"metacharset"UTF-8"title扫一扫/titlescripttype"text/javascript"src"../js/jquery.js"/scriptscriptsrc"http://res.wx.qq.com/open/js/jweixin-1.0.0.js"/scriptscripttype"text/javascript"wx.config({debug:true,appId:'${sign.get("appId")}',timestamp:'${sign.get("timestamp")}',nonceStr:'${sign.get("nonceStr")}',signature:'${sign.get("signature")}',jsApiList:['checkJsApi','scanQRCode']});//end_config//步骤五wx.error(function(res){alert("出错了:"+res.errMsg);});//步骤四wx.ready(function(){wx.checkJsApi({jsApiList:['scanQRCode'],success:function(res){}});//扫描二维码document.querySelector('#scanQRCode').onclickfunction(){wx.scanQRCode({needResult:1,//默认为0,扫描结果由微信处理,1则直接返回扫描结果,scanType:["qrCode","barCode"],//可以指定扫二维码还是一维码,默认二者都有success:function(res){varresultres.resultStr;//当needResult为1时,扫码返回的结果//document.getElementById("wm_id").valueresult;//将扫描的结果赋予到jsp对应值上alert("扫描成功::扫描码"+result);}});};//end_document_scanQRCode});//end_ready/script/headbodybuttonid"scanQRCode"扫描二维码/button/body/html12.

至此微信扫一扫接口就能成功调通了,注意access_token有访问次数限制,自己根据实际情况做好缓存,这里我就没有写了

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎