一、微信公众号
获取appid,secret
二、设置JS接口安全域名
公众号设置-》功能设置-》JS接口安全域名
三、设置白名单
基本设置-》IP白名单
这个不设置获取不了TOKEN
四、获取签名相关
@GetMapping(path = "getWxInfo")
public CommonResult getWxInfo(String url) {
CommonResult result = new CommonResult();
if (obj != null) {
Map map = new HashMap();
map.putAll((Map)obj);
result.setData(map);
} else {
String hp = get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + DEFAULT_SOCIAL_WEIXIN_Tmp_APP_ID + "&secret=" + DEFAULT_SOCIAL_WEIXIN_Tmp_APP_SECRET + "");
JSONObject json = JSON.parseObject(hp);
if (null != json.get("access_token")) {
String ticket = get("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + json.get("access_token") + "&type=jsapi");
JSONObject json1 = JSON.parseObject(ticket);
if (null != json1.get("ticket")) {
Map map = Sign.sign(json1.get("ticket").toString(), url);
result.setData(map);
}
}
}
return result;
}
public static String get(String urlStr) {
HttpGet get = new HttpGet(urlStr);
try {
HttpClient client = HttpClients.createDefault();
HttpResponse response = client.execute(get);
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity, "UTF-8");
System.out.print(result);;
return result;
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
签名一天只多2000次,时间为7200秒,可以用REDIS缓存
五、HTML页面
<script src="https://res2.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
<script>
wx.config({
debug: false, //是否 开启调试模式,建议调试的时候debug 改为true
appId: 'xxxxx', // 必填,公众号的唯一标识
timestamp: '1556602084', // 必填,生成签名的时间戳
nonceStr: '96e2140a-be7f-4d61-a1e5-123a7898476e', // 必填,生成签名的随机串
signature: 'a1545d56ae3c5d2d388e20ba4a92e5bda74e11ed', // 必填,签名,见附录1
jsApiList: [
'checkJsApi',
'updateAppMessageShareData',
'updateTimelineShareData',
'onMenuShareAppMessage',
'onMenuShareTimeline',
'showOptionMenu',
] // 必填,需要使用的JS接口列表 声明
});
wx.error(function(res) {
// alert("微信接口初始化失败;错误信息:"+res.toString());
});
window.onload = function() {
// alert("当前域名是:"+url);
}
wx.ready(function() {
//wx.onMenuShareAppMessage({
wx.updateAppMessageShareData({
debug: false,
title: '分享标题', // 分享标题
desc: '分享描述', // 分享描述
link: "", // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: "", // 分享图标
success: function() {
// 用户点击了分享后执行的回调函数
}
});
wx.updateTimelineShareData({
debug: false,
title: '分享标题', // 分享标题
desc: '分享描述', // 分享描述
link: "", // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: "", // 分享图标
success: function() {
// 用户点击了分享后执行的回调函数
}
});
});
</script>
为了好看明白,这里是写死的签名信息,
//wx.onMenuShareAppMessage({
wx.updateAppMessageShareData({ 微信开发工具不支持这个方法,手机微信支持,开发工具onMenuShareAppMessage
备注:检查签名URLhttps://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign
要分享的URL必须是当前签名的URL,不能用aURL的签名分享bURL的链接
若是检查签名没错,报invalid sign,
一、检查公众号是否完成验证,拥有权限
二、检查签名的URL与分享URL,微信上输入http://www.baidu.com实际打开的地址是http://www.baidu.com/ 后面会多个斜杠
var url1 =location.href.split('#')[0];
三、检查HTML wx.config里的大小写是否正确,jsApiList里是否有相应方法。