微信开发第六篇服务器主动发送信息

      上几篇文章基本是介绍有手机客户端触发的事件在先,这种有手机微信客户端触发的请求,咱们的服务器被动响应,这种模式我个人理解为被动发送信息。

但是除此之外我们有时间要让用户推送消息,比如向家长每天发送孩子的作业信息。这就要用到模板消息了

对于模板消息首先要添加

进入模板选择行业之后就要等两天才能用模板消息

能用模板消息之后 根据自己的情况,查看模板选择适用于自己的模板 如果没有可以自己定义 只要微信官方审核通过就可以用(我申请的好像说是7-15天,完成审计,但是好像30分钟就给我发通知说申请成功)

后两个都是我自己申请的模板。

给一个我调用模板的方法

 [WebMethod(Description = "测试优学酷能力报告")]
        public string TestEveryOneWeek(string featherOpenid)
        {
            string url = "http://......";
            string first = "亲爱的家长,您孩子能力报告出炉通知\n";
            var keyword1 = string.Format("英语");
            var keyword2 = "单词、语法很棒哦!听力、口语还不错!差一点就当学霸了,继续加油!\n";
            var remark = "点击“详情”查看";
            //得到所需要的模板数据
            var data = MessageTemplate.NoticeYouxuekuEvery(first, keyword1, keyword2, remark);
            //模板标号
            string templateid = "XakPchhUx1InpJX0pxDqmDKKQz6-ocrPTn682sV5VSw";
            featherOpenid = "............";  //我个人微信的openid
            bool sendsucess = SendTemplateMessageService.SendTemplateMessage(templateid, featherOpenid, url, data);
            if (sendsucess)
            {
                return "成功";
            }
            else
            {
                return "失败";
            }
        }

要给所谓的消息,制成固定格式如下 格式并添加颜色

      public static object NoticeYouxuekuEvery(string first, string keyword1, string keyword2,string remark)
        {
            var data = new
            {
                first = new TemplateDataItem(first, "#000000"),
                keyword1 = new TemplateDataItem(keyword1, "#000000"),
                keyword2 = new TemplateDataItem(keyword2, "#000000"),
                remark = new TemplateDataItem(remark, "#000000")
            };
            return data;
        }

里面的first,keyword1,keyword2,remark都是模板里面的参数。

调用发送消息方法如下

public static bool SendTemplateMessage(string templateId, string openId, string url, object data)
        {
            WeiXinService weixin = new WeiXinService();
            var accessToken = weixin.GetAccessToken();
            var getInfoUrl = string.Format(GetBaseUserInfoApi, accessToken, openId);
            WeiXinUserInfo userInfo = HttpClientHelper.GetResponse(getInfoUrl);
            string resultes=null;
            //判断用户是否关注公众号
            switch (userInfo.Subscribe)
            {
                case 0:
                    break;
                default:
                    var sendUrl = string.Format(SendMessageApi, accessToken);
                    var msg = new TemplateMessage
                    {
                        template_id = templateId,
                        touser = openId,
                        url = url,
                        data = data
                    };
                   //序列化实体为json
                   string json = JsonConvert.SerializeObject(msg, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
                   //调用消息发送接口
                   var result = HttpClientHelper.PostResponse(string.Format(sendUrl, accessToken), json);
                   resultes = result.errmsg;
                    break;
            }
            if (resultes=="ok")
            {
                return true;
            }
            else
            {
                return false;
            }
        }

如果知道了用户的openid,这样就可以使用模板消息,主动向手机客户端发送消息了。



你可能感兴趣的:(微信公众号开发)