|
- <?php
- /**
- * Created by PhpStorm.
- * User: brocloni
- * Date: 2019/4/13
- * Time: 15:51
- */
-
- namespace backend\modules\api\util;
-
-
- use backend\modules\api\models\LvmamaOrderConnect;
- use backend\modules\api\models\OrderMain;
- use common\models\Msg;
- use common\util\CurlInterface;
-
- class KxTicketUtil
- {
- //企业码
- public static $kxBusConfig;
-
- /**
- * 获取快行漫游门票配置
- * @return mixed
- */
- function getBusConfig()
- {
- if (KxTicketUtil::$kxBusConfig == null) {
- KxTicketUtil::$kxBusConfig = \Yii::$app->params['kxTicket'];
- }
- return KxTicketUtil::$kxBusConfig;
- }
-
- /**
- * 初始化报文体
- * @param $sendCode
- * @return array
- */
- function getInitBody($sendCode, $bodyXml)
- {
- $config = $this->getBusConfig();
- $body = [
- "PWBRequest" => [
- "transactionName" => "SEND_CODE_REQ",
- "header" => [
- "application" => $sendCode,
- "requestTime" => date("Y-m-d H:i:s"),
- ],
- "identityInfo" => [
- "corpCode" => $config["corpCode"],
- "userName" => $config["userName"]
- ],
- "orderRequest" => $bodyXml
- ]
- ];
- $xmlBody = Util::arrayToXml($body);
- $config = $this->getBusConfig();
- $result = [
- "xmlMsg" => $xmlBody,
- "sign" => strtolower(md5("xmlMsg=" . $xmlBody . $config["key"]))
- ];
- return $result;
- }
-
- /**
- * 下单
- * @param $order_id
- * @return bool
- */
- function OrderCheck($order_id)
- {
- $order_main = new OrderMain();
- //查看是否是智游宝产品
- $orderMain = $order_main::find()->select('a.base_price,a.customer_name,a.customer_mobile,b.prod_code,b.org_id')->from('order_main a')->
- leftJoin('opera_product as b', 'a.prod_id=b.prod_id')->where(['a.order_id' => $order_id])->asArray()->one();
- if ($orderMain['org_id'] != 1832) {//非智游宝产品,不处理
- return true;
- }
- //设置入参
- $request = [
- "order" => [
- "certificateNo" => $orderMain['customer_name'],
- "linkName" => $order_main['customer_name'],
- "linkMobile" => $order_main['customer_mobile'],
- "orderCode" => $order_main['order_id'],
- "orderPrice" => $order_main['base_price'],//订单总价格
- "groupNo" => "",//团号
- "payMethod" => "zyb",//支付方式值spot现场支付vm备用金,zyb智游宝支付
- "ticketOrders" => [
- "ticketOrder" => []
- ]
- ]
- ];
- $order_info_list = $this->getTicketList($order_id);
- foreach ($order_info_list as $key => $val) {
- $val["credentials"] = [
- "credential" => [
- "name" => $val['name'],
- "id" => $val['id']
- ]
- ];
- unset($val['id']);
- unset($val['name']);
- $request['order']['ticketOrders']["ticketOrder"][] = $val;
- }
- //调用下单接口
- $busConfig = $this->getBusConfig();
- $curlBody = $this->getInitBody("SEND_CODE_REQ", $request);
- $curl = new CurlInterface($curlBody, 3);
- $json = $curl->execute($busConfig['url'], "POST");
- if (isset($json["PWBResponse"]) && isset($json["PWBResponse"]["code"]) && $json["PWBResponse"]["code"] == 0) {
- $lvmama_order_connect = new LvmamaOrderConnect();
- $lvmama_order_connect->istConnect($order_id, $val['partnerOrderNo'], $json['PWBResponse']['orderCode']);
- return true;
- }
- $errorMsg = "下单失败";
- if (isset($json['PWBResponse']) && isset($json['PWBResponse']['description'])){
- $errorMsg = $json['PWBResponse']['description'];
- }
- //下单或者支付失败预警短信
- $content = "预警:后台直连智游宝门票下单失败,订单号({$order_id}),请及时处理。";
- $phone_arr = [
- '13757163513',
- '18317023071',
- '13564184647',
- '15088913683',
- ];
- foreach ($phone_arr as $phone) {
- Msg::sendTelMsg($phone, $content);
- }
- $result = $order_main::updateAll(['CUSTOMER_MEMO' => $errorMsg], ['=', 'order_id', $order_id]);
- if ($result > 0) {
- return true;
- } else {
- return false;
- }
- }
-
-
- /** 获取订单ID 获取票列表
- * @param $order_id
- * @return array|\yii\db\ActiveRecord[]
- */
- function getTicketList($order_id)
- {
- $order_main = new OrderMain();
- //设置ticket列表
- $order_info_select = [
- 'ticketOrder' => 'order_id',
- 'name' => 'customer_name',
- 'id' => 'customer_id_no',
- 'price' => 'base_price',
- 'quantity' => 'count(prod_id)',
- 'totalPrice' => '(count(prod_id)*base_price)',
- 'occDate' => 'run_date',
- 'goodsCode' => '(select prod_code from opera_product where prod_id=a.prod_id)',
- 'goodsName' => '(select prod_name from opera_product where prod_id=a.prod_id)',
- 'remark' => '(select prod_name from opera_product where prod_id=a.prod_id)'
- ];
- $order_info_list = $order_main::find()->select($order_info_select)
- ->from('order_main a')
- ->where(['and', ['=', 'parent_order_id', $order_id], ['=', 'cancel_flag', 0]])
- ->groupBy('prod_id')
- ->asArray()
- ->all();
- return $order_info_list;
- }
-
- }
|