<legend id="h4sia"></legend><samp id="h4sia"></samp>
<sup id="h4sia"></sup>
<mark id="h4sia"><del id="h4sia"></del></mark>

<p id="h4sia"><td id="h4sia"></td></p><track id="h4sia"></track>

<delect id="h4sia"></delect>
  • <input id="h4sia"><address id="h4sia"></address>

    <menuitem id="h4sia"></menuitem>

    1. <blockquote id="h4sia"><rt id="h4sia"></rt></blockquote>
      <wbr id="h4sia">
    2. <meter id="h4sia"></meter>

      <th id="h4sia"><center id="h4sia"><delect id="h4sia"></delect></center></th>
    3. <dl id="h4sia"></dl>
    4. <rp id="h4sia"><option id="h4sia"></option></rp>

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

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

        标签: 微信 JS SDK 校验签名成功 签名错误  访问: 17192017-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© 2015 仟亿科技,All rights reserved.