• 微信公众平台设置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的实现,这里不再赘述。

  • 相关阅读:
    oracle 静默安装
    浅析hybrid模式下地支付宝钱包和微信
    LeetCode96_Unique Binary Search Trees(求1到n这些节点能够组成多少种不同的二叉查找树) Java题解
    hdu 5411 CRB and Puzzle 矩阵高速幂
    Hadoop作业性能指标及參数调优实例 (三)Hadoop作业性能參数调优方法
    实现Android4.4系统设置分页滑动浏览功能
    oracle 数据库中数据导出到excel
    Nginx配置upstream实现负载均衡
    公司须要内部的地图服务,准备自己去开发可是成本太高,如今有没有专门为企业提供GIS地图开发的产品呀?大概价格多少?
    图片在内存中的占用的空间大小
  • 原文地址:https://www.cnblogs.com/xuwendong/p/7195154.html
Copyright © 2020-2023  润新知