zoukankan      html  css  js  c++  java
  • 微信公众平台设置URL和Token接收接口事件推送

    最近做对接微信闪开发票-微信发票名片,里面有个接收用户提交抬头接口是微信推送事件到公众号后台,该事件将发送至开发者填写的URL(登录公众平台进入【开发者中心设置】)。 开发者可通过事件推送完成数据统计、用户身份识别等操作。

    微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。关于重试的消息排重,推荐使用FromUserName + CreateTime 排重。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。

    作为一名微信公众号开发者,别人进入你的微信公众号,肯定会看见某些网页,或者给你发某些信息,你需要实时自动回复,所以你需要一个24小时为用户服务的服务器。我们所要填写的url就是你提供的服务器的地址,前提是这个服务器的地址你要能够访问,且能够控制。而token是用来验证的。

    /// <summary>
        /// 微信用户提交发票抬头-事件推送页面
        /// </summary>
        public class WechartTitleController : Controller
        {
            // GET: WechartTitle
            public void Index()
            {
                #region 验证token
                string echoString = Request.QueryString["echoStr"];
                string signature = Request.QueryString["signature"];
                string timestamp = Request.QueryString["timestamp"];
                string nonce = Request.QueryString["nonce"];
    
                if (CheckSignature())
                {
                    if (!string.IsNullOrEmpty(echoString))
                    {
                        Response.Write(echoString);
                    }
                } 
                #endregion
            }
            private bool CheckSignature()
            {
                string Token = "12345678";
                string signature = Request.QueryString["signature"];
                string timestamp = Request.QueryString["timestamp"];
                string nonce = Request.QueryString["nonce"];
                string[] ArrTmp = { Token, timestamp, nonce };
                Array.Sort(ArrTmp);   //字典排序  
                string tmpStr = string.Join("", ArrTmp);
                tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
                tmpStr = tmpStr.ToLower();
                if (tmpStr == signature)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }

    checkSignature是验证签名的,当开发者在公众平台提交URL和token时,微信服务器将发送GET请求到填写的URL上,并且带上四个参数:

    参数描述
    signature 微信加密签名 
    timestamp 时间戳 
    nonce 随机数 
    echostr 随机字符串

    开发者在自己的网页内请公众平台的请求做签名验证,通过之后输出echostr字段即可。至于具体的验签规则,可以看checkSignature的实现,这里不再赘述。

  • 相关阅读:
    数据库出现中文乱码解决方法
    OO第四次博客作业
    OO第三次博客作业
    OO第二次博客作业
    OO前三次作业反思
    mybatis怎么自动生成实体类,Mapper配置文件和Dao接口
    Win7+VS2013初试Thrift
    静态链接库与动态链接库
    排序算法总结
    TCP/IP协议详解
  • 原文地址:https://www.cnblogs.com/xuwendong/p/7195154.html
Copyright © 2011-2022 走看看