微信公众号开发:调用微信扫一扫功能
来源:互联网 发布:贵州大数据峰会 马云 编辑:程序博客网 时间:2024/05/29 04:26
根据微信api,整理了一下调用微信扫一扫功能。如有问题请指正:
以下是具体步骤:
- 1、绑定域名(很关键)
- 2、引入JS文件(很简单)<scriptsrc="http://res.wx.qq.com/open/js/jweixin-1.1.0.js"></script>
- 3、通过config接口注入权限验证配置(很重要)
- 4、通过ready接口处理成功验证(还没用到)
- 5、通过error接口处理失败验证(还没用到)
以下是通过config接口注入权限验证配置(第三步):
下面是js代码:
$.ajax({ type : "post", url : "/weixin/open/weixinOAuthCallback_sign.action", data : { "url" : location.href.split('#')[0] }, dataType : "json", success : function(data) { wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: data.appId, // 必填,公众号的唯一标识 timestamp: data.timestamp, // 必填,生成签名的时间戳 nonceStr: data.nonceStr, // 必填,生成签名的随机串 signature: data.signature,// 必填,签名,见附录1 jsApiList: [ 'checkJsApi', 'startRecord', 'stopRecord', 'translateVoice', 'scanQRCode',// 微信扫一扫接口 'openCard' ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.error(function(res) { alert("出错了:" + res.errMsg);//这个地方的好处就是wx.config配置错误,会弹出窗口哪里错误,然后根据微信文档查询即可。 }); wx.ready(function() { wx.checkJsApi({ jsApiList : ['scanQRCode'], success : function(res) { } }); }); //点击按钮扫描二维码 $("#scanQRCode").click(function(){ wx.scanQRCode({ needResult : 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果, scanType : [ "qrCode"], // 可以指定扫二维码还是一维码,默认二者都有 success : function(res) { var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果 window.location.href = result;//因为我这边是扫描后有个链接,然后跳转到该页面 }, error : function(){ console.log('123'); } }); }); } });
下面是后台java代码,用于获取sign签名:AppID:微信公众号应用的唯一标识,AppSecret:微信公众号的私匙(相当于密码)
/** * 得到jsApi-ticket * @return */ @SuppressWarnings({ "static-access", "unused" }) private String getJsapiTicket(){ HttpServletRequest request = ServletActionContext.getRequest(); String code = request.getParameter("code"); String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?"; String params = "grant_type=client_credential&appid=" + APPID + "&secret=" + APP_SECRET + ""; String result = this.httpGet(requestUrl+params); String accessToken = com.alibaba.fastjson.JSONObject.parseObject(result).getString("access_token"); requestUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?"; params = "access_token=" + accessToken + "&type=jsapi"; result = this.httpGet(requestUrl+params); String jsapi_ticket = com.alibaba.fastjson.JSONObject.parseObject(result).getString("ticket"); return jsapi_ticket; } /** * 获取sign签名 * @return */ public String sign() { HttpServletRequest request = ServletActionContext.getRequest(); Mapret = new HashMap (); String url = request.getParameter("url"); String jsapi_ticket= getJsapiTicket(); String nonce_str = create_nonce_str(); String timestamp = create_timestamp(); String string1; String signature = ""; int length=url.indexOf("#"); String uri = url; if(length > 0){ uri=url.substring(0,length);//当前网页的URL,不包含#及其后面部分 } //注意这里参数名必须全部小写,且必须有序 string1 = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonce_str + "×tamp=" + timestamp + "&url=" + url; System.out.println(string1); try { MessageDigest crypt = MessageDigest.getInstance("SHA-1"); crypt.reset(); crypt.update(string1.getBytes("UTF-8")); signature = byteToHex(crypt.digest()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } ret.put("appId", APPID); ret.put("url", uri); ret.put("jsapi_ticket", jsapi_ticket); ret.put("nonceStr", nonce_str); ret.put("timestamp", timestamp); ret.put("signature", signature); System.out.println(signature); this.setJsonString(JsonUtil.toJSONString(ret)); return "json"; } private static String byteToHex(final byte[] hash) { Formatter formatter = new Formatter(); for (byte b : hash) { formatter.format("%02x", b); } String result = formatter.toString(); formatter.close(); return result; } private static String create_nonce_str() { return UUID.randomUUID().toString(); } private static String create_timestamp() { return Long.toString(System.currentTimeMillis() / 1000); } /** * 发送get请求 * @param url 路径 * @return */ public static String httpGet(String url){ //get请求返回结果 String strResult = null; try { DefaultHttpClient client = new DefaultHttpClient(); //发送get请求 HttpGet request = new HttpGet(url); HttpResponse response = client.execute(request); /**请求发送成功,并得到响应**/ if (response.getStatusLine().getStatusCode() == org.apache.http.HttpStatus.SC_OK) { /**读取服务器返回过来的json字符串数据**/ strResult = EntityUtils.toString(response.getEntity()); } else { logger.error("get请求提交失败:" + url); } } catch (IOException e) { logger.error("get请求提交失败:" + url, e); } return strResult; }
阅读全文
1 0
- 微信公众号开发:调用微信扫一扫功能
- JAVA微信公众号调用扫一扫功能开发
- 微信公众号开发,微信支付功能开发(网页JSAPI调用)
- 微信公众号开发教程[020]-wxsdk4php:微信公众号和微信支付开发的所有API功能点的封装及调用实例
- 微信公众平台开发[3] —— 微信公众号支付功能(PHP)
- 微信公众平台开发[3] —— 微信公众号支付功能(PHP)
- 微信支付开发教程JAVA编[008]-wxsdk4java:微信公众号和微信支付开发的所有API功能点的封装及调用实例
- 【01】jquerymobile开发微信公众号功能导航页面
- 微信公众号网页分享功能开发
- 微信公众号开发,分享功能,java,spring mvc
- PHP微信公众号开发常用功能
- PHP微信公众号开发常用功能
- php 微信公众号开发 api接口调用
- 微信公众平台,微信支付功能开发文档
- 微信公众号开发
- 微信公众号开发
- 微信公众号开发
- 微信公众号开发
- Java——Math
- 常用查找数据结构及算法(Python实现)
- pacemaker+corosync中crm命令用法
- Python学习笔记-Turtle库简单实例之日期时间显示
- Java 基础(8)—— 向上转型、向下转型、动态绑定、静态绑定
- 微信公众号开发:调用微信扫一扫功能
- handler instanceof HandlerMethod 一直是false
- Swift开发:使用SwiftyJSON解析JSON数据
- javascript-replace
- arcgis 无法打开excel文件 提示 无法注册类
- c++primer学习日记 1
- 新手解决class file has wrong version 49.0, should be 48.0
- SQL Server中bit数据类型
- 利用 Construct 2 制作“草船借箭”