微信授权回调时,回调地址中原有参数丢失
近日在做登录微服务的时候,需要做微信授权认证.出现各种坑,(有坑才有成长). 之前一直是只带有一个参数, 没有发现任何问题, 今天在测试项目一些功能时,发现授权后的回调地址中,丢失了原有的参数. 授权页时显示回调地址中参数有2个,当点击确认授权按钮后, 参数剩了一个了.网上没有查到相关问题解决方案,文档上也没有明确记录. 经多方测试,老大指点后.问题终于得到解决.现...
近日在做登录微服务的时候,需要做微信授权认证.出现各种坑,(有坑才有成长).
之前一直是只带有一个参数, 没有发现任何问题, 今天在测试项目一些功能时,发现授权后的回调地址中,丢失了原有的参数. 授权页时显示回调地址中参数有2个,当点击确认授权按钮后, 参数剩了一个了.网上没有查到相关问题解决方案,文档上也没有明确记录. 经多方测试,老大指点后.问题终于得到解决.现记录于下.以作错误的经验总结,也给类似问题的同行一个简单的方案或者思路.
先看下服务器抓到的日志信息;
上图明显的可以看出, 授权后参数剩下一个了;为什么回调地址经过编码后,还会出现这样的问题呢?刚一开始还以为是微信的问题, 限制传多个参数.后来想想不可能这么low. 后来老大说,你查看下你的编码.然后就统一检查了所有需要编码的地方,都经过编码了,但是还存在这样的问题. 但是,但是有一个地方,就是在拼接的时候, 为了省事,先进行了拼接,后编码. 这时,将统一编码改为分布编码,然后再拼接.OK,问题解决. 看来有时候真是不能偷懒呀!
看下错误的写法:
正确写法:
这里需要做两次编码处理.引以为戒呀!
string platFormAppId = oPlatFormInfo.PlatFormAppId;
string redirectUrl = System.Web.HttpUtility.UrlEncode(oPlatFormInfo.RedirectUri + "?uId=" + adminsId + "&channelCompanyId=123", System.Text.Encoding.UTF8);//如果需要带多个参数,需要对redirectUrl编码
string pre_auth_code = _wechatOpenService.GetPreAuthCode();//预授权码
if (!String.IsNullOrEmpty(pre_auth_code))
{
authUrl = _wechatOpenService.GetComponentLoginPageUrl(platFormAppId, pre_auth_code, redirectUrl);
}
转载自:https://blog.csdn.net/lengtianya/article/details/76222631
更多推荐
所有评论(0)