|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- <?php
- /**
- *
- * ============================================================================
- * * 版权所有 蜘蛛出行 * *
- * 网站地址: http://www.zhizhuchuxing.com
- * ----------------------------------------------------------------------------
- * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
- * 使用;不允许对程序代码以任何形式任何目的的再发布。
- * ============================================================================
- * Author By: 倪宗锋
- * PhpStorm CtripSwitchService.php
- * Create By 2018/5/2 19:08 $
- */
-
- namespace backend\modules\hotel\service;
-
- use yii;
- use yii\httpclient\Client;
-
- class CtripSwitchService
- {
- const SUCCESS_CODE = 0;
- const SYS_ERR0R = 100; //系统错误
- const CTRIP_HOTEL_CODE = 101; //携程创建子酒店失败
- const MASTER_HOTEL_EMPTY = 102; //母酒店ID不能为空
- const REPEAT_CREATE = 103; //该酒店已添加
- const MAPPING_HOTEL_ERROR = 104; //酒店关联失败
- const UNMAPPING_CODE = 105; //酒店未关联
- const PARAM_ERR0R = 106; //请求参数缺失
- const ADD_HOTEL_ERR = 107; //添加酒店信息失败
- const GET_MASTER_HOTEL_ERR = 108; //添加酒店信息失败
-
-
- const RETURN_MSG = [
- self::SUCCESS_CODE => 'success',
- self::CTRIP_HOTEL_CODE => '携程创建子酒店失败',
- self::SYS_ERR0R => '系统错误',
- self::MASTER_HOTEL_EMPTY => '母酒店ID不能为空',
- self::REPEAT_CREATE => '携程子酒店已创建,但cs系统不存在子酒店id',
- self::MAPPING_HOTEL_ERROR => '酒店关联失败',
- self::UNMAPPING_CODE => '请检查 Mapping 关系!',
- self::PARAM_ERR0R => '请求参数缺失',
- self::ADD_HOTEL_ERR => '添加酒店信息失败',
- self::GET_MASTER_HOTEL_ERR => '获取代理通酒店信息失败',
- ];
-
-
- const CTRIP_ID = 669; //携程
- const QUNAR_ID = 1667; //去哪
- const ELONG_ID = 1668; //艺龙
- const CHANNELA_ID = 1669; //分销A
- const B2B_ID = 1670; //b2b
- public $enableCsrfValidation = false;
- public $ctripConf;
- public $request_params;
-
- /**
- * CtripSwitchController constructor.
- */
- public function __construct()
- {
- $this->ctripConf = Yii::$app->params['ctrip_switch'];
- }
- /**
- * Notes:request请求
- * User: Steven
- * Date: 2018/4/16
- * Time: 15:28
- * @param $target_url
- * @param $data
- * @return mixed
- */
- public function request($target_url, $data)
- {
- $data['requestor'] = $this->getCommonParams();
- $timestamp = $this->getTimestamp();
- $signature = $this->setSignature($this->ctripConf['switch_supplier_id'], $timestamp, $this->ctripConf['interfacekey']);
- $client = new Client(['baseUrl' => $this->ctripConf['base_url']]);
- $request = $client->createRequest()
- ->setHeaders(['content-type' => 'application/json;charset=UTF-8'])
- ->addHeaders(["timestamp" => $timestamp])
- ->addHeaders(['signature' => $signature]);
- $response = $request->setFormat(Client::FORMAT_JSON)
- ->setMethod('post')
- ->setUrl($target_url)
- ->setData($data)
- ->send();
-
- return json_decode($response->content);
- }
-
- /**
- * Notes:生成公共节点
- * User: Steven
- * Date: 2018/4/19
- * Time: 14:38
- * @return array
- */
- private function getCommonParams()
- {
- return [
- 'invoker' => $this->ctripConf['requestor']['invoker'],
- 'operatorName' => $this->ctripConf['requestor']['operatorName'],
- 'opClientIP' => $this->ctripConf['requestor']['opClientIP'],
- 'userId' => $this->ctripConf['requestor']['userId'],
- 'languageType' => $this->ctripConf['requestor']['languageType'],
- ];
- }
-
-
- /**
- * Notes:加密验证逻辑
- * User: Steven
- * Date: 2018/4/16
- * Time: 15:42
- * @param $supplierID //供应商ID,int类型
- * @param $timestamp
- * @param $interfacekey //密钥Key
- * @param $signature
- * @return bool
- */
- private function getSignature($supplierID, $timestamp, $interfacekey, $signature)
- {
- //加密算法是md5(base64)
- $signature_str = strtoupper(base64_encode(md5($supplierID . $timestamp . $interfacekey, true)));
-
- return $signature == $signature_str;
- }
-
- /**
- * Notes:生成加密串
- * User: Steven
- * Date: 2018/4/16
- * Time: 17:58
- * @param $supplierID
- * @param $timestamp
- * @param $interfacekey
- * @return string
- */
- private function setSignature($supplierID, $timestamp, $interfacekey)
- {
- //加密算法是md5(base64)
- $signature = strtoupper(base64_encode(md5($supplierID . $timestamp . $interfacekey, true)));
-
- return $signature;
- }
-
- /**
- * Notes:获取当前时间的毫秒数
- * User: Steven
- * Date: 2018/4/16
- * Time: 18:01
- * @return float
- */
- private function getTimestamp()
- {
- list($msec, $sec) = explode(' ', microtime());
- $msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
-
- return $msectime;
- }
-
- /**
- * Created by PhpStorm.
- * NOTES:获取接口所需要的渠道ID
- * User: Steven
- * Date: 2018/4/27
- * Time: 16:25
- * Class getChannelID
- * @param $channel_str
- * @return string
- */
- public function getChannelID($channel_str)
- {
- $channel_arr = explode(',', $channel_str);
- $channel_id_str = '';
- foreach ($channel_arr as $value) {
- $channel_id_str .= $channel_id_str == '' ? '' : ',';
- switch ($value) {
- case self::CTRIP_ID:
- $channel_id_str .= 'Ctrip';
- break;
- case self::QUNAR_ID:
- $channel_id_str .= 'Qunar';
- break;
- case self::ELONG_ID:
- $channel_id_str .= 'Elong';
- break;
- case self::CHANNELA_ID:
- $channel_id_str .= 'ChannelA';
- break;
- case self::B2B_ID:
- $channel_id_str .= 'B2B';
- break;
- default:
- break;
- }
- }
-
- return $channel_id_str;
- }
- }
|