最近微信开发遇到个问题,有个需要授权的页面分享失败了,之前一直都是好好的,完整链接类似这种:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_base&state=123#wechat_redirect
上网查了才知道微信近期做了调整,如下
详细参考:http://mp.weixin.qq.com/s/hAdtKl2i4ilyo9HxT1kXyw
我的解决思路是:
单独做一个转发页面,通过转发链接进入这个转发页面后,再直接跳转到拼接好的授权页面。直接上代码:
这是分享的代码:
var link = "http://"+window.location.host+"/pwxweb/share.html?shareurl="+encodeURIComponent(url)+"&appId="+appId+"&state="+state;
wx.onMenuShareAppMessage({// 分享给朋友
title : shtitle, // 分享标题
desc : shdesc, // 分享描述
link : link, // 分享链接
imgUrl : urlImg, // 分享图标
type : '', // 分享类型,music、video或link,不填默认为link
dataUrl : '', // 如果type是music或video,则要提供数据链接,默认为空
success : function() {
// 用户确认分享后执行的回调函数
},
cancel : function() {
// 用户取消分享后执行的回调函数
}
});
这是单独的分享页面:
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> </head> <script> function getQueStr(url, ref) {//取获参数值 var str = url.substr(url.indexOf('?') + 1); if (str.indexOf('&') != -1) { var arr = str.split('&'); for (i in arr) { if (arr[i].split('=')[0] == ref) return arr[i].split('=')[1]; } } else { return url.substr(url.indexOf('=') + 1) } } function delQueStr(url, ref) {//删除参数值 var str = ""; if (url.indexOf('?') != -1) str = url.substr(url.indexOf('?') + 1); else return url; var arr = ""; var returnurl = ""; var setparam = ""; if (str.indexOf('&') != -1) { arr = str.split('&'); for (i in arr) { if (arr[i].split('=')[0] != ref) { returnurl = returnurl + arr[i].split('=')[0] + "=" + arr[i].split('=')[1] + "&"; } } return url.substr(0, url.indexOf('?')) + "?" + returnurl.substr(0, returnurl.length - 1); } else { arr = str.split('='); if (arr[0] == ref) return url.substr(0, url.indexOf('?')); else return url; } } //引导用户授权 (function(){ var url = window.location.href //重复转发去除之前url里的code和state参数 var redirect_uri = delQueStr(delQueStr(decodeURIComponent(getQueStr(url, "shareurl")),"code"), "state"); var appid = getQueStr(url, "appId"); var state = getQueStr(url, "state"); url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +appid+"&redirect_uri="+encodeURIComponent(redirect_uri)+"&response_type=code&scope=snsapi_userinfo"+"&state="+state+"#wechat_redirect"; window.location.href = url; })(); </script> <body> </body> </html>
这样的改动对原来的代码没有什么侵入性,希望能帮助到遇到同样问题的人