首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

微信公眾平台開發:整合去哪兒火車時刻查詢接口實戰

     編輯:PHP 相關知識

接口資訊

  • 來源:去哪兒網公開接口
  • 端點:https://train.qunar.com/qunar/checiInfo.jsp
  • 參數:
    • q:車次代碼(如 T110)
    • ver:毫秒級時間戳(防快取)
    • cityname:固定 123456
    • format=json、callback=XQScript_5(JSONP 格式)

請求範例

GET https://train.qunar.com/qunar/checiInfo.jsp?ex_track=&q=T110&format=json&cityname=123456&ver=1373813217828&callback=XQScript_5

PHP 整合代碼(已修正語法)

 '',
        'q'        => $trainNo,
        'format'   => 'json',
        'cityname' => '123456',
        'ver'      => floor(microtime(true) * 1000),
        'callback' => 'XQScript_5'
    ];
    
    $ch = curl_init($url . '?' . http_build_query($params));
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_USERAGENT      => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        CURLOPT_REFERER        => 'https://train.qunar.com/list_num.htm',
        CURLOPT_TIMEOUT        => 10,
        CURLOPT_SSL_VERIFYPEER => false,
    ]);
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    // 去除 JSONP 包裹
    if (preg_match('/^XQScript_5\((.*)\)$/', trim($response), $m)) {
        $json = $m[1];
        return json_decode($json, true);
    }
    return null;
}

// 使用範例
$data = getTrainInfo('T110');
if ($data) {
    print_r($data);
} else {
    echo "查詢失敗或車次不存在";
}

回傳資料結構說明

接口回傳 JSON 陣列,每個元素包含:

  • station:站名
  • arrive_time:到達時間
  • depart_time:出發時間
  • stop_time:停靠分鐘數
  • distance:累計里程

遺留問題與解決方案

問題:回傳站點順序非按里程排序,導致顯示亂序。

修正:以 distance 欄位為鍵進行 usort 排序:

usort($data, function($a, $b) {
    return $a['distance'] <=> $b['distance'];
});

生產環境建議

  1. 快取策略:車次時刻表變動低,建議 Redis 快取 24 小時,Key 格式 train:schedule:{trainNo}。
  2. 容錯處理:接口非官方,穩定性無保障,需實作重試(指數退避)與降級(回覆「暫無法查詢」)。
  3. 合規風險:商業專案建議採購 12306 官方授權資料或使用高鐵管家、攜程等合作商 API。

完整專案結構參考

wechat-train/
├── src/
│   ├── Service/TrainQueryService.php
│   └── Controller/WechatController.php
├── config/api.php
└── tests/TrainQueryServiceTest.php
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved