基于Java spring框架的微信企业号开发中关于js-sdk的配置

  在调用js-sdk的第一步,我们需要引入js-sdk的js链接,然后执行wx.config,官方示例如下所示:

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

一、分析参数:

1. appId我们可以通过后端读取配置文件读取出来传递到前端。

2. timestamp是前端生成还是后端生成都OK,我这里是用的异步获取签名等参数,所以我这个案例是使用前端生成时间戳。

3. nonceStr是一个随机串,java中采用UUID来生成这个随机串。

4. signature是一个签名,这个是需要java后端根据以上三个参数来组成一个字符串,然后再对这个字符串进行sha1加密得到的。微信官方还给出了一个用于在线校验签名的工具

二、后端接口部分:

1. 我们需要直接准备的是 appId 、secret、noncestr,appId 在企业号中为 CorpId,这两个参数可以从微信企业号后台得到。noncestr 为随机串,采用UUID生成,方法如下:

public static String create_noncestr() {
    return UUID.randomUUID().toString();
}

2. 因为最终需要正确地生成signature签名,而生成签名需要四个参数,即 jsapi_ticket、noncestr、timestamp、url,在这四个参数重,jsapi_ticket是需要获取到的,而获取jsapi_ticket又需要先获取到access_token,所以以下代码就依次获取这些参数来做一个展示:

  1         /**
  2      * 获取access_token
  3      * @param request
  4      * @param response
  5      * @throws Exception
  6      */
  7     @RequestMapping("/getAccessToken")
  8     public void getAccessToken(HttpServletRequest request, HttpServletResponse response) throws Exception {
  9         String urlStr = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+CORPID+"&corpsecret="+CORPSECRET;
 10         processUrl(response, urlStr);
 11     }
 12
 13     /**
 14      * 获取jsapi_ticket
 15      * @param request
 16      * @param response
 17      * @throws Exception
 18      */
 19     @RequestMapping("/getJsapiTicket")
 20     public void getJsapiTicket(HttpServletRequest request, HttpServletResponse response) throws Exception {
 21         String access_token = request.getParameter("access_token");
 22         String urlStr = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token="+access_token;
 23         processUrl(response, urlStr);
 24     }
 25
 26     /**
 27      * 获取签名signature
 28      * @param request
 29      * @param response
 30      * @throws Exception
 31      */
 32     @RequestMapping("/getJsSdkSign")
 33     public void getJsSdkSign(HttpServletRequest request, HttpServletResponse response) throws Exception {
 34         String noncestr = request.getParameter("noncestr");
 35         String tsapiTicket = request.getParameter("jsapi_ticket");
 36         String timestamp = request.getParameter("timestamp");
 37         String url = request.getParameter("url");
 38         String jsSdkSign = getJsSdkSign(noncestr, tsapiTicket, timestamp, url);
 39         PrintWriter out = response.getWriter();
 40         out.print(jsSdkSign);
 41     }
 42
 43     private void processUrl(HttpServletResponse response, String urlStr) {
 44         URL url;
 45         try {
 46             url = new URL(urlStr);
 47             URLConnection URLconnection = url.openConnection();
 48             HttpURLConnection httpConnection = (HttpURLConnection)URLconnection;
 49             int responseCode = httpConnection.getResponseCode();
 50             if (responseCode == HttpURLConnection.HTTP_OK) {
 51                 InputStream urlStream = httpConnection.getInputStream();
 52                 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlStream));
 53                 String sCurrentLine = "";
 54                 String sTotalString = "";
 55                 while ((sCurrentLine = bufferedReader.readLine()) != null) {
 56                     sTotalString += sCurrentLine;
 57                 }
 58                 PrintWriter out = response.getWriter();
 59                 out.print(sTotalString);
 60             }else{
 61                 System.err.println("失败");
 62             }
 63         } catch (Exception e) {
 64             e.printStackTrace();
 65         }
 66     }
 67
 68         /**
 69      * 获得加密后的签名
 70      * @param noncestr
 71      * @param tsapiTicket
 72      * @param timestamp
 73      * @param url
 74      * @return
 75      */
 76     public static String getJsSdkSign(String noncestr,String tsapiTicket,String timestamp,String url){
 77         String content="jsapi_ticket="+tsapiTicket+"&noncestr="+noncestr+"&timestamp="+timestamp+"&url="+url;
 78         String ciphertext=getSha1(content);
 79
 80         return ciphertext;
 81     }
 82
 83     /**
 84      * 进行sha1加密
 85      * @param str
 86      * @return
 87      */
 88     public static String getSha1(String str){
 89         if(str==null||str.length()==0){
 90             return null;
 91         }
 92         char hexDigits[] = {‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,
 93                 ‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘};
 94         try {
 95             MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
 96             mdTemp.update(str.getBytes("UTF-8"));
 97
 98             byte[] md = mdTemp.digest();
 99             int j = md.length;
100             char buf[] = new char[j*2];
101             int k = 0;
102             for (int i = 0; i < j; i++) {
103                 byte byte0 = md[i];
104                 buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
105                 buf[k++] = hexDigits[byte0 & 0xf];
106             }
107             return new String(buf);
108         } catch (Exception e) {
109             // TODO: handle exception
110             return null;
111         }
112     }
113
114     /**
115      * 获得随机串
116      * @return
117      */
118     public static String create_noncestr() {
119         return UUID.randomUUID().toString();
120     }

三、前端请求部分:

 1 var weixin = false;
 2 $.ajax({
 3         dataType:"json",
 4         url: "${ctx.contextPath}/wechat/getAccessToken",
 5         success: function(data){
 6              $.getJSON("${ctx.contextPath}/wechat/getJsapiTicket",
 7                   {
 8                     access_token:data.access_token  //获取的access_token
 9                   },
10                   function(result){
11                       var time=parseInt((new Date().getTime())/1000);
12                       $.get("${ctx.contextPath}/wechat/getJsSdkSign",
13                         {
14                             noncestr:"${noncestr!""}",
15                             jsapi_ticket:result.ticket,//获取的jsapi_ticket
16                             timestamp:time,
17                             url:location.href.split(‘#‘)[0]
18                         },
19                         function(sign){
20                             wx.config({
21                           debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
22                           appId: ‘${appId!""}‘, // 必填,企业号的唯一标识,此处填写企业号corpid
23                           timestamp: time, // 必填,生成签名的时间戳
24                           nonceStr: ‘${noncestr!""}‘, // 必填,生成签名的随机串
25                           signature: sign,// 必填,签名,见附录1
26                           jsApiList: [‘uploadImage‘, ‘chooseImage‘] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
27                       });
28                         }
29                       );
30                   }
31                );
32             },
33         error:function(XMLHttpRequest, textStatus, errorThrown){
34         }
35     });
36  wx.ready(function(){
37      weixin = true;
38  });

ps:案例仅供参考,接口因人而异。谢谢大家~

fullStack.yang

2016-12-26于成都高新区天府软件园

时间: 2024-10-12 14:51:20

基于Java spring框架的微信企业号开发中关于js-sdk的配置的相关文章

基于java spring框架开发部标1078视频监控平台精华文章索引

部标1078视频监控平台,是一个庞杂的工程,涵盖了多层协议,部标jt808,jt809,jt1078,苏标Adas协议等,多个平台功能标准,部标796标准,部标1077标准和苏标主动安全标准,视频方面的协议有RTSP, RTMP, RTP, 音视频编码有H.264, AAC,  726,711等,消化这些协议和功能标准就已经是需要一个较长的周期了,而构建一个视频平台的架构,也是比较复杂的,后端不仅有网关,还要有流媒体服务器,转发服务器,播放器,RTSP或RTMP服务器等多个服务器模块,需要的技术

java Spring Boot企业微信点餐系统

 java Spring Boot企业微信点餐系统 后端开发: 1.2017龙果微服务架构的分布式事务解决方案 2.2017年龙果spring boot 入门实战视频教程-首套中文教程 3.51CTO Spring Boot实战与原理分析视频课程 4.ElasticSearch5视频教程 5.Elasticsearch顶尖高手系列:高手进阶篇(最新第二版) 6.IDEA学习视频 7.Java 微服务实践 - Spring Boot 系列 8.JAVA-ACE-架构师系列视频课程-RocketMQ

[转载]微信企业号开发如何建立连接

连接将使你的企业号更具价值,你可以使用以下三种方式,连接你的企业号及企业应用: 1.企业应用调用企业号提供的接口,管理或查询企业号后台所管理的资源.或给成员发送消息等,以下称主动调用模式. 2.企业号把用户发送的消息或用户触发的事件推送给企业应用,由企业应用处理,以下称回调模式. 3.用户在微信中阅读企业应用下发的H5页面,该页面可以调用微信提供的原生接口,使用微信开放的终端能力,以下称JSAPI模式. 通过这三种连接方式的结合,你可以在企业号中建立功能强大的移动轻应用,并依托微信数亿活跃用户,

微信企业号开发之-如何获取secret 序列号

最近有项目基于微信企业号开发,简单记录下如何查看企业号secert 工具/原料 微信企业号 方法/步骤  用管理员的帐号登录后,选择[设置]-[权限管理]进入管理组设置界面  在左边点击[新建管理组],新建一个管理组(这里必须新建一个管理组,因为系统管理组是无法获取权限的)   新建好管理组后,根据实际情况需要设置管理权限,在右边页面的最下面就可以看到secret END 注意事项 必须新建管理组 默认的组看不到secert 注:每个分组有一个独立的secert

.net之微信企业号开发(一) 所使用的环境与工具以及准备工作

前言 一直以来,从事的是.net winform的编程,虽然对移动互联这块很感兴趣,但是由于现有的工作和移动互联之间隔的太远,也就没有时间和精力好好的去研究和实现.今年年初辞职了,刚好朋友那里希望建立一套新的网点销售管理系统,将原有的PC中的一些东西,移植到手机终端来.于是我接受了这个任务,除了给他们搭建新系统外,也慢慢的接触到了移动互联应用,开始了我的移动互联征程. 由于WEB应用本身的局限性,同时自身也不具备多个平台开发APP的精力和实力.我选择了微信的企业号开发.对于微信这样一个普及很广的

微信企业号开发之回调模式的接口开发

一.前言 微信企业号应用中,有两种模式,一种是普通模式,这种模式只能进行简单网页链接,以及发送固定的消息.为了可以让企业号的用户更好的与应用交互,微信提供了回调模式,这种回调模式的可以将用户发送给微信的信息,转发到用户提供的一个回调接口上,该接口解析用户发送过来的信息,解析后进行相应,而且回调模式中,可以调用的东西不少,扫码,图片,视频,地理位置信息等. 在应用的模式下,选择回调模式,之后,需要设置3个参数(1.回调接口URL:2.token:3.ASESKey),URL就是提供的回调接口,微信

Force.com微信企业号开发系列(一) - 启用二次验证

微信于9月份推出企业号后引起了业界不小的反响,许多企业都在思索企业号将如何影响企业的运营,从本文开始,我将详细阐述微信企业号开发的相关知识,而本文将着重介绍如何实现更高安全机制的二次验证. 申请企业体验号: 企业号顾名思义就是企业来申请的号,申请时就像申请服务号一样,需要提供各种组织证明文件,对广大开发者来说很难操作,好在腾讯公司也像服务号一样开通了体验号申请,留意企业体验号的有效期间非常短,只有90天(服务号测试账号有1年有效期),且如果企业体验号长期不使用还会收到腾讯公司的提前失效提醒邮件.

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

前言 这里完全可以链接一个登录页面,让用户输入用户名密码进行登录的...2333 但是,这样所就完全失去了微信企业号的意义,本来进入微信企业号的时候,就已经对人员身份进行认证了,你这里再让别人登录,不是显得多余么? 于是,需要考虑的是,如何获取微信企业号中用户的身份,以及将用户身份与自有系统进行关联. 一.建立企业应用并配置可信域名 在微信的管理界面里面,建立一个企业应用.建立的过程很简单,但是这里需要注意的是,建立完以后,一定要配置可信域名!!!!并且如果你不是使用的标准端口,一定也要把端口配

.net之微信企业号开发(二) 企业号人员身份认证与开发

前言 这里完全可以链接一个登录页面,让用户输入用户名密码进行登录的...2333 但是,这样所就完全失去了微信企业号的意义,本来进入微信企业号的时候,就已经对人员身份进行认证了,你这里再让别人登录,不是显得多余么? 于是,需要考虑的是,如何获取微信企业号中用户的身份,以及将用户身份与自有系统进行关联. 一.建立企业应用并配置可信域名 在微信的管理界面里面,建立一个企业应用.建立的过程很简单,但是这里需要注意的是,建立完以后,一定要配置可信域名!!!!并且如果你不是使用的标准端口,一定也要把端口配