微信公众号开发 ----微信网页开发config接口注入(3)
步骤一:绑定域名
步骤二:引入JS文件
在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.4.0.js
如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:http://res2.wx.qq.com/open/js/jweixin-1.4.0.js (支持https)。
备注:支持使用 AMD/CMD 标准模块加载方法加载
步骤三:通过config接口注入权限验证配置
需要以下配置信息
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯一标识
timestamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '',// 必填,签名
jsApiList: [] // 必填,需要使用的JS接口列表
});
1.首先要获取一个jsapi_ticket 通过之前获得的access_token 来获取
/**
* 根据access_token 取得jsapi_ticket
* @return
*/
public static String getJsapiTicket() {
//之前的取得access_token 方法 (两种,这里用的是无code的那种)
String access_token = getAccessToken();
// "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+access_token+"&type=jsapi";
StringBuffer sb = new StringBuffer();
//头
sb.append("https://api.weixin.qq.com/cgi-bin/ticket/getticket?");
//access_token
sb.append("access_token=" + access_token);
//appID
sb.append("&type=jsapi");
String backData = HttpClientUtil.doGet(String.valueOf(sb));
String jsapiTicket = (String) JSONObject.fromObject(backData).get("ticket");
return jsapiTicket;
}
2.通过jsapi_ticket 生成签名,生成配置需要的参数
/**
* @param url 注入页面url
* @return
*/
@Override
public Map<String, String> getConfigSign(String url) {
WechatPayConfig wechatConfig = new WechatPayConfig();
Map<String, String> ret = new HashMap<String, String>();
//取得jsapi_ticket
String jsapi_ticket = wechatJSSDK.getJsapiTicket();
//随机字符串
String nonce_str = WXPayUtil.generateNonceStr();
//时间戳
String timestamp = wechatJSSDK.getTimestamp();
String string1;
String signature = "";
//config接口注入签名 第一次签名 注意这里参数名必须全部小写,且必须有序
string1 = "jsapi_ticket=" + jsapi_ticket +
"&noncestr=" + nonce_str +
"×tamp=" + timestamp +
"&url=" + url;
signature = wechatJSSDK.getSha1(string1);
log.info("第一次wx.config签名:" + signature);
ret.put("url", url);//公众号的唯一标识
ret.put("appId", wechatConfig.getAppID());
ret.put("jsapi_ticket", jsapi_ticket);
ret.put("nonceStr", nonce_str);// 必填,生成签名的随机串
ret.put("timestamp", timestamp);// 必填,生成签名的时间戳
ret.put("signature", signature);// 必填,生成的签名
return ret;
}