+发表新主题
查看: 1403|回复: 0

[开发入门] 微信开发入门系列教程(二)-- 异常处理与消息加解密

[复制链接]

[开发入门] 微信开发入门系列教程(二)-- 异常处理与消息加解密

[复制链接]
风的传说自由 发表于 2015-7-9 20:27:26 浏览:  1403 回复:  0 [显示全部楼层] |只看大图 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
152300xy6zq1bbqe96k116.png



消息异常处理
当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。严格来说,发送被动响应消息其实并不是一种接口,而是对微信服务器发过来消息的一次回复。

微信服务器在将用户的消息发给公众号的开发者服务器地址(开发者中心处配置)后,微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次,如果在调试中,发现
用户无法收到响应的消息,可以检查是否消息处理超时。关于重试的消息排重,有msgid的消息推荐使用msgid排重。事件类型消息推荐使用FromUserName + CreateTime 排重。

假如服务器无法保证在5秒内处理并回复,必须做出下述回复
1、直接回复空串(指字节长度为0的空字符串,而不是XML结构体中content字段的内容为空)
2、直接回复success

这样微信服务器才不会对此作任何处理,并且不会发起重试(这种情况下,可以使用客服消息接口进行异步回复),否则,将出现严重的错误提示。

一旦遇到以下情况,微信都会在公众号会话中,向用户下发系统提示“该公众号暂时无法提供服务,请稍后再试”
1、开发者在5秒内未回复任何内容
2、开发者回复了异常数据,比如JSON数据等


152300xy6zq1bbqe96k116.png


因为我们默认的是把用户发送的消息当成文本处理,只要发送的是文本就回复“Welcome to wechat world!”,如果发送的是图片,则没有做对应的处理,因而会得到暂时无法提供服务的错误。当然实际开发中,大家需要根据自己的实际需求来确定如何对消息进行处理。

  1.                 libxml_disable_entity_loader(true);

  2.                 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

  3.                 $fromUsername = $postObj->FromUserName;

  4.                 $toUsername = $postObj->ToUserName;

  5.                 $keyword = trim($postObj->Content);//当成文本处理

  6.                 $time = time();

  7.                 $textTpl = "<xml>

  8.                         <ToUserName><![CDATA[%s]]></ToUserName>

  9.                         <FromUserName><![CDATA[%s]]></FromUserName>

  10.                         <CreateTime>%s</CreateTime>

  11.                         <MsgType><![CDATA[%s]]></MsgType>

  12.                         <Content><![CDATA[%s]]></Content>

  13.                         <FuncFlag>0</FuncFlag>

  14.                         </xml>";            

  15.                 if(!empty( $keyword ))

  16.                 {

  17.                         $msgType = "text";

  18.                         $contentStr = "Welcome to wechat world!";

  19.                         $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);

  20.                         echo $resultStr;

  21.                 }
复制代码
注意:上面的代码中,回复的文本消息格式中有一个FuncFlag参数,这个是之前只用星标消息的标志位,可以设置为0或者1,但现在官方为了降低微信服务器的压力,已经撤销了该功能。尽管在代码中仍旧可以使用,但是实际上是不起作用的,可以忽略。
回复

使用道具 举报


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版| 赣南网

© 2013-2016 Comsenz Inc. Powered by Discuz! X3.4

用微信扫一扫

赣南网