评论

小程序之主动推送消息(订阅消息)

小程序订阅信息推送

微信的东西,第一次玩,记录下全过程,略过申请小程序步骤

1:配置类目,建议在申请小程序的时候多选几个类目,类目越多,可选的消息模版越多,修改地址(传送门 路径: 设置-基本设置-服务类目

2:设置推送消息模版 地址:传送门 选择公共模版,这一步与上一步选择的类目相关。

3:配置服务器域名+消息推送 地址:传送门

1):服务器域名配置:

路径:开发-开发设置-服务器域名,前四个都填写(注意需要80或443端口),如下图

2):代码编写:此步骤是为了给微信服务器提供验证用,就是说我们要写一个接口(GET方式),给微信调用,具体参数如下

文档地址:传送门

    参数	描述
    signature	微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
    timestamp	时间戳
    nonce	随机数
    echostr	随机字符串


以下是我的code,可以直接使用(netcore版本)

            /// <summary>
        /// 接口认证 
        /// </summary>
        /// <param name="echostr"></param>
        /// <param name="signature"></param>
        /// <param name="timestamp"></param>
        /// <param name="nonce"></param>
        /// <returns></returns>
        [HttpGet]
        [Route("GetWechatSubscription")]
        [SkipResponseDataFilter]
        public string WechatSubscription(string echostr, string signature, string timestamp, string nonce)
        {
            string token = "jdcommonpushmessage123";//此处token需要保存下,第三步会用到
            if (!CheckSignature(token, signature, timestamp, nonce))
            {
                //echostr = "验证不正确";
                throw new UserFriendlyException("token验证不正确");
            }
            return echostr;
        }


        /// <summary>
        /// 验证微信签名
        /// </summary>
        private bool CheckSignature(string token, string signature, string timestamp, string nonce)
        {
            string[] ArrTmp = { token, timestamp, nonce };
            Array.Sort(ArrTmp);
            string tmpStr = string.Join("", ArrTmp);
            var data = SHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(tmpStr));
            var sb = new StringBuilder();
            foreach (var t in data)
            {
                sb.Append(t.ToString("X2"));
            }
            tmpStr = sb.ToString();
            tmpStr = tmpStr.ToLower();


            if (tmpStr == signature)
            {
                return true;
            }
            else
            {
                return false;
            }
        }


接口写好了,那怎么调用呢?请看第三条

3)我们在第一步的时候填写了服务器域名,那么

(1)把第二步的接口发布到上述的服务器

(2)回到配置服务器域名的页面(点击此处进入传送门),往下拉找到 消息推送 进入页面,如下图

参数说明:url--就是第二步发布的接口地址

token--随便输入一个32位的字符串(注意,第二步代码中有 string token = "jdcommonpushmessage123";,这个jd....需要和这个token保持一致)

EncodingAESKey:直接点击右侧随机生成即可,编写代码的时候没用到。

信息加密方式:选择安全模式。

数据格式:json。

然后点击提交,注意:如果能够提交成功,说明第二步写的接口没问题,失败则是接口有问题,可以查看下参数名称、大小写、返回的参数大小写、格式是否与微信要求的一致。


以上便是服务端相关接口,当然只是做了这些是不可能调起下图内容的

还需要前端调微信下发权限接口,点击进入(传送门


以上便是小程序信息推送,供大家一起交流。

最后一次编辑于  2020-03-14  
点赞 0
收藏
评论

4 个评论

  • SYW
    SYW
    2020-09-28

    误人子弟。单纯订阅消息,无需验证启用消息推送!https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/subscribe-message.html

    2020-09-28
    赞同 4
    回复 3
    • dtsoshied
      dtsoshied
      2021-06-30
      如何使用微信的这个消息推送,看文档我理解的是必须在小程序端触发事件或者消息,然后微信服务器发送请求到开发者服务器,然后开发者服务器将响应结果返回出去。有没有开发者服务器直接推送消息给小程序的解决方案呢?
      2021-06-30
      1
      回复
    • 武嗔
      武嗔
      2022-07-14
      单纯推送消息,不需要客服的话,是不需要开通的
      2022-07-14
      回复
    • 故渊
      故渊
      2023-12-22
      我想问一下我报48001是咋回事啊
      2023-12-22
      回复
  • 橙子
    橙子
    2022-11-10

    token怎么能是随便写的一个字符串

    2022-11-10
    赞同
    回复
  • 经标
    经标
    2020-03-25

    你好,小程序端需要怎么写呢

    2020-03-25
    赞同
    回复 1
    • 人生当如若初见
      人生当如若初见
      2020-03-28
      小程序开发还在学习中,本人是后端开发
      2020-03-28
      回复
  • 小肥羊🍊
    小肥羊🍊
    2020-03-22
    非常好的一篇新人入门笔记,加油
    2020-03-22
    赞同
    回复 1
登录 后发表内容