实例:用C#.NET手把手教你做微信公众号开发(17)--公众号主动给粉丝发信息之模板消息

本文主要是介绍实例:用C#.NET手把手教你做微信公众号开发(17)--公众号主动给粉丝发信息之模板消息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前面讲了那么多,都是微信用户主动向公众号发送信息或某个操作触发公众号响应并给予用户回复。如果在微信用户没有主动发起互动的情况下,公众号应该如何向微信用户发送消息呢?

本篇给出一种解决方案:模板消息。先来看看官方文档:

模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。

关于使用规则,请注意:

  1. 所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口,但只有认证后的服务号才可以申请模板消息的使用权限并获得该权限;
  2. 需要选择公众账号服务所处的2个行业,每月可更改1次所选行业;
  3. 在所选择行业的模板库中选用已有的模板进行调用;
  4. 每个账号可以同时使用25个模板。
  5. 当前每个账号的模板消息的日调用上限为10万次,单个模板没有特殊限制。【2014年11月18日将接口调用频率从默认的日1万次提升为日10万次,可在 MP 登录后的开发者中心查看】。当账号粉丝数超过10W/100W/1000W时,模板消息的日调用上限会相应提升,以公众号 MP 后台开发者中心页面中标明的数字为准。

关于接口文档,请注意:

  1. 模板消息调用时主要需要模板 ID 和模板中各参数的赋值内容;
  2. 模板中参数内容必须以".DATA"结尾,否则视为保留字;
  3. 模板保留符号""。

注意上面标红的字样,都是使用要点,首先公众号要认证才能启用模板消息功能,还有不能随意给微信用户发信息,特别是发营销类消息以及带敏感字眼的消息,否则首先是模板消息失效,严重的还会导致公众号被封号,使用前一定要详细了解规则。

现在来看看实现步骤。

一、公众号认证

登录微信公众号后台,按提示完成公众号认证,每年有300元服务费。

 

二、选择模板消息

认证后,到微信公众号内选择想用的模板消息类型,操作图如下:

 

 

 

 

 

三、编写常用模板消息类

准备以上内容,现在可以把常用的模板消息写到一个专用类里,我放在QinMing.WeixinTemplateMessage命名空间的SendTemplateMessage类中,保存为QinMingWeixinTemplateMessage.cs文件,放在App_Code目录中,源码如下(仅演示其中两个):

using System;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Text.RegularExpressions;
using LitJson;
using System.Net;
using System.IO;
using QinMing.WeixinContainer;
using QinMing.Config;namespace QinMing.WeixinTemplateMessage
{public class SendTemplateMessage{/// <summary>/// 模板消息:派单成功提醒,用于对公众号管理员发送各类提醒信息/// </summary>public static void SendRemindMsg(string open_id, string msg_title, string redirect_url) {  QinMingWeixinContainer gt=new QinMingWeixinContainer();string access_token = gt.GetAccessToken();string msgid = "";  string poster = "{\"touser\": \"" + open_id + "\",\"template_id\":\"Y3-mTYsfrPBA_SzTqQraaaaaaaKH_9eF_kMGE3o0\", "+ "\"url\":\"" + redirect_url + "\"," + "\"data\":{\"first\":{\"value\":\"" + msg_title + "\",\"color\":\"#ff0000\"},"+ "\"keyword1\":{\"value\":\"" + DateTime.Now.ToString("yyyyMMddHHmmssms") + "\",\"color\":\"#ff0000\"},"+ "\"keyword2\":{\"value\":\"" + DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss") + "\",\"color\":\"#ff0000\"},"+ "\"remark\":{\"value\":\"点击这里查看详情。\",\"color\":\"#0000ff\"}"+ " } }";  string resultStr = GetPage("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token, poster);  }/// <summary>/// 模板消息:新会员或新合伙人注册成功提醒,用于对公众号管理员发送提醒信息/// </summary>public static void SendNewMemberMsg(string open_id, string mobile, string msg_title, string redirect_url) {  QinMingWeixinContainer gt=new QinMingWeixinContainer();string access_token = gt.GetAccessToken();string msgid = "";  string poster = "{\"touser\": \"" + open_id + "\",\"template_id\":\"tQ_vHnFzPSl5TLbbbbbbbb8yroNhJw2713SMF0\", "+ "\"url\":\"" + redirect_url + "\"," + "\"data\":{\"first\":{\"value\":\"" + msg_title + "\",\"color\":\"#ff0000\"},"+ "\"keyword1\":{\"value\":\"" + open_id + "\",\"color\":\"#ff0000\"},"+ "\"keyword2\":{\"value\":\"" + mobile + "\",\"color\":\"#ff0000\"},"+ "\"keyword3\":{\"value\":\"" + DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss") + "\",\"color\":\"#ff0000\"},"+ "\"remark\":{\"value\":\"点击这里查看详情。\",\"color\":\"#0000ff\"}"+ " } }";  string resultStr = GetPage("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token, poster);  }public static string GetPage(string posturl, string postData)  {  Stream outstream = null;  Stream instream = null;  StreamReader sr = null;  HttpWebResponse response = null;  HttpWebRequest request = null;  Encoding encoding = Encoding.UTF8;  byte[] data = encoding.GetBytes(postData);  // 准备请求...  try  {  // 设置参数  request = WebRequest.Create(posturl) as HttpWebRequest;  CookieContainer cookieContainer = new CookieContainer();  request.CookieContainer = cookieContainer;  request.AllowAutoRedirect = true;  request.Method = "POST";  request.ContentType = "application/x-www-form-urlencoded";  request.ContentLength = data.Length;  outstream = request.GetRequestStream();  outstream.Write(data, 0, data.Length);  outstream.Close();  //发送请求并获取相应回应数据  response = request.GetResponse() as HttpWebResponse;  //直到request.GetResponse()程序才开始向目标网页发送Post请求  instream = response.GetResponseStream();  sr = new StreamReader(instream, encoding);  //返回结果网页(html)代码  string content = sr.ReadToEnd();  string err = string.Empty;  return content;  }  catch (Exception ex)  {  string err = ex.Message;  return string.Empty;  }  }  }}

上面代码中用到的QinMing.Config、QinMing.WeixinContainer命名空间及其类实现,在前面的第(1)、第(4)篇文章中已经给出。
模板消息具体使用举例:

//给管理员发送粉丝点击菜单通知
QinMing.WeixinTemplateMessage.SendTemplateMessage.SendRemindMsg("指定openid", "粉丝点击菜单信息提醒" + FromUserName, "http://www.yourweb.com/OneUser.aspx?open_id=" + FromUserName);  

因为用了静态类和静态方法,无需事先创建对象,每次直接使用即可。

四、使用演示

用起来是不是很方便?关键是免费的!!!记住一定要按官方规则来,不然模板消息功能很容易被封停。 

这篇关于实例:用C#.NET手把手教你做微信公众号开发(17)--公众号主动给粉丝发信息之模板消息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/789235

相关文章

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

C#利用Free Spire.XLS for .NET复制Excel工作表

《C#利用FreeSpire.XLSfor.NET复制Excel工作表》在日常的.NET开发中,我们经常需要操作Excel文件,本文将详细介绍C#如何使用FreeSpire.XLSfor.NET... 目录1. 环境准备2. 核心功能3. android示例代码3.1 在同一工作簿内复制工作表3.2 在不同

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

PyQt6 键盘事件处理的实现及实例代码

《PyQt6键盘事件处理的实现及实例代码》本文主要介绍了PyQt6键盘事件处理的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起... 目录一、键盘事件处理详解1、核心事件处理器2、事件对象 QKeyEvent3、修饰键处理(1)、修饰键类

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程