问题:微信公众账号 开发过程中配置 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