• PHP 天巡机票接口


    一个旅游网站项目,网站需要机票预订接入了天巡机票接口,获取机票信息,不搞不知道,一搞吓一跳比较麻烦。

    搜索机票信息需要分2步,首先POST获得一个SESSION,2秒之后,根据这个SESSION,从一个URL GET 数据 ,并且需要多次GET,这里就用AJXA轮询,

    直到返回的GET数据状态为 完成,即可停止轮询。

    轮询获取数据之后,还需要自己整理才可显示在网页上,

    上PHP代码,,THINKPHP框架代码

      1 <?php
      2 namespace HomeController;
      3 use ThinkController;
      4 
      5 class FlyController extends HomeClassesConfController {
      6 public function index(){
      7 $title = $this->title[1];    
      8 $keyword = $this->keyword[1];    
      9 $desc = $this->desc[1];
     10 $title = str_replace('{lei_name}','机票',$title);
     11 $title = str_replace('{site_name}',$this->site_name,$title);
     12 $this->assign('title',$title);    
     13 $this->assign('keyword',$keyword);    
     14 $this->assign('desc',$desc);    
     15 $this->display();
     16 }
     17 public function piao(){
     18 $post_data = I('post.');
     19 // P($post_data);die;
     20 $url = "http://partners.api.skyscanner.net/apiservices/pricing/v1.0";
     21 // $url = "http://business.skyscanner.net/apiservices/pricing/v1.0";
     22 $title = $this->title[1];    
     23 $keyword = $this->keyword[1];    
     24 $desc = $this->desc[1];
     25 $title = str_replace('{lei_name}','机票',$title);
     26 $title = str_replace('{site_name}',$this->site_name,$title);
     27 $this->assign('title',$title);    
     28 $this->assign('keyword',$keyword);    
     29 $this->assign('desc',$desc);    
     30 $ch = curl_init();
     31 curl_setopt($ch, CURLOPT_URL, $url);
     32 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     33 curl_setopt($ch, CURLOPT_POST, 1);
     34 curl_setopt($ch, CURLOPT_HEADER, true);
     35 curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
     36 $output = curl_exec($ch);
     37 curl_close($ch);
     38 //print_r($output);
     39 $sessions = between($output,'sg1/v1.0/','Content-Length');
     40 //echo $sessions;
     41 $this->assign('sessions',$sessions);
     42 $this->assign('apikey',$post_data['apikey']);
     43 // echo $sessions. '---'.$post_data['apikey'];
     44 $u = U('home/fly/lun',array('b'=>$sessions,'k'=>$post_data['apikey'],'t'=>$post_data['types'],'h'=>$post_data['h']));
     45 exit(json_encode(array('u'=>$u)));
     46 //echo $u;
     47 $this->assign('u',$u);
     48 $this->assign('post_data',$post_data);
     49 
     50 $this->display('index');
     51 }
     52 
     53 public function lun(){
     54 $s = trim($_GET['b']);
     55 $a = trim($_GET['k']);
     56 $t = trim($_GET['t']);
     57 $h = trim($_GET['h']);//h=1表示,第2次,搜索回程
     58 $url = "http://partners.api.skyscanner.net/apiservices/pricing/v1.0/$s?apiKey=$a&mj=".time();
     59 $ch = curl_init();
     60 curl_setopt($ch, CURLOPT_URL, $url);
     61 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     62 curl_setopt($ch, CURLOPT_HEADER, false);
     63 $output = curl_exec($ch);
     64 curl_close($ch); 
     65 ///print_r($output);
     66 file_put_contents('mp_'.$t.'.txt',$output);
     67 $j_array    = json_decode($output,true);    
     68 //往返
     69 if ($t == 2)
     70 {
     71 $j = $this->_outhui($j_array) ;
     72 }else{
     73 $j = $this->_out($j_array) ;
     74 }
     75 
     76 
     77 
     78 $jie['Status'] = $j_array['Status'];
     79 
     80 
     81 $total_price_ci = $j['total_price_ci'];
     82 
     83 unset($j['total_price_ci']);
     84 //P($j); die;
     85 if (count($j_array['Itineraries']) < 2)
     86 {
     87 $jie['g'] = 0;
     88 }
     89 
     90 $this->assign('h',$h);
     91 $this->assign('piao',$j);
     92 $this->assign('total_price_ci',$total_price_ci);    
     93 
     94 //往返
     95 if ($t == 2)
     96 {
     97 $jie['html'] = $this->fetch('ji2');
     98 }else{
     99 $jie['html'] = $this->fetch('ji');
    100 }    
    101 //
    102 exit(json_encode($jie));
    103 }    
    104 //单程测试
    105 public function jt(){
    106 $json = file_get_contents('mp_3.txt');
    107 $output    = json_decode($json,true);    
    108 
    109 $j = $this->_out($output,0) ;
    110 //循环 Legs
    111 
    112 $total_price_ci = $j['total_price_ci'];
    113 
    114 unset($j['total_price_ci']);
    115 
    116 $this->assign('piao',$j);
    117 $this->assign('total_price_ci',$total_price_ci);
    118 
    119 $this->display();    
    120 }    
    121 //往返测试
    122 public function jb(){
    123 $json = file_get_contents('mp_1480656765.txt');
    124 $output    = json_decode($json,true);    
    125 
    126 $j = $this->_outhui($output,0) ;
    127 //循环 Legs
    128 
    129 $total_price_ci = $j['total_price_ci'];
    130 
    131 unset($j['total_price_ci']);
    132 
    133 $this->assign('piao',$j);
    134 $this->assign('total_price_ci',$total_price_ci);
    135 
    136 $this->display();    
    137 }    
    138 public function showa(){
    139 echo 'showa';
    140 }
    141 private function _outhui(&$output,$shu=1){
    142 $j = array();
    143 foreach($output['Itineraries'] as $v){
    144 $tmp['qu']['id'] = $v['OutboundLegId'];
    145 $tmp['hui']['id'] = $v['InboundLegId'];
    146 $tmp['Itineraries'] = $v;
    147 foreach($output['Legs'] as $va){
    148 if ($va['Id'] == $tmp['qu']['id'])
    149 {
    150 $tmp['qu']['legs'] = $va;
    151 }
    152 if ($va['Id'] == $tmp['hui']['id'])
    153 {
    154 $tmp['hui']['legs'] = $va;
    155 }    
    156 }
    157 
    158 foreach($output['Carriers'] as $vb ){
    159 if ($tmp['qu']['legs']['Carriers']['0'] == $vb['Id'])
    160 {
    161 $tmp['qu']['Carriers'] = $vb;
    162 }    
    163 if ($tmp['hui']['legs']['Carriers']['0'] == $vb['Id'])
    164 {
    165 $tmp['hui']['Carriers'] = $vb;
    166 }    
    167 }
    168 //出发地信息Places
    169 foreach($output['Places'] as $vc){
    170 if ($tmp['qu']['legs']['OriginStation'] == $vc['Id'])
    171 {
    172 $tmp['qu']['palce'] = $vc;
    173 }    
    174 if ($tmp['hui']['legs']['OriginStation'] == $vc['Id'])
    175 {
    176 $tmp['hui']['palce'] = $vc;
    177 }    
    178 }
    179 //目的地信息Places
    180 foreach($output['Places'] as $vb){
    181 if ($tmp['qu']['legs']['DestinationStation'] == $vb['Id'])
    182 {
    183 $tmp['qu']['palce_b'] = $vb;
    184 }    
    185 if ($tmp['hui']['legs']['DestinationStation'] == $vb['Id'])
    186 {
    187 $tmp['hui']['palce_b'] = $vb;
    188 }    
    189 }    
    190 
    191 foreach($tmp['Itineraries']['PricingOptions'] as &$vd){
    192 foreach($output['Agents'] as $va){
    193 if ($vd['Agents'][0] == $va['Id'])
    194 {
    195 $vd['lai'] = $va;
    196 }
    197 }    
    198 }    
    199 
    200 $j[] = $tmp;
    201 }
    202 
    203 $total_price_ci = 0;
    204 foreach($j as &$v){
    205 $total_price_ci += count($v['Itineraries']['PricingOptions']);
    206 }
    207 //P($j);
    208 $j['total_price_ci'] = $total_price_ci ;    
    209 return $j;
    210 }
    211 private function _out(&$output,$shu=2){
    212 $j = array();
    213 foreach($output['Legs'] as $v){
    214 $tmp['legs'] = $v;
    215 //循环查找 Carriers
    216 foreach($output['Carriers'] as $va){
    217 if ($v['Carriers']['0'] == $va['Id'])
    218 {
    219 $tmp['Carriers'] = $va;
    220 }    
    221 }    
    222 
    223 //循环查找 Itineraries
    224 foreach($output['Itineraries'] as $vi){
    225 if ($v['Id'] == $vi['OutboundLegId'])
    226 {
    227 $tmp['Itineraries'] = $vi;
    228 }    
    229 }
    230 
    231 //出发地信息Places
    232 foreach($output['Places'] as $va){
    233 if ($v['OriginStation'] == $va['Id'])
    234 {
    235 $tmp['from'] = $va;
    236 }    
    237 }
    238 //目的地信息Places
    239 foreach($output['Places'] as $vb){
    240 if ($v['DestinationStation'] == $vb['Id'])
    241 {
    242 $tmp['to'] = $vb;
    243 }    
    244 }
    245 
    246 if (count($tmp['Itineraries']['PricingOptions']) > $shu)
    247 {
    248 $j[]= $tmp;
    249 }
    250 
    251 
    252 }
    253 
    254 $total_price_ci = 0;
    255 foreach($j as &$v){
    256 $total_price_ci += count($v['Itineraries']['PricingOptions']);
    257 foreach($v['Itineraries']['PricingOptions'] as &$vb){
    258 foreach($output['Agents'] as $va){
    259 if ($vb['Agents'][0] == $va['Id'])
    260 {
    261 $vb['lai'] = $va;
    262 }
    263 }    
    264 }
    265 }
    266 //P($j);
    267 $j['total_price_ci'] = $total_price_ci ;    
    268 return $j;
    269 }
    270 }

    演示网址:

    http://lv.226660.pw/index.php/fly/index.html

  • 相关阅读:
    移动端触屏滑动,JS事件
    解决 插件LArea 在IOS上浮出软键盘问题
    关于ajax请求后js绑定事件失效问题解决方法
    Resolving timed out after 2511 milliseconds
    docker 操作 (让容器后台运行程序不退出)
    php导出excel
    yii2 left join 查询
    搭建自用git服务器
    js 复制字符到剪切板
    win10添加软连接
  • 原文地址:https://www.cnblogs.com/fuyifan/p/6219181.html
Copyright © 2020-2023  润新知