You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

169 lines
5.6 KiB

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: brocloni
  5. * Date: 2019/4/13
  6. * Time: 15:51
  7. */
  8. namespace backend\modules\api\util;
  9. use backend\modules\api\models\LvmamaOrderConnect;
  10. use backend\modules\api\models\OrderMain;
  11. use common\models\Msg;
  12. use common\util\CurlInterface;
  13. class KxTicketUtil
  14. {
  15. //企业码
  16. public static $kxBusConfig;
  17. /**
  18. * 获取快行漫游门票配置
  19. * @return mixed
  20. */
  21. function getBusConfig()
  22. {
  23. if (KxTicketUtil::$kxBusConfig == null) {
  24. KxTicketUtil::$kxBusConfig = \Yii::$app->params['kxTicket'];
  25. }
  26. return KxTicketUtil::$kxBusConfig;
  27. }
  28. /**
  29. * 初始化报文体
  30. * @param $sendCode
  31. * @return array
  32. */
  33. function getInitBody($sendCode, $bodyXml)
  34. {
  35. $config = $this->getBusConfig();
  36. $body = [
  37. "PWBRequest" => [
  38. "transactionName" => "SEND_CODE_REQ",
  39. "header" => [
  40. "application" => $sendCode,
  41. "requestTime" => date("Y-m-d H:i:s"),
  42. ],
  43. "identityInfo" => [
  44. "corpCode" => $config["corpCode"],
  45. "userName" => $config["userName"]
  46. ],
  47. "orderRequest" => $bodyXml
  48. ]
  49. ];
  50. $xmlBody = Util::arrayToXml($body);
  51. $config = $this->getBusConfig();
  52. $result = [
  53. "xmlMsg" => $xmlBody,
  54. "sign" => strtolower(md5("xmlMsg=" . $xmlBody . $config["key"]))
  55. ];
  56. return $result;
  57. }
  58. /**
  59. * 下单
  60. * @param $order_id
  61. * @return bool
  62. */
  63. function OrderCheck($order_id)
  64. {
  65. $order_main = new OrderMain();
  66. //查看是否是智游宝产品
  67. $orderMain = $order_main::find()->select('a.base_price,a.customer_name,a.customer_mobile,b.prod_code,b.org_id')->from('order_main a')->
  68. leftJoin('opera_product as b', 'a.prod_id=b.prod_id')->where(['a.order_id' => $order_id])->asArray()->one();
  69. if ($orderMain['org_id'] != 1832) {//非智游宝产品,不处理
  70. return true;
  71. }
  72. //设置入参
  73. $request = [
  74. "order" => [
  75. "certificateNo" => $orderMain['customer_name'],
  76. "linkName" => $order_main['customer_name'],
  77. "linkMobile" => $order_main['customer_mobile'],
  78. "orderCode" => $order_main['order_id'],
  79. "orderPrice" => $order_main['base_price'],//订单总价格
  80. "groupNo" => "",//团号
  81. "payMethod" => "zyb",//支付方式值spot现场支付vm备用金,zyb智游宝支付
  82. "ticketOrders" => [
  83. "ticketOrder" => []
  84. ]
  85. ]
  86. ];
  87. $order_info_list = $this->getTicketList($order_id);
  88. foreach ($order_info_list as $key => $val) {
  89. $val["credentials"] = [
  90. "credential" => [
  91. "name" => $val['name'],
  92. "id" => $val['id']
  93. ]
  94. ];
  95. unset($val['id']);
  96. unset($val['name']);
  97. $request['order']['ticketOrders']["ticketOrder"][] = $val;
  98. }
  99. //调用下单接口
  100. $busConfig = $this->getBusConfig();
  101. $curlBody = $this->getInitBody("SEND_CODE_REQ", $request);
  102. $curl = new CurlInterface($curlBody, 3);
  103. $json = $curl->execute($busConfig['url'], "POST");
  104. if (isset($json["PWBResponse"]) && isset($json["PWBResponse"]["code"]) && $json["PWBResponse"]["code"] == 0) {
  105. $lvmama_order_connect = new LvmamaOrderConnect();
  106. $lvmama_order_connect->istConnect($order_id, $val['partnerOrderNo'], $json['PWBResponse']['orderCode']);
  107. return true;
  108. }
  109. $errorMsg = "下单失败";
  110. if (isset($json['PWBResponse']) && isset($json['PWBResponse']['description'])){
  111. $errorMsg = $json['PWBResponse']['description'];
  112. }
  113. //下单或者支付失败预警短信
  114. $content = "预警:后台直连智游宝门票下单失败,订单号({$order_id}),请及时处理。";
  115. $phone_arr = [
  116. '13757163513',
  117. '18317023071',
  118. '13564184647',
  119. '15088913683',
  120. ];
  121. foreach ($phone_arr as $phone) {
  122. Msg::sendTelMsg($phone, $content);
  123. }
  124. $result = $order_main::updateAll(['CUSTOMER_MEMO' => $errorMsg], ['=', 'order_id', $order_id]);
  125. if ($result > 0) {
  126. return true;
  127. } else {
  128. return false;
  129. }
  130. }
  131. /** 获取订单ID 获取票列表
  132. * @param $order_id
  133. * @return array|\yii\db\ActiveRecord[]
  134. */
  135. function getTicketList($order_id)
  136. {
  137. $order_main = new OrderMain();
  138. //设置ticket列表
  139. $order_info_select = [
  140. 'ticketOrder' => 'order_id',
  141. 'name' => 'customer_name',
  142. 'id' => 'customer_id_no',
  143. 'price' => 'base_price',
  144. 'quantity' => 'count(prod_id)',
  145. 'totalPrice' => '(count(prod_id)*base_price)',
  146. 'occDate' => 'run_date',
  147. 'goodsCode' => '(select prod_code from opera_product where prod_id=a.prod_id)',
  148. 'goodsName' => '(select prod_name from opera_product where prod_id=a.prod_id)',
  149. 'remark' => '(select prod_name from opera_product where prod_id=a.prod_id)'
  150. ];
  151. $order_info_list = $order_main::find()->select($order_info_select)
  152. ->from('order_main a')
  153. ->where(['and', ['=', 'parent_order_id', $order_id], ['=', 'cancel_flag', 0]])
  154. ->groupBy('prod_id')
  155. ->asArray()
  156. ->all();
  157. return $order_info_list;
  158. }
  159. }