소스에서 QR 코드를 스캔하여 사용해 볼 수 있습니다.
- /**
- * 위챗 PHP 테스트
- */
- include("ABClient.php") //Aibang.com 애플리케이션을 다운로드한 후 SDK를 다운로드합니다
- define("FANAPK", "API key"); //이 Baidu 애플리케이션 duapp.com은 API 키를 얻기 위한 애플리케이션을 생성합니다
- define("WAPK", "key") //이 키 주소 http : //lbsyun.baidu.com/apiconsole/key?application=key를 얻으려면
- //토큰 정의
- define("TOKEN", "여기에 자신만의 토큰을 작성하세요");
- $wechatObj = new wechatCallbackapiTest();
- $wechatObj->responseMsg();
-
- class wechatCallbackapiTest
- {
- private $model;
- private $name;
- public function __construct( ){
- $this->model = new ABClient();
- $a = $this->model->test_transfer();
- $this->name = include("이름 .php");
- }
- 공개 함수 valid()
- {
- $echoStr = $_GET["echostr"];
-
- //유효한 서명, 옵션
- if($this->checkSignature()){
- echo $echoStr;
- exit;
- }
- }
-
- 공개 함수 responseMsg()
- {
-
- //포스트 데이터 가져오기, 환경이 다르기 때문일 수 있음
- $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
-
- //포스트 데이터 추출
- if (!empty($ postStr)){
-
- $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
- $fromUsername = $postObj->FromUserName;
- $toUsername = $postObj->ToUserName ;
- $type = $postObj->MsgType;
- $event = $postObj->Event;
- $c = $postObj->Location_X;
- $d = $postObj-> ;Location_Y;
- $keyword = 트림($postObj->Content);
- $time = time();
- $msgid = $postObj->MsgId;
- $textTpl = "< ;xml>
-
- %s
-
-
- 0
- ";
- if($type == "event" && $event = = "구독")
- {
- $msgType = "text";
- $contentStr.= "Weidu Network를 팔로우하신 것을 환영합니다. 이 공개 플랫폼에는 다음 기능이 있습니다: nn";
- $contentStr . = "1. "안녕하세요"와 같이 한자 또는 한영 번역을 위해 한자를 직접 입력합니다. n";
- $contentStr.= "2. "날씨 스자좡"과 같이 날씨 쿼리에 "날씨 지역"을 입력합니다. n";
- $contentStr.= "3. "스자좡 기차역 공자좡"과 같이 대중교통 쿼리에 "도시 출발지 및 도착지"를 입력합니다.
- $contentStr.= "4. "를 입력합니다. @anycontent" 다음에 작은 Jianji 채팅이 이어집니다(예: "@小小鸡"n";
- $contentStr.= "5. WeChat은 날씨 쿼리를 위해 지리적 위치를 보냅니다. 시도해 볼 수 있습니다.";
- $ resultStr = sprintf( $textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
- echo $resultStr;
-
- }else if($type == "text"){
- $keywords = 폭발(" ",$keyword);
- $b = 폭발("@",$keyword);
- if(isset($b[1])){
- $contentStr = $this- >simsim($b[1]);
- $msgType = "text";
- $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr );
- echo $resultStr;
- 종료();
- }
- if($keywords[0]=="기차"){
- $city = $keywords[1];
- $end = $keywords[2];
- $time = $keywords[ 3];
- $result = $this->doget($city,$end,$time);
- if(!empty($result)){
- $result = Strip_tags($result[ 'datas']);
- $return_str = str_replace(" ","",$result);
- $return_str = str_replace("\n","",$return_str);
- $ a = 폭발(",",$return_str);
- $name =array();
- $c = array_chunk($a,16);
- array_pop($c);
- foreach( $c as $k =>$v){
- $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];
- $str = preg_replace("/하드 시트:--,/","",$str);
- $str = preg_replace("/비즈니스 좌석:--,/","",$str) --,/","",$str);
- $str = preg_replace("/공주 좌석:- -,/","",$str);
- $str = preg_replace("/一1등석:--,/","",$str);
- $str = preg_replace(" /2등석:--,/","",$str);
- $str = preg_replace ("/프리미엄 슬리퍼:--,/","",$str);
- $str = preg_replace("/소프트 슬리퍼:--,/","",$str);
- $str = preg_replace("/하드 슬리퍼:--,/","",$str);
- $str = preg_replace("/소프트 시트:--,/","",$str);
- $str = preg_replace("/하드 시트:--,/","",$str);
- $str = preg_replace("/Other:--/","",$str);
- $contentStr.="열차 번호: {$v[1]}, 출발역: {$v[2 ]}, 도착역: {$v[3]}, 소요시간: {$v[4]}. n{$str}nn";
- if($k == 12){
- break;
- }
- }
- }else{
- $contentStr.="아님 죄송합니다. ";
- }
-
- $msgType = "text";
- $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr;
- 종료();
- }
- if(isset($keywords[1])&&!isset($keywords[2])){
- if($this-> ; pexpress(trim($keywords[0]))){
- $a = $this->express(trim($keywords[0]),trim($keywords[1]));
- if ( $a["message"]=="ok"){
- if($a['ischeck']==1){
- $contentStr.="패키지가 nn에 서명되었습니다";
- }else{
- $contentStr.="패키지가 nn에 서명되지 않았습니다.";
- }
- $data = $a['data'];
- foreach($data를 $로 k => ;$v){
- $contentStr.="업데이트 시간: {$v["time"]}n물류 상태: {$v["context"]}nn";
- }
- }else {
- $contentStr = "쿼리가 실패했습니다. 올바른 쿼리를 입력하십시오.";
- }
- $msgType = "text";
- $resultStr = sprintf($textTpl, $fromUsername, $toUsername , $ time, $msgType, $contentStr);
- echo $resultStr;
- }else{
- $weather = $this->weather($keywords[1]);
- if(! 비어 있음( $weather))
- {
- $data = $this->json2array($weather);
- foreach($data as $k =>$v)
- {
- $str .=$v['날짜'].'. 날씨: '.$v['날씨'].'. 풍속: '.$v['wind'].'. 온도: '.$v['온도']."nn";
- }
- }else{
- $str="날씨 베이징 등 올바른 주소를 입력하세요.";
- }
-
- $msgType = "text";
- $contentStr = $str;
- $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr)
- echo $resultStr;
- }
-
- }else if(isset($keywords[2])&&($keywords[0]!=="train")){
- $city = $ 키워드[0];
- $start = $keywords[1];
- $end =$keywords[2];
- $a = $this->model->test_transfer($city ,$ start,$end);
- if(!empty($a)){
- foreach($a as $k=>$v){
- $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";
- if($k == 4){
- break;
- }
- }
-
- }else{
- $contentStr="抱歉没有查询到";
- }
-
- $msgType = "text";
- $resultStr = sprintf ($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
- echo $resultStr;
- }else{
- $fanyi = $this->fanyi($keyword);
- $msgType = "text";
- $contentStr = $fanyi;
- $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
- echo $resultStr;
- }
-
- }else if($type == 'location'){
- $result = $this->address($c,$d);
- if (isset($result['district'])){
- $weather = $this->weather($result['district']);
- if(!$weather){
- $weather = $this->weather($result['city']);
- }
- }else{
- $weather = $this->weather($result['city']);
- }
-
- $data = $this->json2array($weather);
- foreach($data as $k =>$v){
- $str.=$v[ 'date'].'。천기:'.$v['weather'].'。风速:'.$v['wind'].'。온도: '.$v['온도']."nn";
- }
- $msgType = "text";
- $contentStr = $str;
- $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
- echo $resultStr;
- }else{
- echo "뭔가를 입력할 수 있습니다.";
- }
-
- }else {
- echo "";
- exit;
- }
- }
- //지리적 위치 가져오기
- 개인 함수 주소($addx,$addy)
- {
- $arr = array();
- $result = $this->map_text("http://api.map.baidu.com/geocoder/v2/?ak=".WAPK."&callback= renderReverse&location ={$addx},{$addy}&output=xml&pois=0");
- $data = simplexml_load_string($result, 'SimpleXMLElement', LIBXML_NOCDATA);
- $result = $this->json2array( $ data);
- $arr = $result["result"]["addressComponent"];
- $address = $result['result']['formatted_address'];
- array_push($arr, $ address);
- return $arr;
- }
- //json을 배열로 구문 분석
- private function json2array($json) {
- if ($json) {
- foreach (( array )$json as $k=>$v) {
- $data[$k] = !is_string($v) ? $this->json2array($v) : $v;
- }
- return $data;
- }
- }
- //날씨 정보 가져오기
- 프라이빗 함수 Weather($data)
- {
- //API 호출에 따라 데이터 출력
- $ url="http://api.map.baidu.com/telematics/v2/weather?location={$data}&output=json&ak=".WAPK;
- $weather=$this->map_text($url );
- $data = json_decode($weather);
- return $data->results;
- }
- //번역된 API 호출
- 비공개 함수 fanyi($data)
- {
- //API 호출에 따른 데이터 출력
- $url="http://openapi.baidu.com/public/2.0/bmt/translate?client_id=".FANAPK."&q={$data } &from=auto&to=auto";
- $fanyi=$this->map_text($url);
- $shuju=json_decode($fanyi);
- $result=$shuju->trans_result;
- return $result[0]->dst;
- }
- //주소 구문 분석을 위한 API
- private function map_text($url)
- {
- if(!function_exists(' file_get_contents ')) {
- $file_contents = file_get_contents($url);
- } else {
- $ch =curl_init();
- $timeout = 5;
- curl_setopt($ch, CURLOPT_URL , $url);
- 컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- 컬_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
- $file_contents = 컬_exec($ch);
- 컬_닫기($ ch );
- }
- return $file_contents;
- }
- 비공개 함수 checkSignature()
- {
- $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 ){
- true 반환;
- }else{
- false 반환;
- }
- }
- 비공개 함수 simsim($keywords){
- $curlPost=array("txt"=> ; $keywords);
- $ch = 컬_init();//컬 초기화
- 컬_setopt($ch,CURLOPT_URL,'http://xiaohuangji.com/ajax.aspx');//지정된 웹 캐치 페이지
- 컬_setopt($ch, CURLOPT_HEADER, 0);//헤더 설정
- 컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//결과를 문자열로 요구하고 화면에 출력
- 컬_setopt ($ch, CURLOPT_POST , 1);//포스트 제출 방법
- 컬_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
- $data = 컬_exec($ch);//컬 실행
- 컬_close($ ch);
- return $data;
- }
- 개인 함수 pexpress($exname){
- $a = $this->map_text("http://www.kuaidi100.com/" );
- preg_match_all("/data-code="(?Pw )">(?P.*)/iU",$a, $b);
- $name = array();
- foreach($b['title'] as $k=>$v){
- $name[$v] = $b[' name'][$ k];
- }
- if(!empty($name[$exname])){
- true를 반환;
- }else{
- false를 반환;
- }
- }
- 비공개 함수 express($keywords,$number){
- $a = $this->map_text("http://www.kuaidi100.com/");
- preg_match_all ("/data- code="(?Pw )">(?P.*)/iU",$a,$b);
- $name = 배열 ();
- foreach($b['title'] as $k=>$v){
- $name[$v] = $b['name'][$k ];
- }
- $this->name = $name;
- $keywords = $name[$keywords];
- $url = "http://www.kuaidi100.com/query ?type={$ 키워드}&postid={$number}";
- $result = $this->map_text($url);
- $result = $this->json2array(json_decode($result) );
- return $result;
- }
-
- 개인 함수 doget ($start,$end,$time) //
- 을 사용하여 데이터 가져오기 {
- if(empty($time )){
- $time = date('Y-m-d',time());
- }else{
- if(substr($time,0,1)!=0){
- $time = date('Y-0',time()).$time;
- }else{
- $time = 날짜('Y-',time()).$time;
- }
- }
- $star = $this->name[$start];
- $end = $this->name[$end];
- $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" ;
- $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"));
- $file = file_get_contents($url, false , stream_context_create($optionget));
- return $this->json2array(json_decode($file));
- }
-
- }
-
- ?>
复代码
|