【微信服务号开发】02.文字消息和图文消息自动回复实现

【微信服务号开发】02.文字消息和图文消息自动回复实现

作者:stark wang

上一篇 【微信服务号开发】01.接入指南

https://segmentfault.com/a/11...

接收消息

  • 当我们向测试号发送信息的时候,就是微信像这个接口发送一个post请求

当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。

我们可以使用以下方式来接收post请求

两种方式,如果一种方式失败,不兼容,可以使用另一种方式
// $postStr = file_get_contents('php://input');
$postStr = $GLOBALS['HTTP_RAW_POST_DATA'];

当然 接收的信息是 以xml格式体现,下面会讲到怎么提取。

记录日志

当我们在本地开发测试的时候,想知道我们发送的什么信息,我们可以在本地记录一下
使用 file_put_contents 这个函数写入日志

if (empty($postStr)) {
    file_put_contents('wx.log','post数据为空'.FILE_APPEND."\n",FILE_APPEND);
}
file_put_contents('wx.log',$postStr,FILE_APPEND);

当用户发送请求后,会在本地生成 wx.log



1512612101


6496619505755885384

此时是xml格式

我们需要把 xml格式转换成对象

$xml = simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);

自动回复

https://mp.weixin.qq.com/wiki...
接收普通消息

当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。

请注意:

1、关于重试的消息排重,推荐使用msgid排重。

2、微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,

可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。详情请见“发送消息-被动回复消息”。

3、如果开发者需要对用户消息在5秒内立即做出回应,即使用“发送消息-被动回复消息”接口向用户被动回复消息时,可以在

公众平台官网的开发者中心处设置消息加密。开启加密后,用户发来的消息和开发者回复的消息都会被加密(但开发者通过客服

接口等API调用形式向用户发送消息,则不受影响)。关于消息加解密的详细说明,请见“发送消息-被动回复消息加解密说明”。

实现向用户自动回复消息

当用户发送消息后,我们接收到消息后,可以根据消息的内容,向用户发送自定义的信息。
必须是xml 格式

文本消息

各消息类型的推送XML数据包结构如下:


 
 
 1348831860
 
 
 1234567890123456
 

【微信服务号开发】02.文字消息和图文消息自动回复实现_第1张图片

代码实现


// 当用户回复一些信息的时候,我们需要向用户回复一些特定的内容
// replyMsg 函数是处理 xml 格式,把需要的数据重新组装
function replyMsg($content){
    global $xml;
    $str = sprintf('
 
 
 %d
 
 
 1234567890123456
 ',$xml->FromUserName,$xml->ToUserName,time(),$content);
 echo $str;
}


if (!empty($xml->Content)) {
    replyMsg('hi 你想干嘛?');
}

输出的信息

  • 当微信向url请求post 数据,然后返回以下信息,微信接收这些信息后,会处理,给你回复。

 
 
 1512615523
 
 
 1234567890123456
 

回复图文消息

xml 格式





12345678


2




<![CDATA[title1]]>






<![CDATA[title]]>







【微信服务号开发】02.文字消息和图文消息自动回复实现_第2张图片

php代码函数实现

function replyArticle($data){
    global $xml;
    $article = ''.count($data).'';
    $article .= '';
    foreach ($data as $value) {
       $article .= sprintf('<![CDATA[%s]]>',$value['title']);
       $article .= sprintf('',$value['desc']);
       $article .= sprintf('',$value['picurl']);
       $article .= sprintf('',$value['url']);
    }
    $article .= '';

    $str = sprintf('


%d
%s',$xml->FromUserName,$xml->ToUserName,time(),$article);
file_put_contents('wx.log',$str."\n\n",FILE_APPEND);
echo $str;
}

测试图文消息

// 测试图文消息
if (!empty($xml->Content)) {
    $data = [
        [
        'title' => '安琪拉',
        'url' => 'http://stark.wang',
        'picurl' => 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1513221767&di=112afbccd30f26c20392a7dfff06926a&imgtype=jpg&er=1&src=http%3A%2F%2Fqtimg.bdstatic.com%2Fhiapk%2Fgame%2F201707%2F04%2F595af6d2285d9.jpg',
        'desc' => 'hi 安琪拉!!!'
        ],
        [
        'title' => '李白,今朝有酒今朝醉',
        'url' => 'http://stark.wang',
        'picurl' => 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1512627415601&di=a48be9abc9661620472cf49c9388f221&imgtype=0&src=http%3A%2F%2Fi1.17173cdn.com%2F2fhnvk%2FYWxqaGBf%2Fcms3%2FXivJLTbldqzvDcv.jpg',
        'desc' => '今朝有酒今朝醉,李白就是一个诗人'
        ],
        [
        'title' => '钟馗',
        'url' => 'http://stark.wang',
        'picurl' => 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1513222223&di=40ac217b31655f2dee782c8be7c67aa4&imgtype=jpg&er=1&src=http%3A%2F%2Fzhidao.3533.com%2Fuploads%2Fanswer%2F20160324%2F34c6cc35fe42f302e4c96b9984f55c5e.jpg',
        'desc' => '哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈'
        ],
];

    replyArticle($data);
}

日志




1512617634
3<![CDATA[安琪拉]]><![CDATA[李白,今朝有酒今朝醉]]><![CDATA[钟馗]]>

手机界面

【微信服务号开发】02.文字消息和图文消息自动回复实现_第3张图片

图文回复消息ok

你可能感兴趣的:(微信,微信公众平台,微信开发)