目录
- 最终实现功能及效果图
- 用户与公众号消息交互过程
- 公众号的接收普通消息能力
3.1 用户在公众号中发送的一条消息
3.2 开发者服务器最终收到的数据包
3.3 数据包参数说明
3.4 开发者填写的URL
3.5 开发者服务器的文本消息处理程序 - 发送消息到用户的公众号
4.1 接口请求说明
4.2 发送文本消息的参数说明
4.3 成功调用该接口就可向指定的微信用户发送消息(关注公众号的用户)
一、 最终实现功能及效果图
- 用户可直接在公众号内聊天!爽歪歪!
- 用户发送消息,店内人员立马收到消息推送提醒!
- 店内人员收到提醒,可在自己开发的聊天室内聊天!
可参考聊天室(长连接)开发 - 店内人员发送的消息立马发送到用户的公众号首页。
让用户直接在公众号首页聊天。消息的及时性简直perfect!
二、 用户与公众号消息交互过程
下面来看下用户与公众号之间的消息的交互:
用户发送的消息会先发送到腾讯服务器,若公众号是开发模式,腾讯服务器会将用户发送的消息转发到第三方服务器。第三方服务器拿到数据进行解析,后续会做出响应。第三方发送消息会先发消息到腾讯服务器,然后腾讯服务器将消息发送给公众号用户。
三、 公众号的接收普通消息能力
如果公众号处于开发的模式,当普通微信用户向公众号发送消息时,微信服务器会先收到消息,然后微信服务器会将POST消息的XML数据包发到开发者填写的URL上。
- 用户在公众号中发送的一条消息
- 开发者服务器最终收到的数据包
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[您好呀]]></Content>
<MsgId>23141583812978587</MsgId>
</xml>
- 数据包参数说明
参数名 | 参数说明 |
---|---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(微信用户的OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 消息类型,文本为text |
Content | 文本消息内容 |
MsgId | 消息id,64位整型 |
-
开发者填写的URL
如图:是微信公众号官网上(mp.weixin.qq.com)启用了服务器配置。
维护的URL:微信服务器收到消息后会将POST消息发送到开发者填写的URL上。
上图中一般处理程序的名称为WeChat.ashx -
开发者服务器的文本消息处理程序
我们需要在WeChat.ashx中加入如下代码。意思就是第三方服务器收到消息后可以做一些操作,比如用户发送数据存入数据库,推送给店内相关人员提醒下有客户咨询。
#region 文本消息处理程序
/// <summary>
/// 文本消息处理程序
/// </summary>
private void TextHandler(BaseMsg baseMsg)
{
TextMsg txtmsg = (TextMsg)baseMsg;
string FromUserName = txtmsg.FromUserName;//用户的openid
string msg = txtmsg.Content;//用户输入的文本消息
//1. 记录数据库 (已获取用户的openid和用户输入的文本消息)
//2. 推送模板 (可以给相关人员推送消息提醒的模板) 让相关人员及时回复
//3. 顾问的聊天 可参考之前的聊天室实现
}
#endregion
店内人员收到模板消息如下
四、 发送消息到用户的公众号
- 接口请求说明
http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN
发送文本消息的json数据包如下
{
"touser":"OPENID",
"msgtype":"text",
"text":{
"content":"Hello World"
}
}
- 发送文本消息的参数说明
参数名 | 参数说明 |
---|---|
touser | 发动给指定微信用户的openid |
msgtype | 消息类型 |
content | 发送消息内容 |
- 成功调用该接口就可向指定的微信用户发送消息(关注公众号的用户)