微信分享非安全域名链接导致分享失败

最近微信开发遇到个问题,有个需要授权的页面分享失败了,之前一直都是好好的,完整链接类似这种:

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>



这样的改动对原来的代码没有什么侵入性,希望能帮助到遇到同样问题的人

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值