php专区

 首页 > php专区 > PHP应用 > 开放平台 > 微信--使用客服消息异步自动回复用户消息 - 微信

微信--使用客服消息异步自动回复用户消息 - 微信

分享到:
【字体:
导读:
          接收到微信用户发送过来的消息,我们服务器处理并回应。需要注意一下,微信说明对于每一个POST请求,开发者在响应包(Get)中返回特定XML结构,对该消息进行响应(现支持回复文本...

接收到微信用户发送过来的消息,我们服务器处理并回应。

需要注意一下,微信说明

对于每一个POST请求,开发者在响应包(Get)中返回特定XML结构,对该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。请注意,回复图片等多媒体消息时需要预先上传多媒体文件到微信服务器,只支持认证服务号。

微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次,如果在调试中,发现用户无法收到响应的消息,可以检查是否消息处理超时。

关于重试的消息排重,有msgid的消息推荐使用msgid排重。事件类型消息推荐使用FromUserName + CreateTime 排重。

假如服务器无法保证在五秒内处理并回复,必须直接回复空串(是指回复一个空字符串,而不是一个XML结构体中content字段的内容为空,请切勿误解),微信服务器不会对此作任何处理,并且不会发起重试。。这种情况下,可以使用客服消息接口进行异步回复。

请开发者注意,一旦遇到以下情况,微信都会在公众号会话中,向用户下发系统提示“该公众号暂时无法提供服务,请稍后再试”:

1、开发者在5秒内未回复任何内容
2、开发者回复了异常数据,比如JSON数据等

我们无法保证我们服务器能在5秒回应的话,推荐使用异步处理,使用客服消息回复用户(不讨论客服消息次数限制等问题)

 

WeixinServer

         #region 静态全局变量
          private static Token _Token = null;
          private static Ticket _Ticket = null;
          private readonly static string appid = "wx123456789000";
          private readonly static string secret = "abcdefghijklmnopqrstuvwxyz";
          private readonly static string domain = "http://wechat.mydomain.com";
         #endregion
          // 消息处理
          public void DisposeMsg(Stream stream)
          {
              XmlDocument doc = new XmlDocument();
              doc.Load(stream);
              string type = GetMsgType(doc);
              string openid = GetMsgOpenid(doc);
              string access_token = AccessToken();
              string url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + access_token;
 
             switch (type)
             {
                 case "event":
                     {
                         string ev = GetMsgEvent(doc);
                         if (ev == "subscribe")
                         {
                             //关注时,回复用户消息
                             string data = "{"touser":"" + openid + "","msgtype":"news","news":{"articles": [{"title":"欢迎关注  “XXXX“ ","description":"","url":"","picurl":"" + domain + "/weixin/msg/face1.png"},{"title":"“XXXX”   安卓版下载","description":"","url":"","picurl":"" + domain + "/weixin/msg/jiantou.png"},{"title":"“XXXX”   苹果版下载","description":"","url":"","picurl":"" + domain + "/weixin/msg/jiantou.png"}]}}";
                             HttpHelper.Post(url, data);
                         }
                     } break;
                 case "text":
                     {
                         string content = GetMsgContent(doc);
                         string data = "";
                         switch (content)
                         {
                             case "tw":
                                 {
                                     data = "{"touser":"" + openid + "","msgtype":"news","news":{"articles": [{"title":"欢迎关注  “XXXX“ ","description":"","url":"","picurl":"" + domain + "/weixin/msg/face1.png"},{"title":" “XXXX”   安卓版下载","description":"","url":"","picurl":"" + domain + "/weixin/msg/jiantou.png"},{"title":" “XXXX”   苹果版下载","description":"","url":"","picurl":"" + domain + "/weixin/msg/jiantou.png"}]}}";
                                 } break;
                             default:
                                 {
                                     content = "欢迎关注 “XXXX”nnAPP下载:Android   IOS";
                                     data = "{"touser":"" + openid + "","msgtype":"text","text":{"content":"" + content + ""}}";
                                 } break;
                         }
                         HttpHelper.Post(url, data);
                     } break;
                 default: break;
             }
         }

Action里面处理

          [HttpPost]
          public ActionResult Access()
          {
              //异步操作 使用客服消息接口回复用户
              Stream stream = Request.InputStream;
              AsyncManager.OutstandingOperations.Increment();
              var task = Task.Factory.StartNew(() => weixin.DisposeMsg(stream));
              task.ContinueWith(t =>
              {
                 //AsyncManager.Parameters["model"] = t.Result;
                 AsyncManager.OutstandingOperations.Decrement();
             });
             return Content("");
         }

分享到:
C#微信开发之旅--自定义菜单 - 微信公众...
上一篇说道基本信息的回复《C#微信开发之旅--基本信息的回复》,当中就说到文本信息的回复,其他信息的回复,可以参考下开发文档中回复信息的格式进行修改就可以。 下面来实现下自定义菜单。据我了解 订阅号是没有这个功能的,服务号的话,也是需要去认证后才能提供这个接口!当然了,使用测试号的话,功能齐全!   我们...
微信支付生成package参数缺失 - 微信公众...
就是这个方法返回了flase,所以出错。把以下方法替换掉为最下面的方法,就会知道具体是什么参数出错 WxPayHelper.php文件   function check_cft_parameters(){ if($this->parameters[bank_type] == null || $this->parameters[body] == null || $this->parameters[partner] == null || $this->parameters[ou...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……