ソースの QR コードをスキャンして試すことができます。
- /**
- * wechat phpテスト
- */
- include("ABClient.php"); //Aibang.comからSDKを適用してダウンロード
- define("FNAPK", "API key") ; //この Baidu アプリケーション duapp.com は、アプリケーションによって取得された API キーを作成します
- define("WAPK","key") //このキーのアドレスは http://lbsyun.baidu.com/apiconsole/key?application です。 =key Get
- //トークンを定義します
- 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("name.php");
- }
- public function valid()
- {
- $echoStr = $_GET["echostr"];
-
- //有効な署名、オプション
- if($this- > ;checkSignature()){
- echo $echoStr;
- exit;
- }
- }
-
- public function 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 = trim($postObj->Content);
- $time = time();
- $msgid = $postObj->MsgId;
- $textTpl = "
- < ; ToUserName>
-
- %s< / CreateTime>
-
-
- < FuncFlag> ;0
- ";
- if($type == "event" && $event == "subscribe")
- {
- $msgType = "text";
- $contentStr.= "ようこそ Weidu Network をフォローしてください。このパブリック プラットフォームには次の機能があります: nn";
- $contentStr.= "1. 中国語または英語の翻訳用の文字を直接入力します ("Hello"n";
- $contentStr.=)。 "2 .天気クエリの場合は「天気 + 地域」を入力します (例: "天気 + 石家荘"n";
- $contentStr.= "3. 公共交通機関のクエリの場合は「都市 + 出発地 + 目的地」を入力します。例: "石家荘 +鉄道駅 + 公家荘 "n";
- $contentStr.= "4. 小さな雌犬とチャットするには、「@anycontent」と入力します (例: "@little bitch"n";
- $contentStr.= "5. 地理的位置を送信します) WeChat に天気情報のクエリを送信して、n";
- $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
- echo $resultStr;
-
- }else if($ type == "テキスト"){
- $keywords =explode("+",$keyword);
- $b =explode("@",$keyword);
- if(isset($b[1])){
- $contentStr = $this->simsim($b[1]);
- $msgType = "text";
- $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
- echo $ resultStr;
- exit();
- }
- if($keywords[0]=="train"){
- $city = $keywords[1];
- $end = $keywords[2];
- $time = $keywords[3];
- $result = $ this->doget($city,$end,$time);
- if(!empty($result)){
- $result =trip_tags($result['datas']);
- $return_str = str_replace("  ;","",$result);
- $return_str = str_replace("\n","",$return_str);
- $a =explode(",",$return_str);
- $name =array();
- $c = array_chunk($a,16);
- array_pop($c);
- foreach($c as $k =>$v){
- $str="残りの投票数:n ビジネス席:".$v [5].」、特等席:「.$v[6].」、一等席:「.$v[7].」、二等席:「.$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 = preg_replace("/プレミアムクラス席:--, /","",$ str);
- $str = preg_replace("/ファーストクラスシート:--,/","",$str);
- $str = preg_replace("/セカンドクラスシート:--, /","",$ str);
- $str = preg_replace("/アドバンスト ソフト スリーパー:--,/","",$str);
- $str = preg_replace("/ソフト スリーパー:--,/ ","",$str);
- $str = preg_replace("/ハードスリーパー:--,/","",$str);
- $str = preg_replace("/ソフトシート:--,/", "",$str);
- $str = preg_replace("/ハードシート:--,/","",$str);
- $str = preg_replace("/その他:--/","",$ 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;
- exit();
- }
- 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 as $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(!empty($weather))
- {
- $data = $this->json2array($weather) ;
- foreach($data as $k =>$v)
- {
- $str.=$v['date'].'。天気: '.$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 = $keywords[0];
- $start = $keywords[1];
- $end =$keywords[2 ];
- $a = $this->model->test_transfer($city,$start,$end);
- if(!empty($a)){
- foreach($a as $k=>$ v) {
- $contentStr.= "Route{$c}:".$v['dist']." メートル。推定時間: {$v['time']} 分。nBus ルート: {$ v['segments' ]["segment"][0]["line_name"]}。n 乗車場所: {$v['segments']["segment"][0]["start_stat"]}。 ['セグメント']["セグメント"][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;
- }
- }
- //获取地理的位置の
- プライベート関数 address($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
- private function 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);
- curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
- $file_contents =curl_exec($ch);
- curl_close($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 ){
- return true;
- }else{
- return false;
- }
- }
- プライベート関数 simsim($keywords){
- $curlPost=array("txt"=>$キーワード);
- $ch =curl_init();//初化curl
- curl_setopt($ch,CURLOPT_URL,'http://xiaohuangji.com/ajax.aspx');//抓取指定网页
- curl_setopt($ch, CURLOPT_HEADER, 0);//設置ヘッダー
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求結果は文字列で画面上に出力
- curl_setopt($ch, CURLOPT_POST, 1);//ポスト提交方式
- curl_setopt ($ch, CURLOPT_POSTFIELDS, $curlPost);
- $data =curl_exec($ch);//実行curl
- curl_close($ch);
- return $data;
- }
- private function pexpress($exname){
- $a = $this->map_text("http://www.kuaidi100.com/");
- preg_match_all("/data-code="(?Pw+)">(?P< ;title>.*)/iU",$a,$b);
- $name = array();
- foreach($b['title'] as $k=>$v){
- $name[$v] = $b['name'][$k];
- }
- if(!empty($name[$exname])){
- return true;
- }else{
- return false;
- }
- }
- プライベート関数express($keywords,$number){
- $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];
- }
- $this->name = $name ;
- $keywords = $name[$keywords];
- $url = "http://www.kuaidi100.com/query?type={$keywords}&postid={$number}";
- $result = $this- >map_text($url);
- $result = $this->json2array(json_decode($result));
- return $result;
- }
-
- プライベート関数 doget ($start,$end,$time) // get获取データベース使用
- {
- if(empty($time)){
- $time = date('Y-m-d',time());
- }else{
- if(substr($time,0,1)!=0){
- $time = date('Y-0',time()).$time;
- }else{
- $time = date(' 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%23D%23Z%23T%23K%23QT%23&includeStudent=00&seatTypeAndNum=&orderRequest.start_time_str=00%3A00--24%3A00";
- $optionget = array('http' => array('method' => "GET", 'header' => "ユーザー エージェント:Mozilla/4.0 (互換性; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5. 21022; .NET CLR 3.0.04506; CIBA)rnAccept:*/*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));
- }
-
- }
-
- ?>
复制帽
|