需求
在公众号内的输入任意文字,文字相关的第三方网站链接
实现
简单后台设置
我们在微信公众平台上,是可以进行简单的自定义消息回复的。
这里的显然不能满足我们的需求。
配置服务器
配置域名
略
配置测试服务器
略。
和一般我们配置项目没有区别,所以不再赘述。
本次我们的测试域名是 http://***.***.**/***.php
验证Token
在微信的公众后台的开发 / 基本配置 / 填写服务器配置
中
我们需要配置服务器的地址,在启用配置之前,需要经过微信的token验证。
本文使用的实例代码为PHP.
官方文档给出了验证流程图
下面为PHP实现的代码。
//1 获取加密参数
$token = "***";
$signature = $_GET[‘signature‘];
$timestamp =$_GET[‘timestamp‘];
$nonce = $_GET[‘nonce‘];
$echostr = $_GET[‘echostr‘];
//2 排序数组
$list = [
‘token‘=>$token,
‘timestamp‘=>$timestamp,
‘nonce‘=>$nonce,
];
sort($list);
//拼接字符串
$str ="";
foreach ($list as $value){
$str .= $value;
}
//加密
$encode_str = sha1($str);
if($encode_str == $signature){
echo $echostr;
}
接收消息
在官方文档中,有一个对应的事例代码。
https://wximg.gtimg.com/shake_tv/mpwiki/cryptoDemo.zip
第一步,接收普通消息
这里我们采用明文的方式接收数据。
下面采用官方的接口调试工具。
由于是被动调用接口,所以我们只需要从消息中得到最后的用户id以及消息文字就行了。
$msg = file_get_contents("php://input");
$xml = new DOMDocument();
$xml->loadXML($msg);
$from_user_name = $xml->getElementsByTagName("FromUserName")->item(0)->nodeValue;
$msg_type = $xml->getElementsByTagName("MsgType")->item(0)->nodeValue;
$content = $xml->getElementsByTagName("Content")->item(0)->nodeValue;
echo $from_user_name." 说的类型是".$msg_type.", 内容是".$content;
发送消息
当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。严格来说,发送被动响应消息其实并不是一种接口,而是对微信服务器发过来消息的一次回复。
也就是说,直接返回对应的xml就行。
下面的简单实现代码,直接返回给用户自己说的话。
$msg = file_get_contents("php://input");
$xml = new DOMDocument();
$xml->loadXML($msg);
$from_user_name = $xml->getElementsByTagName("FromUserName")->item(0)->nodeValue;
$to_user_name = $xml->getElementsByTagName("ToUserName")->item(0)->nodeValue;
$msg_type = $xml->getElementsByTagName("MsgType")->item(0)->nodeValue;
$content = $xml->getElementsByTagName("Content")->item(0)->nodeValue;
$time = time();
$str = "<xml>
<ToUserName><![CDATA[".$from_user_name."]]></ToUserName>
<FromUserName><![CDATA[".$to_user_name."]]></FromUserName>
<CreateTime>".$time."</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[".$content."]]></Content>
</xml>";
echo $str;
下面是最终实现的效果
返回超链接
//前后省略,跟上面的一样
$str = "<xml>
<ToUserName><![CDATA[".$from_user_name."]]></ToUserName>
<FromUserName><![CDATA[".$to_user_name."]]></FromUserName>
<CreateTime>".$time."</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>1</ArticleCount>
<Articles>
<item>
<Title><![CDATA[".$content."]]></Title>
<Description><![CDATA[我是文字描述]]></Description>
<PicUrl><![CDATA[http://avatar.csdn.net/C/6/6/1_diandianxiyu.jpg]]></PicUrl>
<Url><![CDATA[http://blog.coderfix.cn]]></Url>
</item>
<item>
</xml>";
实现效果
总结
微信的文档还是十分详细的,我们能通过微信实现很多好玩的功能。