当前位置 主页 > 服务器问题 > win服务器问题汇总 >

    微信公众号服务器验证Token步骤图解

    栏目:win服务器问题汇总 时间:2020-01-04 01:05

    这篇文章主要介绍了微信公众号服务器验证Token步骤图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    服务器验证Token验证分为以下及步骤

    一,在微信公众号平台上设置

    1.1打开微信公众号平台

    1.2打开”开发“中的<基本配置>

    1.3点击基本配置页面里的修改配置

    1.4输入URL:

    url填写:http://外网IP:端口号/wx 。外网IP请到腾讯云购买成功处查询, http的端口号固定使用80,不可填写其他。

    Token:自主设置,这个token与公众平台wiki中常提的access_token不是一回事。这个token只用于验证开发者服务器。(注:Token可以随便写 写完记住留着备用)

    EncodingAESKey:点击随机生成

    现在选择提交肯定是验证token失败,因为还需要完成代码逻辑。改动原先main.py文件,新增handle.py 也可以用wbe文件

    二,编写后台程序

    我选用的是web,ashx一般处理程序页面

    代码源码:

    namespace WEF
    {
      /// <summary>
      /// Token 的摘要说明
      /// </summary>
      public class Token : IHttpHandler
      {
    
        public void ProcessRequest(HttpContext context)
        {
          ProcesyanzhengsRequest(context);//执行下面方法
    
        }
    
        public bool IsReusable
        {
          get
          {
            return false;
          }
        }
    
        public void ProcesyanzhengsRequest(HttpContext context)
        {
          context.Response.ContentType = "text/plain";
          string token = " ";//输入你上面自己编写的Token
          if (string.IsNullOrEmpty(token))
          {
            return;
          }      //取到Token接收到的值
          string echoString = HttpContext.Current.Request.QueryString["echoStr"];
          string signature = HttpContext.Current.Request.QueryString["signature"];
          string timestamp = HttpContext.Current.Request.QueryString["timestamp"];
          string nonce = HttpContext.Current.Request.QueryString["nonce"];
          if (CheckSignature(token, signature, timestamp, nonce)) //判断验证是否正确
          {
            if (!string.IsNullOrEmpty(echoString))  正确返回微信服务器
            {
              HttpContext.Current.Response.Write(echoString);
              HttpContext.Current.Response.End();
            }
    
          }
    
        }
        /// <summary>
        /// 验证微信签名
        /// </summary>
        public static bool CheckSignature(string token, string signature, string timestamp, string nonce)
        {
          string[] ArrTmp = { token, timestamp, nonce };
          //字典排序
          Array.Sort(ArrTmp);
          //拼接
          string tmpStr = string.Join("", ArrTmp);
          //sha1验证
          tmpStr = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
          //tmpStr = Membership.CreateUser(tmpStr, "SHA1");
          tmpStr = tmpStr.ToLower();
          if (tmpStr == signature) //如果计算后得到的数值与传过来的数值相等
          {
            return true;  //返回正确
          }
          else
          {
            return false; //不相等 返回错误
          }
        }
    
      }
    }