实例:用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

相关文章

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面