zoukankan      html  css  js  c++  java
  • 微信公众账号 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

  • 相关阅读:
    spring注解集合
    spring工作原理理解
    Linux下mysql命令 导入 导出sql文件
    List和Set排序的实现
    LeetCode--树
    LeetCode--链表
    LeetCode--字符串
    LeetCode--贪心算法
    LeetCode--数组
    数据库编程基本练习题
  • 原文地址:https://www.cnblogs.com/zsy/p/5110556.html
Copyright © 2011-2022 走看看