微信中的第三个模式就是JSAPI模式,这里面可以查看地理位置、分享qq、扫一扫等功能,这个功能的使用

1、在页面引入js

<meta name="viewport" content="initial-scale=1.0, user-scalable=no"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>/2、

2、页面增加config()方法,config信息验证后会执行ready方法,所有接口操作写在ready()中

wx.config({debug : false, //开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。appId : 'wxd187a91ce6c62d27', //必填,企业号的唯一标识,此处填写企业号corpidtimestamp : "${time}", //必填,生成签名的时间戳nonceStr : '${nonceStr}', // 必填,生成签名的随机串signature : '${str1}',// 必填,签名jsApiList : ['hideOptionMenu','getLocation','checkJsApi']// 必填,需要使用的JS接口列表});wx.ready(function(){// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。wx.hideOptionMenu();locationAgain();//获取位置});

3、在后台获取,js验证信息,在获得验证信息之前需要获得jsapi_ticket,jsapi_ticket也有次数限制,处理方法跟之前的token一样

HttpServletRequest req = ServletActionContext.getRequest();//识别微信浏览器String userAgent=req.getHeader("User-Agent");//里面包含了设备类型if(-1==userAgent.indexOf("MicroMessenger")){//如果不是微信浏览器,跳转到安全页return "safePage";}//生成微信js授权MessageUtil msgUtil=new MessageUtil();String jsapi_ticket=msgUtil.getJsapiTicketFromWx();//签名String url = MessageUtil.webUrl+"*******Action.do?action=retrieve";Map<String, String> ret = MessageUtil.sign(jsapi_ticket, url);req.setAttribute("str1", ret.get("signature"));req.setAttribute("time", ret.get("timestamp"));req.setAttribute("nonceStr", ret.get("nonceStr"));

---------------------------------------------------------------------------------------------------------------

--------从微信获得jsapi_ticket

---------------------------------------------------------------------------------------------------------------

/*** 从微信获得jsapi_ticket* @return*/public  String getJsapiTicketFromWx(){String token=getTokenFromWx();//token//1、判断jsapi_ticket是否存在,不存在的话直接申请//2、判断时间是否过期,过期(>=7200秒)申请,否则不用请求直接返回以后的tokenif(null==jsapi_ticket||"".equals(jsapi_ticket)||(new Date().getTime()-jsapi_ticket_date.getTime())>=(7000*1000)){CloseableHttpClient httpclient = HttpClients.createDefault();try {//利用get形式获得tokenHttpGet httpget = new HttpGet("https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token="+token);// Create a custom response handlerResponseHandler<JSONObject> responseHandler = new ResponseHandler<JSONObject>() {public JSONObject handleResponse(final HttpResponse response) throws ClientProtocolException, IOException {int status = response.getStatusLine().getStatusCode();if (status >= 200 && status < 300) {HttpEntity entity = response.getEntity();if(null!=entity){String result= EntityUtils.toString(entity);//根据字符串生成JSON对象JSONObject resultObj = JSONObject.fromObject(result);return resultObj;}else{return null;}} else {throw new ClientProtocolException("Unexpected response status: " + status);}}};//返回的json对象JSONObject responseBody = httpclient.execute(httpget, responseHandler);if(null!=responseBody){jsapi_ticket= (String) responseBody.get("ticket");//返回token}jsapi_ticket_date=new Date();httpclient.close();}catch (Exception e) {e.printStackTrace();} }return jsapi_ticket;}

---------------------------------------------------------------------------------------------------------------

--------JsApi签名方法

---------------------------------------------------------------------------------------------------------------

/****微信js签名***********************************/public static Map<String, String> sign(String jsapi_ticket, String url) {Map<String, String> ret = new HashMap<String, String>();String nonce_str = create_nonce_str();String timestamp = create_timestamp();String string1;String signature = "";//注意这里参数名必须全部小写,且必须有序string1 = "jsapi_ticket=" + jsapi_ticket +"&noncestr=" + nonce_str +"×tamp=" + timestamp +"&url=" + url;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("url", url);ret.put("jsapi_ticket", jsapi_ticket);ret.put("nonceStr", nonce_str);ret.put("timestamp", timestamp);ret.put("signature", signature);return ret;}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);}/****微信js签名***********************************/

步骤一:引入JS文件

在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js

备注:支持使用 AMD/CMD 标准模块加载方法加载

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

所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)。

wx.config({debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。appId: '', // 必填,企业号的唯一标识,此处填写企业号corpidtimestamp: , // 必填,生成签名的时间戳nonceStr: '', // 必填,生成签名的随机串signature: '',// 必填,签名,见附录1jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});

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

wx.ready(function(){// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});

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

wx.error(function(res){// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。});

微信企业号开发七:JSAPI模式相关推荐

  1. python企业微信回调_Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例...

    本文实例讲述了Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息.分享给大家供大家参考,具体如下: 说明:此代码用于接收手机微信端发送的消息 #-*- coding:utf-8 ...

  2. 微信企业号开发:启用回调模式

    微信企业号开发怎样启用回调模式?就是简单的登陆PC版微信,点击应用中心,选择须要应用,再点击回调模式启用? 似乎不是这么简单.! 能够看到核心的仅仅有三个URL.Token,EncodingAESKe ...

  3. 企业微信回调服务器python,微信企业号开发:开启回调模式/Python判断信息-回复指定内容示例代码...

    1 注册微信企业号的步骤就省略了.很简单. 选择下面的应用中心,企业小助手,选择回调模式. 选择随机生成token AESKEY.地址输入你的服务器地址. 选择设置,新建管理组,然后就能看到COPID ...

  4. 微信企业号开发(七)---图片上传与下载

    1.微信企业号图片上传与下载是微信企业号上传临时素材文件中一个小部门,微信企业号上传临时素材文件包括上传图片.语音.视频等媒体资源文件以及普通文件(如doc,ppt),接口返回媒体资源标识ID:med ...

  5. 微信企业号开发之 企业号人员身份认证与开发

    前言 这里完全可以链接一个登录页面,让用户输入用户名密码进行登录的...2333 但是,这样所就完全失去了微信企业号的意义,本来进入微信企业号的时候,就已经对人员身份进行认证了,你这里再让别人登录,不 ...

  6. 微信企业号开发:接收消息和事件

    接收到的消息和事件,其实都是微信post到我们配置的URL的消息.接收普通消息就是用户给公众号发送的消息,事件是由于用户的特定操作,微信post给我们的消息.被动响应消息是我们收到微信post过来的普 ...

  7. 微信企业号三个连接模式

    在银行里做微信企业号开发有半年多了,因银行封装了调用微信企业号的方法,说是微信企业号开发,其实就是jsp,java代码的编写,银行用的开发工具是EOS,对这个工具我只想说,用久了,就找不到工作了. - ...

  8. Jeewx-Enterprise_1.1版本发布,开源微信企业号开发平台

    JEEWX企业号简介 JEEWX微信企业号开发平台是一款开源.免费.高效.敏捷的微信企业号开发平台,采用JAVA语言基于Jeecg快速开发框架实现,实现了微信企业号管理平台的基础功能,便于用户二次开发 ...

  9. 微信企业号开发(2)--建立连接(主动)

    [本文所描述的内容具有一定的时效性,请以实际开发所处环境为准] 在微信企业号开发(1)--基础入门中,我们已经学习了,我们的程序结构应该如何设计.接下来,我们会按照微信企业号开发者接口文档的顺序,逐一 ...

最新文章

  1. 解构 StyleCLIP:文本驱动、按需设计,媲美人类 P 图师
  2. Microsoft NLayerApp案例理论与实践 - 项目简“.NET研究”介与环境搭建
  3. JavaScript、Ajax与jQuery的关系
  4. 我的世界无人维护的服务器,我的世界:如何进入9年无人管理的2B2T?全球最大战争服务器!...
  5. layui 单选项 点击显示与隐藏 很实用
  6. python 绝对路径找不到文件_python获取文件绝对路径解决找不到文件句柄的问题实例(readConfig.py)V1.2...
  7. Kafka Streams 剖析
  8. fp-growth算法详解与实现
  9. 测试php连接mysql的实例实现
  10. 蓝桥杯 Java 自行车停放(双向链表解法)
  11. 薪酬管理系统功能描述文档
  12. Spark总结之RDD(四)
  13. 修改Firefox收藏夹位置
  14. 学习记录:七大测试原则笔记
  15. VMware安装虚拟机详细教程
  16. android加入聊天功能,app实现聊天功能 - houwanmin的个人空间 - OSCHINA - 中文开源技术交流社区...
  17. 强强联合,跨界而来,2022苏州元宇宙大会重启!
  18. python跳到微软商城解决 cocos 所有指令没有反应解决方法
  19. 办公软件excel表格_推荐这个免费的Excel共享编辑办公软件,操作很灵活、功能很全...
  20. 【Java】输出打印正直角三角形和倒直角三角形

热门文章

  1. 未来计算机取代教师,三、综合运用阅读下面材料,完成下列小题未来是“人机共教”的时代。教师作为一种职业不会被取代,并不意味着所有教师都不会被淘汰重复性、机械性工作都可以交给人工智能,-组卷网...
  2. 《MySQL DBA修炼之道》——2.2 官方版本的安装
  3. 常用crc查表法_请教查表法计算CRC的原理
  4. 常见却可能无意间伤人的 8 句话
  5. GMM Kmeans代码示例
  6. 【iMessage苹果相册推日历真机推】改成vue的MVVM模式现在前端趋向是去dom化
  7. 第五---七章 交换机和路由器的基本配置
  8. CRM 学习笔记(一)
  9. 高品质蓝牙耳机排行榜,值得入手的四款蓝牙耳机分享
  10. 卷积神经网络在物联网场景中的应用初探