微信公众号回复微信客户端发来的消息.
1. 回复微信客户端发来的文本消息
需要连接第三方的服务.这里选用的是 图灵机器人. 注册账号,并创建一个图灵机器人.然后可通过机器人设置查看自己的apikey.
发起请求的url : http://www.tuling123.com/openapi/api?key=你的apikey&info=接收的文本内容;
将网址复制在浏览器里会得到一下格式的内容(我写的文本内容是 '你好' ):
{"code":100000,"text":"好吧,你也好。"}
a. 发起url请求,得到json串
b. 解析得到的json串,取出里面的 "text"
c. 调用 微信开发--微信公众号(一) 回复文本的方法
d. 调用图灵机器人回复文本消息的方法
代码示例(wechart.php) :
// 图灵机器人回复消息--文本
function tuLingRobot($obj){
// 获取用户输入的内容
$content = $obj->Content;
$url = "http://www.tuling123.com/openapi/api?key=b8309f5ca82849f5a9c5466195b08a6e&info={$content}";
$jsonStr = httpGet($url);
$objdata = json_decode($jsonStr);
$text = $objdata->text;
sendTextMsg($obj, $text);
}
// 调用
// 普通消息
switch($xmlObj->MsgType){
case "text":{
tuLingRobot($xmlObj);
break;
}
}
2. 回复微信客户端发来的图片消息
回复时会根据图片的 mediaId 进行回复. 微信客户端发送的图片服务器回复的是一个有 mediaId 的json串.
// 图片
function sendCommonImage($obj){
$to = $obj->FromUserName;
$from = $obj->ToUserName;
$time = time();
$mediaId = $obj->MediaId;
$msg = <<<MSG
<xml>
<ToUserName><![CDATA[{$to}]]></ToUserName>
<FromUserName><![CDATA[{$from}]]></FromUserName>
<CreateTime>{$time}</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image>
<MediaId><![CDATA[{$mediaId}]]></MediaId>
</Image>
</xml>
MSG;
echo $msg;
}
// 调用
// 普通消息
switch($xmlObj->MsgType){
case "image":{
sendCommonImage($xmlObj);
break;
}
}
3. 微信客户端发来地理位置,回复当地的天气(实时)
这里仍然需要连接第三方服务器,我选用的是 心知天气 ,注册之后点击右上角的控制台--左侧产品管理 免费版--自动生成公钥和私钥--进入API文档--左侧 天气类--天气实时状况 , 这时你应该看到了 请求地址示例 和 返回数据示例.
划重点: 获取指定城市的天气实况。付费用户可获取全部数据,免费用户只返回天气现象文字、代码和气温3项数据。注:中国城市暂不支持云量和露点温度。
a. 获取发来地址的经纬度
b. 发起get请求,解析得到的json串
c. 调用 微信开发--微信公众号(一) 回复文本的方法
d. 调用图灵机器人回复文本消息的方法
// 回复位置天气状况
function sendWeather($obj){
// 获取经纬度
// 维度
$IX = $obj->Location_X;
// 经度
$IY = $obj->Location_Y;
$url = "https://api.seniverse.com/v3/weather/now.json?key=SOFLe1lnznLDeabGG&location={$IX}:{$IY}&language=zh-Hans&unit=c";
$tq = httpGet($url);
$objdata = json_decode($tq);
$objw = "当前城市:".$objdata->results[0]->location->name." 天气:".$objdata->results[0]->now->text." 温度:".$objdata->results[0]->now->temperature."℃";
sendTextMsg($obj, $objw);
}
// 调用
// 普通消息
switch($xmlObj->MsgType){
case "location":{
sendWeather($xmlObj);
break;
}
}
效果示例: