>백엔드 개발 >PHP 튜토리얼 >WeChat 공개 플랫폼 날씨 쿼리, 기차표 쿼리, 특급 배송 쿼리, 작은 노란 닭, 번역, 버스 쿼리 구현

WeChat 공개 플랫폼 날씨 쿼리, 기차표 쿼리, 특급 배송 쿼리, 작은 노란 닭, 번역, 버스 쿼리 구현

WBOY
WBOY원래의
2016-07-25 08:50:351304검색
소스에서 QR 코드를 스캔하여 사용해 볼 수 있습니다.
  1. /**
  2. * 위챗 PHP 테스트
  3. */
  4. include("ABClient.php") //Aibang.com 애플리케이션을 다운로드한 후 SDK를 다운로드합니다
  5. define("FANAPK", "API key"); //이 Baidu 애플리케이션 duapp.com은 API 키를 얻기 위한 애플리케이션을 생성합니다
  6. define("WAPK", "key") //이 키 주소 http : //lbsyun.baidu.com/apiconsole/key?application=key를 얻으려면
  7. //토큰 정의
  8. define("TOKEN", "여기에 자신만의 토큰을 작성하세요");
  9. $wechatObj = new wechatCallbackapiTest();
  10. $wechatObj->responseMsg();
  11. class wechatCallbackapiTest
  12. {
  13. private $model;
  14. private $name;
  15. public function __construct( ){
  16. $this->model = new ABClient();
  17. $a = $this->model->test_transfer();
  18. $this->name = include("이름 .php");
  19. }
  20. 공개 함수 valid()
  21. {
  22. $echoStr = $_GET["echostr"];
  23. //유효한 서명, 옵션
  24. if($this->checkSignature()){
  25. echo $echoStr;
  26. exit;
  27. }
  28. }
  29. 공개 함수 responseMsg()
  30. {
  31. //포스트 데이터 가져오기, 환경이 다르기 때문일 수 있음
  32. $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
  33. //포스트 데이터 추출
  34. if (!empty($ postStr)){
  35. $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
  36. $fromUsername = $postObj->FromUserName;
  37. $toUsername = $postObj->ToUserName ;
  38. $type = $postObj->MsgType;
  39. $event = $postObj->Event;
  40. $c = $postObj->Location_X;
  41. $d = $postObj-> ;Location_Y;
  42. $keyword = 트림($postObj->Content);
  43. $time = time();
  44. $msgid = $postObj->MsgId;
  45. $textTpl = "< ;xml>
  46. %s
  47. 0
  48. ";
  49. if($type == "event" && $event = = "구독")
  50. {
  51. $msgType = "text";
  52. $contentStr.= "Weidu Network를 팔로우하신 것을 환영합니다. 이 공개 플랫폼에는 다음 기능이 있습니다: nn";
  53. $contentStr . = "1. "안녕하세요"와 같이 한자 또는 한영 번역을 위해 한자를 직접 입력합니다. n";
  54. $contentStr.= "2. "날씨 스자좡"과 같이 날씨 쿼리에 "날씨 지역"을 입력합니다. n";
  55. $contentStr.= "3. "스자좡 기차역 공자좡"과 같이 대중교통 쿼리에 "도시 출발지 및 도착지"를 입력합니다.
  56. $contentStr.= "4. "를 입력합니다. @anycontent" 다음에 작은 Jianji 채팅이 이어집니다(예: "@小小鸡"n";
  57. $contentStr.= "5. WeChat은 날씨 쿼리를 위해 지리적 위치를 보냅니다. 시도해 볼 수 있습니다.";
  58. $ resultStr = sprintf( $textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
  59. echo $resultStr;
  60. }else if($type == "text"){
  61. $keywords = 폭발(" ",$keyword);
  62. $b = 폭발("@",$keyword);
  63. if(isset($b[1])){
  64. $contentStr = $this- >simsim($b[1]);
  65. $msgType = "text";
  66. $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr );
  67. echo $resultStr;
  68. 종료();
  69. }
  70. if($keywords[0]=="기차"){
  71. $city = $keywords[1];
  72. $end = $keywords[2];
  73. $time = $keywords[ 3];
  74. $result = $this->doget($city,$end,$time);
  75. if(!empty($result)){
  76. $result = Strip_tags($result[ 'datas']);
  77. $return_str = str_replace(" ","",$result);
  78. $return_str = str_replace("\n","",$return_str);
  79. $ a = 폭발(",",$return_str);
  80. $name =array();
  81. $c = array_chunk($a,16);
  82. array_pop($c);
  83. foreach( $c as $k =>$v){
  84. $str="남은 항공권: n 비즈니스석 좌석: ".$v[5].", 특별석 좌석: ".$v[6]." , 1등석 좌석: ".$v[7].", 2등석 좌석: ".$v[8].", 프리미엄 푹신한 침대: ".$v[9].", 푹신한 침대: " .$v[10]. ", 딱딱한 침대: ".$v[11].", 부드러운 좌석: ".$v[12].", 딱딱한 좌석: ".$v[13].", 좌석 없음 : ".$v[14]. ", 기타:".$v[15];
  85. $str = preg_replace("/하드 시트:--,/","",$str);
  86. $str = preg_replace("/비즈니스 좌석:--,/","",$str) --,/","",$str);
  87. $str = preg_replace("/공주 좌석:- -,/","",$str);
  88. $str = preg_replace("/一1등석:--,/","",$str);
  89. $str = preg_replace(" /2등석:--,/","",$str);
  90. $str = preg_replace ("/프리미엄 슬리퍼:--,/","",$str);
  91. $str = preg_replace("/소프트 슬리퍼:--,/","",$str);
  92. $str = preg_replace("/하드 슬리퍼:--,/","",$str);
  93. $str = preg_replace("/소프트 시트:--,/","",$str);
  94. $str = preg_replace("/하드 시트:--,/","",$str);
  95. $str = preg_replace("/Other:--/","",$str);
  96. $contentStr.="열차 번호: {$v[1]}, 출발역: {$v[2 ]}, 도착역: {$v[3]}, 소요시간: {$v[4]}. n{$str}nn";
  97. if($k == 12){
  98. break;
  99. }
  100. }
  101. }else{
  102. $contentStr.="아님 죄송합니다. ";
  103. }
  104. $msgType = "text";
  105. $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr;
  106. 종료();
  107. }
  108. if(isset($keywords[1])&&!isset($keywords[2])){
  109. if($this-> ; pexpress(trim($keywords[0]))){
  110. $a = $this->express(trim($keywords[0]),trim($keywords[1]));
  111. if ( $a["message"]=="ok"){
  112. if($a['ischeck']==1){
  113. $contentStr.="패키지가 nn에 서명되었습니다";
  114. }else{
  115. $contentStr.="패키지가 nn에 서명되지 않았습니다.";
  116. }
  117. $data = $a['data'];
  118. foreach($data를 $로 k => ;$v){
  119. $contentStr.="업데이트 시간: {$v["time"]}n물류 상태: {$v["context"]}nn";
  120. }
  121. }else {
  122. $contentStr = "쿼리가 실패했습니다. 올바른 쿼리를 입력하십시오.";
  123. }
  124. $msgType = "text";
  125. $resultStr = sprintf($textTpl, $fromUsername, $toUsername , $ time, $msgType, $contentStr);
  126. echo $resultStr;
  127. }else{
  128. $weather = $this->weather($keywords[1]);
  129. if(! 비어 있음( $weather))
  130. {
  131. $data = $this->json2array($weather);
  132. foreach($data as $k =>$v)
  133. {
  134. $str .=$v['날짜'].'. 날씨: '.$v['날씨'].'. 풍속: '.$v['wind'].'. 온도: '.$v['온도']."nn";
  135. }
  136. }else{
  137. $str="날씨 베이징 등 올바른 주소를 입력하세요.";
  138. }
  139. $msgType = "text";
  140. $contentStr = $str;
  141. $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr)
  142. echo $resultStr;
  143. }
  144. }else if(isset($keywords[2])&&($keywords[0]!=="train")){
  145. $city = $ 키워드[0];
  146. $start = $keywords[1];
  147. $end =$keywords[2];
  148. $a = $this->model->test_transfer($city ,$ start,$end);
  149. if(!empty($a)){
  150. foreach($a as $k=>$v){
  151. $contentStr.= "Line{$c }: ".$v['dist']." 예상 시간: {$v['time']}분 nBus 경로: {$v['segments']["segment"][0 ]["line_name"]} . n 출발: {$v['segments']["segment"][0]["start_stat"]}. n 출발:{$v['segments'][ "segment"][0]["end_stat" ]}.n经过路线:{$v['segments']["segment"][0]["stats"]}nn";
  152. if($k == 4){
  153. break;
  154. }
  155. }
  156. }else{
  157. $contentStr="抱歉没有查询到";
  158. }
  159. $msgType = "text";
  160. $resultStr = sprintf ($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
  161. echo $resultStr;
  162. }else{
  163. $fanyi = $this->fanyi($keyword);
  164. $msgType = "text";
  165. $contentStr = $fanyi;
  166. $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
  167. echo $resultStr;
  168. }
  169. }else if($type == 'location'){
  170. $result = $this->address($c,$d);
  171. if (isset($result['district'])){
  172. $weather = $this->weather($result['district']);
  173. if(!$weather){
  174. $weather = $this->weather($result['city']);
  175. }
  176. }else{
  177. $weather = $this->weather($result['city']);
  178. }
  179. $data = $this->json2array($weather);
  180. foreach($data as $k =>$v){
  181. $str.=$v[ 'date'].'。천기:'.$v['weather'].'。风速:'.$v['wind'].'。온도: '.$v['온도']."nn";
  182. }
  183. $msgType = "text";
  184. $contentStr = $str;
  185. $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
  186. echo $resultStr;
  187. }else{
  188. echo "뭔가를 입력할 수 있습니다.";
  189. }
  190. }else {
  191. echo "";
  192. exit;
  193. }
  194. }
  195. //지리적 위치 가져오기
  196. 개인 함수 주소($addx,$addy)
  197. {
  198. $arr = array();
  199. $result = $this->map_text("http://api.map.baidu.com/geocoder/v2/?ak=".WAPK."&callback= renderReverse&location ={$addx},{$addy}&output=xml&pois=0");
  200. $data = simplexml_load_string($result, 'SimpleXMLElement', LIBXML_NOCDATA);
  201. $result = $this->json2array( $ data);
  202. $arr = $result["result"]["addressComponent"];
  203. $address = $result['result']['formatted_address'];
  204. array_push($arr, $ address);
  205. return $arr;
  206. }
  207. //json을 배열로 구문 분석
  208. private function json2array($json) {
  209. if ($json) {
  210. foreach (( array )$json as $k=>$v) {
  211. $data[$k] = !is_string($v) ? $this->json2array($v) : $v;
  212. }
  213. return $data;
  214. }
  215. }
  216. //날씨 정보 가져오기
  217. 프라이빗 함수 Weather($data)
  218. {
  219. //API 호출에 따라 데이터 출력
  220. $ url="http://api.map.baidu.com/telematics/v2/weather?location={$data}&output=json&ak=".WAPK;
  221. $weather=$this->map_text($url );
  222. $data = json_decode($weather);
  223. return $data->results;
  224. }
  225. //번역된 API 호출
  226. 비공개 함수 fanyi($data)
  227. {
  228. //API 호출에 따른 데이터 출력
  229. $url="http://openapi.baidu.com/public/2.0/bmt/translate?client_id=".FANAPK."&q={$data } &from=auto&to=auto";
  230. $fanyi=$this->map_text($url);
  231. $shuju=json_decode($fanyi);
  232. $result=$shuju->trans_result;
  233. return $result[0]->dst;
  234. }
  235. //주소 구문 분석을 위한 API
  236. private function map_text($url)
  237. {
  238. if(!function_exists(' file_get_contents ')) {
  239. $file_contents = file_get_contents($url);
  240. } else {
  241. $ch =curl_init();
  242. $timeout = 5;
  243. curl_setopt($ch, CURLOPT_URL , $url);
  244. 컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  245. 컬_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  246. $file_contents = 컬_exec($ch);
  247. 컬_닫기($ ch );
  248. }
  249. return $file_contents;
  250. }
  251. 비공개 함수 checkSignature()
  252. {
  253. $signature = $_GET["signature"];
  254. $timestamp = $ _GET["timestamp"];
  255. $nonce = $_GET["nonce"];
  256. $token = TOKEN;
  257. $tmpArr = array($token, $timestamp, $nonce) ;
  258. sort($tmpArr);
  259. $tmpStr = implode( $tmpArr );
  260. $tmpStr = sha1( $tmpStr );
  261. if( $tmpStr == $signature ){
  262. true 반환;
  263. }else{
  264. false 반환;
  265. }
  266. }
  267. 비공개 함수 simsim($keywords){
  268. $curlPost=array("txt"=> ; $keywords);
  269. $ch = 컬_init();//컬 초기화
  270. 컬_setopt($ch,CURLOPT_URL,'http://xiaohuangji.com/ajax.aspx');//지정된 웹 캐치 페이지
  271. 컬_setopt($ch, CURLOPT_HEADER, 0);//헤더 설정
  272. 컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//결과를 문자열로 요구하고 화면에 출력
  273. 컬_setopt ($ch, CURLOPT_POST , 1);//포스트 제출 방법
  274. 컬_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
  275. $data = 컬_exec($ch);//컬 실행
  276. 컬_close($ ch);
  277. return $data;
  278. }
  279. 개인 함수 pexpress($exname){
  280. $a = $this->map_text("http://www.kuaidi100.com/" );
  281. preg_match_all("/data-code="(?Pw )">(?P.*)</span>/iU",$a, $b);</li> <li> $name = array();</li> <li> foreach($b['title'] as $k=>$v){</li> <li> $name[$v] = $b[' name'][$ k];</li> <li> }</li> <li> if(!empty($name[$exname])){</li> <li> true를 반환;</li> <li> }else{</li> <li> false를 반환;</li> <li> }</li> <li> } </li> <li> 비공개 함수 express($keywords,$number){</li> <li> $a = $this->map_text("http://www.kuaidi100.com/");</li> <li> preg_match_all ("/data- code="(?P<name>w )"><span>(?P<title>.*)</span>/iU",$a,$b);</li> <li> $name = 배열 ​​();</li> <li> foreach($b['title'] as $k=>$v){</li> <li> $name[$v] = $b['name'][$k ];</li> <li> }</li> <li> $this->name = $name;</li> <li> $keywords = $name[$keywords];</li> <li> $url = "http://www.kuaidi100.com/query ?type={$ 키워드}&postid={$number}";</li> <li> $result = $this->map_text($url);</li> <li> $result = $this->json2array(json_decode($result) );</li> <li> return $result;</li> <li> }</li> <li> </li> <li> 개인 함수 doget ($start,$end,$time) // </li> <li>을 사용하여 데이터 가져오기 {</li> <li> if(empty($time )){</li> <li> $time = date('Y-m-d',time());</li> <li> }else{</li> <li> if(substr($time,0,1)!=0){</li> <li> $time = date('Y-0',time()).$time;</li> <li> }else{</li> <li> $time = 날짜('Y-',time()).$time;</li> <li> }</li> <li> }</li> <li> $star = $this->name[$start];</li> <li> $end = $this->name[$end];</li> <li> $url = "http://dynamic.12306.cn/otsquery/query/queryRemanentTicketAction.do?method=queryLeftTicket&orderRequest.train_date={$time}&orderRequest.from_station_telecode ={$star}&orderRequest.to_station_telecode={$end}&orderRequest.train_no=&trainPassType=QB&trainClass=QB#D#Z#T#K#QT#&includeStudent=00&seatTypeAndNum=&orderRequest.start_time_str=00:00--24:00" ;</li> <li> $optionget = array('http' => array('method' => "GET", 'header' => "User-Agent:Mozilla/4.0(호환; MSIE 7.0; Windows NT 6.0) ; .NET CLR 2.0.50727; .NET CLR 3.5.21022; .NET CLR 3.0.04506)rnReferer:http://dynamic.12306.cn/otsquery/ query/queryRemanentTicketAction.do?method=init")); </li> <li> $file = file_get_contents($url, false , stream_context_create($optionget));</li> <li> return $this->json2array(json_decode($file));</li> <li> }</li> <li> </li> <li>}</li> <li> <li>?></li> </ol></div> <em onclick="copycode($('code_j53'));">复代码</em> </div> </td></tr></table> <div id="comment_50307" class="cm"> </div> <div id="post_rate_div_50307"></div> <br><br></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>성명:</span><div>본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.</div></div></div><div class="nphpSytBox"><span>이전 기사:<a class="dBlack" title="Android 푸시 - 오로라 푸시" href="https://m.php.cn/ko/faq/314741.html">Android 푸시 - 오로라 푸시</a></span><span>다음 기사:<a class="dBlack" title="Android 푸시 - 오로라 푸시" href="https://m.php.cn/ko/faq/314747.html">Android 푸시 - 오로라 푸시</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>관련 기사</h2><em><a href="https://m.php.cn/ko/article.html" class="bBlack"><i>더보기</i><b></b></a></em><div class="clear"></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-6t+ed+2i-1n-4w" data-ad-client="ca-pub-5902227090019525" data-ad-slot="8966999616"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><ul class="nphpXgwzList"><li><b></b><a href="https://m.php.cn/ko/faq/1.html" title="cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법" class="aBlack">cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ko/faq/1.html" title="cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법" class="aBlack">cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ko/faq/1.html" title="cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법" class="aBlack">cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ko/faq/1.html" title="cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법" class="aBlack">cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ko/faq/2.html" title="정규식의 모든 표현식 기호(요약)" class="aBlack">정규식의 모든 표현식 기호(요약)</a><div class="clear"></div></li></ul></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5902227090019525" data-ad-slot="5027754603"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><footer><div class="footer"><div class="footertop"><img src="/static/imghwm/logo.png" alt=""><p>공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!</p></div><div class="footermid"><a href="https://m.php.cn/ko/about/us.html">회사 소개</a><a href="https://m.php.cn/ko/about/disclaimer.html">부인 성명</a><a href="https://m.php.cn/ko/update/article_0_1.html">Sitemap</a></div><div class="footerbottom"><p> © php.cn All rights reserved </p></div></div></footer><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body><!-- Matomo --><script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="https://tongji.php.cn/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '9']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script><!-- End Matomo Code --></html>