微信jdk URL存在中文,获取微信JS-SDK接口config时报invalid signature签名

从A页面传送ID和Name到B页面,路径如下

http://www.XXX.com/wx/CustomerEdit?CustomerID=694&CustomerName=%E9%9B%84%E7%8B%AE%E6%97%85%E8%A1%8C%E7%A4

到达B页面后调用微信JDK接口,多次尝试失败"报invalid signature签名 "错误.

经过一番检查发现http://www.XXX.com/wx/CustomerEdit?CustomerID=694访问没问题

那么就是中文转义的问题!

查看google浏览器的地址栏地址http://www.XXX.com/wx/CustomerEdit?CustomerID=694&CustomerName=自动转义的中文

后台跟踪,默认asp.net会自动转义,将前台传送的字符解密.

处理:

将Request.Url更换为Request.Url.AbsoluteUri去实现signature生成

原因如下

UriBuilder builder = new UriBuilder("http://xxx/xxx");
builder.Query = "somekey=" + HttpUtility.UrlEncode("some+value");
Uri someUri = builder.Uri;
Response.Write("<p>" + someUri.AbsoluteUri + "</p>");
Response.Write("<p>" + someUri.ToString() + "</p>");


http://xxx/xxx?somekey=some%2bvalue

http://xxx/xxx?somekey=some+value
  • 可以看出 AbsoluteUri 是经过编码的,如果访问这个网址,再取 somekey 的值,结果为“some+value”,
  • 符合原值。
  •  
  • 而 ToString() 是取原值,如果访问这个网址,再取 somekey 的值时,结果为“some value”,
  • 与原值不符。
  •  
  • 如果要在微信中使用Uri,则使用 AbsoluteUri;如果要获得未编码的 Uri,则直接使用 Uri.ToString().
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值