首页 > 热点 > 微信 > 正文

微信公众平台开发之天气预报功能

2020-03-22 20:19:42
字体:
来源:转载
供稿:网友
最近有项目需求给微信公众号上增加了天气预报功能,使用百度提供的车联网API V3.0中的天气查询功能实现.先上一张最终效果图:项目需求:有连接好的微信平台,有百度注册帐号,需要在百度LBS开放云平台,添加应用,获取AK代码,PHP代码编辑器,如EditPlus等下面详细介绍下开发步骤:第一步:准备工作
登录微信公众平台,检查服务器配置是否已启用,URL(服务器地址) 是否已配置Token(令牌),与自己写的微信入口文件中的Token(令牌一致),如下图:然后点击提交,只至网页上提示绿色背景的提交成功信息,则完成本步骤的操作
第二步:微信天气预报数据源准备
用已注册好的百度帐号,登录百度LBS云平台,添加一个应用,获取访问应用AK,及了解车联API V3.0,天气查询功能相应的接口说明文件,以按需调用需要的天气信息.第三步:微信公众平台,接口文件编写 jiekou.php 无忧电脑技巧网 微信公众号功能源码 CopyRight 2015 All Rights Reserveddefine("TOKEN", "weixin2015");$wechatObj = new wechatCallbackapiTest();if (!isset($_GET['echostr'])) { $wechatObj- responseMsg();}else{ $wechatObj- valid();html' target='_blank'>class wechatCallbackapiTest //验证签名 public function valid() $echoStr = $_GET["echostr"]; $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode($tmpArr); $tmpStr = sha1($tmpStr); if($tmpStr == $signature){ echo $echoStr; exit; public function responseMsg() // $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; $postStr = file_get_contents("php://input"); if (!empty($postStr)){ $this- logger("R ".$postStr); $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $RX_TYPE = trim($postObj- MsgType); $result = ""; switch ($RX_TYPE) case "event": $result = $this- receiveEvent($postObj); break; case "text": $result = $this- receiveText($postObj); break; $this- logger("T ".$result); echo $result; }else { echo ""; exit; private function receiveEvent($object) switch ($object- Event) case "subscribe": $content = "欢迎关注无忧电脑技巧网 "; break; $result = $this- transmitText($object, $content); return $result; private function receiveText($object) $keyword = trim($object- Content); //获得用户输入的信息 //判断天气 if(!empty( $keyword )){ //!empty 函数,判断 $keyword获得的值是否为空 $city = mb_substr($keyword, 0, 2, 'utf-8'); //取用户输入内容前两个字符,如"黄冈天气" 最终取值"黄冈" include("weather.php"); //调用天气接口文件 $content = getWeatherInfo($city); //执行天气接口文件中的 getWeatherInfo方法.查询 黄冈天气. } else{ $content = date("Y-m-d H:i:s",time())."/n技术支持 无忧电脑技巧网/nwww.51pcjq.com"; //发送其它内容默认回复的内容. if(is_array($content)){ if (isset($content[0]['PicUrl'])){ $result = $this- transmitNews($object, $content); }else if (isset($content['MusicUrl'])){ $result = $this- transmitMusic($object, $content); }else{ $result = $this- transmitText($object, $content); return $result; private function transmitText($object, $content) if (!isset($content) || empty($content)){ return ""; $textTpl = " xml ToUserName ![CDATA[%s]] /ToUserName FromUserName ![CDATA[%s]] /FromUserName CreateTime %s /CreateTime MsgType ![CDATA[text]] /MsgType Content ![CDATA[%s]] /Content /xml $result = sprintf($textTpl, $object- FromUserName, $object- ToUserName, time(), $content); return $result; private function transmitNews($object, $newsArray) if(!is_array($newsArray)){ return ""; $itemTpl = " item Title ![CDATA[%s]] /Title Description ![CDATA[%s]] /Description PicUrl ![CDATA[%s]] /PicUrl Url ![CDATA[%s]] /Url /item $item_str = ""; foreach ($newsArray as $item){ $item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']); $newsTpl = " xml ToUserName ![CDATA[%s]] /ToUserName FromUserName ![CDATA[%s]] /FromUserName CreateTime %s /CreateTime MsgType ![CDATA[news]] /MsgType Content ![CDATA[]] /Content ArticleCount %s /ArticleCount Articles $item_str /Articles /xml $result = sprintf($newsTpl, $object- FromUserName, $object- ToUserName, time(), count($newsArray)); return $result; private function logger($log_content)}第四步:使用百度车联API V3.0接口,及访问应用AK码,编号微信天气接口源码:weatger.php
function getWeatherInfo($cityName){ if ($cityName == "" || (strstr($cityName, "+"))){ return "发送天气+城市,例如'天气深圳'"; }//用户查询天气,回复关键词 规则 $url = "http://api.map.baidu.com/telematics/v3/weather location=".urlencode($cityName)."&output=json&ak=自已申请的百度车联API AK代码";//构建通过百度车联API V3.0查询天气url链接 $ch = curl_init();//初始化会话 curl_setopt($ch, CURLOPT_URL, $url);//设置会话参数 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设置会话参数 $output = curl_exec($ch);//执行curl会话 curl_close($ch);//关闭curl会话 $result = json_decode($output, true);//函数json_decode() 的功能时将json数据格式转换为数组。 if ($result["error"] != 0){ return $result["status"]; } $curHour = (int)date('H',time()); $weather = $result["results"][0];//按照微信公众号开发文档,组建设多图文回复信息 $weatherArray[] = array("Title" = $weather['currentCity']."当前天气:"."温度:".$weather['weather_data'][0]['temperature'].",".$weather['weather_data'][0]['weather'].","."风力:".$weather['weather_data'][0]['wind'].".", "Description" = "", "PicUrl" = "http://weixin.51pcjq.com/img/weather_bg.jpg", "Url" = for ($i = 0; $i count($weather["weather_data"]); $i++) { $weatherArray[] = array("Title"= $weather["weather_data"][$i]["date"]."/n". $weather["weather_data"][$i]["weather"]." ". $weather["weather_data"][$i]["wind"]." ". $weather["weather_data"][$i]["temperature"]."", "Description"= "", "PicUrl"= (($curHour = 6) && ($curHour 18)) $weather["weather_data"][$i]["dayPictureUrl"]:$weather["weather_data"][$i]["nightPictureUrl"], "Url"= return $weatherArray;} 注意事项微信公众平台 TOKEN 与自己编写的微信接口文件中的 TOKEN 的值必须保持一致编写php代码,需使用专业的php编辑工具,如EditPlus,Dreamweaver等上述天气接口文件中,百度车联api AK代码已换成 "自已申请的百度车联API AK代码:请申请好后,自行填入如要不明白的地方,可以关注我的百度空间.留言和我联系!微信天气预报开发最新代码: meta http-equiv="Content-Type" content="text/html; charset=utf" / header("Content-Type:text/html;charset=UTF-"); date_default_timezone_set("PRC"); * 最开始用的是微信提供的demo老是不成功,用了这个网上下载的才成功 //define your token define("TOKEN", "djjc"); $wechatObj = new wechatCallbackapiTest(); //微信接入操作,成功接入了直接注释了就行了 $wechatObj- responseMsg(); //$wechatObj- valid(); class wechatCallbackapiTest /*public function valid() $echoStr = $_GET["echostr"]; //valid signature , option if($this- checkSignature()){ echo $echoStr; exit; public function responseMsg() //get post data, May be due to the different environments $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post data if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, ‘SimpleXMLElement‘, LIBXML_NOCDATA); $RX_TYPE = trim($postObj- MsgType); switch($RX_TYPE) case "text": $resultStr = $this- handleText($postObj); break; case "event": $resultStr = $this- handleEvent($postObj); break; default: $resultStr = "Unknow msg type: ".$RX_TYPE; break; echo $resultStr; }else { echo ""; exit; //测试文字回复 public function handleText($postObj) $fromUsername = $postObj- FromUserName; $toUsername = $postObj- ToUserName; $keyword = trim($postObj- Content); $time = time(); $textTpl = " xml ToUserName ![CDATA[%s]] /ToUserName FromUserName ![CDATA[%s]] /FromUserName CreateTime %s /CreateTime MsgType ![CDATA[%s]] /MsgType Content ![CDATA[%s]] /Content FuncFlag /FuncFlag /xml if(!empty( $keyword )) $msgType = "text"; switch($keyword){ case "你好": $contentStr = "你好!"; break; case "你叫什么名字": $contentStr = "我是顶尖机器人"; break;//判断是否为天气 case $keywords+"天气"; $str = mb_substr($keyword,-,,"UTF-"); $str_key = mb_substr($keyword,,-,"UTF-"); if($str=="天气"){ $data = $this- weather($str_key)- showapi_res_body; $data=‘[今天白天]‘.$data- f- day_weather."/n"; $data=‘[今天夜间]‘.$data- f- night_weather."/n"; $data=‘[明天白天]‘.$data- f- day_weather."/n"; $data=‘[明天夜间]‘.$data- f- night_weather."/n"; $contentStr = $data.$data.$data.$data; break; default: $contentStr = "听不懂您在讲什么"; break; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo "Input something..."; public function handleEvent($object) $contentStr = ""; switch ($object- Event) case "subscribe": $contentStr = "感谢您关注顶尖教程网,在这里您将得到海量免费学习资源!"; break; default : $contentStr = "Unknow Event: ".$object- Event; break; $resultStr = $this- responseText($object, $contentStr); return $resultStr; public function responseText($object, $content) $textTpl = " xml ToUserName ![CDATA[%s]] /ToUserName FromUserName ![CDATA[%s]] /FromUserName CreateTime %s /CreateTime MsgType ![CDATA[text]] /MsgType Content ![CDATA[%s]] /Content FuncFlag /FuncFlag /xml $resultStr = sprintf($textTpl, $object- FromUserName, $object- ToUserName, time(), $content, $flag); return $resultStr; private function checkSignature() $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode( $tmpArr ); $tmpStr = sha( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; //天气预报 此处汉字需要处理,想了很多办法才没乱码 private function weather($k){ $n=urlencode($k); $showapi_appid = ‘‘; //去相关网站申请就行 $showapi_sign = ‘deafcacefdea‘; $showapi_timestamp = date(‘YmdHis‘); $areaid=‘‘; $paramArr = ‘‘; $needHourData=‘‘; $url = iconv(‘gbk‘,‘utf-‘,‘http://route.showapi.com/- ‘.‘area=‘.$n.‘&areaid=&needHourData=&needIndex=&needMoreDay=&showapi_appid=‘.$showapi_appid.‘&showapi_timestamp=‘.$showapi_timestamp.‘&showapi_sign=‘.$showapi_sign); $result = file_get_contents($url); $result = json_decode($result); return $result; PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表