你的位置:首页 > ASP.net教程

[ASP.net教程]微信公众账号 token 验证失败 解决办法


 问题:微信公众账号 开发过程中配置  token 提示 验证失败

如下图:

点击修改配置:

填写相关url与token(自定义):点击提交,会出现

出现这种情况,主要是对相关参数不熟悉,要了解url与token的关系

url可以访问:页面中有Token的定义。url地址如:http://www.***.com/pay/wx_token.aspx

Token:根据说明自定义即可,要与url对应页面上的Token一致。

示例文件:

using System;using System.Web.Security;using System.Web.UI;using WxPayAPI;namespace Alipay{  public partial class wx_token : Page  {    /// <summary>    /// 要与基本配置中的Token一致    /// </summary>    public string Token = "Token";    protected void Page_Load(object sender, EventArgs e)    {      string echoStr = Request.QueryString["echoStr"];      Log.Debug("Token", "测试输出: echoStr = " + echoStr);      if ( CheckSignature() && !string.IsNullOrEmpty(echoStr))      {        Response.Write(echoStr);        Response.End();      }    }    /// <summary>    /// 验证微信签名    /// </summary>    /// * 将token、timestamp、nonce三个参数进行字典序排序    /// * 将三个参数字符串拼接成一个字符串进行sha1加密    /// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。    /// <returns></returns>    private bool CheckSignature()    {      string signature = Request.QueryString["signature"];      string timestamp = Request.QueryString["timestamp"];      string nonce = Request.QueryString["nonce"];      Log.Debug("Token", "测试输出: signature = " + signature);      Log.Debug("Token", "测试输出: timestamp = " + timestamp);      Log.Debug("Token", "测试输出: nonce = " + nonce);      string[] arrTmp = { Token, timestamp, nonce };      Array.Sort(arrTmp);      string tmpStr = string.Join("", arrTmp);      tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");      if (tmpStr != null)      {        tmpStr = tmpStr.ToLower();        return tmpStr == signature;      }      return false;    }  }}

 

示例文件中所用类库可以从公众号支付开发文档页面下载:https://pay.weixin.qq.com/wiki/doc/api/jsapi_sl.php?chapter=11_1