您现在的位置是:网站首页 > 心得笔记

第三方天气查询接口在微信中的使用

盛悦2019-02-18511人围观
简介思路是定义一个关键字,让用户输入一个地理位置,如北京 安徽等,然后根据地理位置去第三方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;
        }
    }



效果图如下:

微信图片_20190218170444(1).png