您现在的位置是:网站首页 > 心得笔记
第三方天气查询接口在微信中的使用
简介思路是定义一个关键字,让用户输入一个地理位置,如北京 安徽等,然后根据地理位置去第三方api去匹配 去查询相应地理位置的天气情况,并将天气情况形成一个单文本或单图文的形式反馈给用户,然后用户可以详细的去查看所输入地理位置的天气情况
思路:定义一个关键字,让用户输入一个地理位置,如北京 安徽等,然后根据地理位置去第三方api去匹配 去查询相应地理位置的天气情况,并将天气情况形成一个单文本或单图文的形式反馈给用户,然后用户可以详细的去查看所输入地理位置的天气情况。
网上有很多天气查询的接口,我这里使用的是在聚合数据里申请的一个免费的天气查询
实现代码:在前几篇文章所讲述的IndexController.api方法中编写:
<?php
namespace App\Http\Controllers\Front;
use App\Http\Controllers\Controller;
use App\Model\Admin\Test;
class TestController extends Controller {
public function api()
{
$echoStr = isset($_GET["echostr"]) ? $_GET["echostr"] : '';
if (!empty($echoStr) && $this->checkSignature()) {
echo $echoStr;
exit;
} else {
//get post data, May be due to the different environments
$postStr = file_get_contents("php://input", 'r');//php:input
//写入日志 在同级目录下建立php_log.txt
//chmod 777php_log.txt(赋权) chown wwwphp_log.txt(修改主)
error_log(var_export($postStr,1),3,'php_log.txt');
//日志图片
//extract post data
if (!empty($postStr)){
/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
the best way is to check the validity of xml by yourself */
libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
//单文本自动回复_SDK
$key = '1709ed943255eb42db941b88d3a71311';//聚合数据中申请的第三方接口appkey
$cityname = trim($postObj->Content);
$url = 'http://v.juhe.cn/weather/index?format=2&cityname=' . $cityname .'&key=' . $key;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($ch);
$arr = json_decode($res, true);
$content = '城市:'.$arr['result']['today']['city']."\n时间:".$arr['result']['today']['date_y']."\n星期:".$arr['result']['today']['week']."\n今日温度:".$arr['result']['today']['temperature'];
$template = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$msgType = "text";
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$time = time();
$resultStr = sprintf($template, $fromUsername, $toUsername, $time, $msgType, $content);
echo $resultStr;
} else {
echo "";
exit;
}
}
}
//检查签名
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = "weixin";
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if($tmpStr == $signature){
return true;
}else{
return false;
}
}效果图如下:

上一篇:微信sdk的实现
下一篇:微信公众号开发——自定义菜单