0411-39943997
工作时间:周一至周日 8:30-17:30
技术文库
Technical Library

微信 JS SDK 校验签名成功 但手机上依然会报 签名错误 的原因

标签: 微信 JS SDK 校验签名成功 签名错误   访问: 14962017-09-08

相信许多的朋友做开发的过程中会遇到这样的问题,用微信官方提供的工具校验签名:(http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign)成功。但是在手机端一直报 invalid signature 签名错误。这不是很矛盾吗?官方工具都说正确了,然后你还给我报这个签名错了!!!网上找了好多的答案,一定是我理解能力低下,一直没明白。但他的提到最多的是参与生成签名的 URL 存在问题。而我一直在怀疑在点击 分享的时候微信会在当前的URL上加上什么参数。因为微信官方一直强调要动态获取。可是经过一段时间的测试,发现并没有加上什么参数。那为什么呢,直到我最后在官方的工具页面发现了这句话:


6631465788909153210.png
我的测试网址为:http://abc.xxxxxxxxxx.com   在地址栏也是这样显示的。但是实际上我后台用了 Request.Url.ToString().Split('#')[0];   结果是:http://abc.xxxxxxxxxx.com/default.aspx我根据官方的说法,试着将URL 写死一次试试:http://abc.xxxxxxxxxx.com/结果通过了。我这下才真正的明白,参与生成签名的URL的真面目了,是获取地址栏的URL。那为什么要动态获取吗?原因是当你把要分享的页面分享出去的时候,微信会在地址栏上加上一些参数。如果写死,当朋友点击你分享的链接时也想分享的话,这时又会出现签名错误了。请注意,这里所说的加上了参数,发生的时间点。

总结:
在.net 中没有直接获取地址栏信息的方法。
   Request.ApplicationPath:                                 /testweb   
   Request.CurrentExecutionFilePath:               /testweb/default.aspx   
   Request.FilePath:                                               /testweb/default.aspx   
   Request.Path:                                                       /testweb/default.aspx   
   Request.RawUrl:                                                   /testweb/default.aspx   
   Request.Url.AbsolutePath:                               /testweb/default.aspx   
   Request.Url.AbsoluteUrl:                                 http://www.test.com/testweb/default.aspx   
   Request.Url.Host:                                               www.test.com   
   Request.Url.LocalPath:                                     /testweb/default.aspx  

如果你的网址是:   http://abc.xxxxxxxxxx.com/
分享后的地址:http://abc.xxxxxxxxxx.com/?from=singlemessage&isappinstalled=0

我的处理方法是这样的,有点笨,但好用:

            url = Request.Url.ToString().Split('#')[0];
            if (url == "http://abc.xxxxxxxxxx.com/default.aspx")
            {
                url = "http://abc.xxxxxxxxxx.com/";
            }
            else
            {
                url = url.Replace("default.aspx", "");
            }


Copyright© 2020 仟亿科技,All rights reserved.