博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信企业号 调用 JS-SDK 实现接口功能
阅读量:6178 次
发布时间:2019-06-21

本文共 5350 字,大约阅读时间需要 17 分钟。

hot3.png

思路:调用微信的 js-sdk 接口最重要的是要实现 config 接口 。并且持久化配置如下三个参数

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

另外,借用

weixin-java-tools

这个开源项目。做开发

一、按照面向对象将这些参数持久化

     WxJsapiSignature

package me.chanjar.weixin.common.bean;import java.io.Serializable;/** * jspai signature * 说明:这里借用Chanjar 开源企业号开发的方法。http://www.oschina.net/p/weixin-java-tools */public class WxJsapiSignature implements Serializable {  private String noncestr;  private String jsapiTicket;  private long timestamp;  private String url;  private String signature;  public String getSignature() {    return signature;  }  public void setSignature(String signature) {    this.signature = signature;  }  public String getNoncestr() {    return noncestr;  }  public void setNoncestr(String noncestr) {    this.noncestr = noncestr;  }  public String getJsapiTicket() {    return jsapiTicket;  }  public void setJsapiTicket(String jsapiTicket) {    this.jsapiTicket = jsapiTicket;  }  public long getTimestamp() {    return timestamp;  }  public void setTimestamp(long timestamp) {    this.timestamp = timestamp;  }  public String getUrl() {    return url;  }  public void setUrl(String url) {    this.url = url;  }}

二、根据微信提供方法生成 signature

2.1生成随机字符串
package me.chanjar.weixin.common.util;/**说明:这里借用Chanjar 开源企业号开发的方法。http://www.oschina.net/p/weixin-java-tools*/public class RandomUtils {  private static final String RANDOM_STR = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";  private static final java.util.Random RANDOM = new java.util.Random();  public static String getRandomStr() {    StringBuilder sb = new StringBuilder();    for (int i = 0; i < 16; i++) {      sb.append(RANDOM_STR.charAt(RANDOM.nextInt(RANDOM_STR.length())));    }    return sb.toString();  }}
/*** * 用于获得调用微信js api 接口生成签名准备 * 说明:这里借用Chanjar 开源企业号开发的方法。http://www.oschina.net/p/weixin-java-tools * ***/  public WxJsapiSignature createJsapiSignature(String url) throws WxErrorException {    long timestamp = System.currentTimeMillis() / 1000;    String noncestr = RandomUtils.getRandomStr();    String jsapiTicket = getJsapiTicket(false);    try {      String signature = SHA1.genWithAmple(          "jsapi_ticket=" + jsapiTicket,          "noncestr=" + noncestr,          "timestamp=" + timestamp,          "url=" + url      );      WxJsapiSignature jsapiSignature = new WxJsapiSignature();      jsapiSignature.setTimestamp(timestamp);      jsapiSignature.setNoncestr(noncestr);      jsapiSignature.setUrl(url);      jsapiSignature.setSignature(signature);      return jsapiSignature;    } catch (NoSuchAlgorithmException e) {      throw new RuntimeException(e);    }  }
  /*** * 用于获得调用微信js api 接口生成签名准备 * 说明:这里借用Chanjar 开源企业号开发的方法。http://www.oschina.net/p/weixin-java-tools * ***/ public String getJsapiTicket(boolean forceRefresh) throws WxErrorException {    if (forceRefresh) {      wxCpConfigStorage.expireJsapiTicket();// wxCpConfigStorage 这个类,主要用于存储一些重要的需要被共享或者同步更新的参数。expireJsapiTicket()这个方法就是将参数的有效期时间更新为0或者负数    }    if (wxCpConfigStorage.isJsapiTicketExpired()) {      synchronized (globalJsapiTicketRefreshLock) {//申明一个对象用于同步锁用。 protected final Object globalJsapiTicketRefreshLock = new Object();        if (wxCpConfigStorage.isJsapiTicketExpired()) {          String url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket";          String responseContent = execute(new SimpleGetRequestExecutor(), url, null);          JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent)));//返回数据json化          JsonObject tmpJsonObject = tmpJsonElement.getAsJsonObject();                    String jsapiTicket = tmpJsonObject.get("ticket").getAsString();          int expiresInSeconds = tmpJsonObject.get("expires_in").getAsInt();          wxCpConfigStorage.updateJsapiTicket(jsapiTicket, expiresInSeconds);        }      }    }    return wxCpConfigStorage.getJsapiTicket();  }

三、根据访问的URL 动态生成签名

备注:这里才有spring框架,也可以不用。

/** * 微信js-api 用于获得jsticket ** js url 是用于生成调用js api的签名的url*/	@RequestMapping(value = "/wechat.do")	public void JsApiGet(@RequestParam String url,HttpServletResponse response) {// 用于ajax 请求的时候获得相关数据,url 为需要生成签名的。			  				  							// 异构的时候返回jsticket		 Writelog.writetolog("进来wechat.do:"+url);		if (null != url && !url.equals("")) {// 如果获取加密的URL 不为空			try {				Writelog.writetolog("jsurl:"+url);// 获取连接的url				WxJsapiSignature wxjssignature = wxserv						.createJsapiSignature(url);// 根据添加的url 生成signature               Gson gson=new Gson();//实例化 Gson 对象,借用Google 的json jar包               String signatureString=gson.toJson(wxjssignature);               Writelog.writetolog("signatureString:"+signatureString);// 获取连接的url               PrintWriter out = response.getWriter();//输出数据到response里面                out.write(signatureString);            //返回 json 化的对象的数据			} catch (WxErrorException e) {				// TODO Auto-generated catch block				e.printStackTrace();			} catch (IOException e) {				// TODO Auto-generated catch block				e.printStackTrace();			}					}	}

转载于:https://my.oschina.net/u/2308739/blog/468966

你可能感兴趣的文章
利用vue-gird-layout 制作可定制桌面 (一)
查看>>
校园社交网站app
查看>>
如何指定某些文件关闭ARC
查看>>
4、跃进表
查看>>
JAVA面向对象的总结(静态函数与static关键字)
查看>>
课堂作业第四周课上作业一
查看>>
使用Java语言开发微信公众平台(七)——音乐消息的回复
查看>>
陶哲轩实分析习题9.1.6
查看>>
常用音频软件:Cool edit pro
查看>>
努力的方向,除了诗和远方,还有一堆技术。
查看>>
SQL CHECK 约束
查看>>
git提交到一半关闭时
查看>>
WMware 10 Ubuntu 12.04 进入Unity模式
查看>>
简单通用的访问CVS的方法
查看>>
kbengine mmo源码(完整服务端源码+资源+完整客户端源码)
查看>>
【操作系统】实验四 主存空间的分配和回收
查看>>
Log4j 配置 的webAppRootKey参数问题
查看>>
VMware ESXi 5.0中时间配置中NTP设置
查看>>
C++中memset()函数笔记
查看>>
oracle sql 数结构表id降序
查看>>