Model_logic_crm.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <?php
  2. /**
  3. * 对接crm接口
  4. */
  5. class Model_logic_crm extends Lin_Model {
  6. function __construct(){
  7. parent::__construct();
  8. $this->load->_model('Model_express','express');
  9. $this->load->_model("Model_logic_ding","logic_ding");
  10. }
  11. public function panduan($order_info,$type,$express_info){
  12. if(empty($order_info)){
  13. return ;
  14. }
  15. if(!is_array($order_info)){
  16. return ;
  17. }
  18. //目前只有 4 店铺才处理
  19. if(!in_array($order_info['shop'],[4])){
  20. return ;
  21. }
  22. $express_info = $this->express->read($order_info['express']);
  23. if($type == 1){
  24. return ;
  25. return $this->orderCreated($order_info,$express_info);
  26. }
  27. if($type == 2){
  28. return $this->sendOutWarehouse($order_info,$express_info);
  29. }
  30. if($type == 3){
  31. return $this->orderPredelivery($order_info,$express_info);
  32. }
  33. if($type == 4){
  34. return $this->orderDelivery($order_info,$express_info);
  35. }
  36. }
  37. //处理转化接口需要的数据
  38. protected function transferData($order_info,$express_info){
  39. $len = strlen((string)$order_info['shop']);
  40. //var_dump($order_info['orderinfo']);
  41. $increment_id = substr($order_info['orderinfo'],$len);
  42. //var_dump($increment_id);
  43. $item_list = [
  44. // [
  45. // "title"=>"",
  46. // "sku"=>"",
  47. // "qty"=>0,
  48. // ]
  49. ];
  50. $sku_list = explode(",",$order_info['issku']);
  51. $product_list = explode(",",$order_info['product']);
  52. $qty_list = explode(";",$order_info['quantity']);
  53. try{
  54. foreach($sku_list as $key => $value){
  55. $item_list[] = [
  56. "name"=>$product_list[$key],
  57. "sku"=>$value,
  58. "qty"=>isset($qty_list[$key])?$qty_list[$key]:1,
  59. ];
  60. }
  61. }catch(Exception $e){
  62. //防止品名和数量对不上 直接放弃不发了
  63. return [];
  64. }
  65. // foreach($sku_list as $key => $value){
  66. // $item_list[] = [
  67. // "name"=>$product_list[$key],
  68. // "sku"=>$value,
  69. // "qty"=>isset($qty_list[$key])?$qty_list[$key]:1,
  70. // ];
  71. // }
  72. $address = "";
  73. if(!empty($order_info['street'])){
  74. $address .= $order_info['street'];
  75. }
  76. if(!empty($order_info['address'])){
  77. $address .= $order_info['address'];
  78. }
  79. if(!empty($order_info['address2'])){
  80. $address .= $order_info['address2'];
  81. }
  82. $info = [
  83. "website_id"=>(int)$order_info['shop'],
  84. "orderinfo"=>[
  85. "increment_id"=>$increment_id,
  86. "store_id"=>$order_info['shop'],
  87. "customer_id"=>0,
  88. "customer_name"=>$order_info['client'],
  89. "customer_email"=>$order_info['email'],
  90. "customer_phone"=>$order_info['phone'],
  91. "grand_total" =>$order_info['shouldmoney'],
  92. "country"=>$order_info['al'],
  93. "product_items"=>$item_list,
  94. "created_at"=>$order_info['dtime'],//建议只精确到天 不要时分秒
  95. "updated_at"=>0,//发货时间
  96. "address"=>[
  97. "street"=> $address,
  98. "city"=> $order_info['city'],
  99. "province"=> $order_info['province'],
  100. "zip"=> $order_info['zipcode'],
  101. "country"=> $order_info['al'],
  102. "phone"=> $order_info['phone'],
  103. ]
  104. ]
  105. ];
  106. return $info;
  107. }
  108. //订单创建
  109. protected function orderCreated($order_info,$express_info = []){
  110. $info = $this->transferData($order_info,$express_info);
  111. if(empty($info)){
  112. return ;
  113. }
  114. $info['updated_at'] = $order_info['time'];
  115. $info["act"] = "order_created";
  116. $info["status"]='pending';//订单进行中
  117. $this->sendOrderNotice(json_encode($info));
  118. }
  119. //向crm发送订单出货通知
  120. /**
  121. * @param $order_info 订单信息
  122. * @param $express_info 快递公司信息
  123. */
  124. protected function sendOutWarehouse($order_info,$express_info =[]){
  125. $info = $this->transferData($order_info,$express_info);
  126. if(empty($info)){
  127. return ;
  128. }
  129. $info['updated_at'] = time();
  130. $info["act"] = "order_shipped";
  131. $info["status"]='processing';//订单进行中
  132. $info['orderinfo']['tracking_number'] = $order_info['waybill'];
  133. $info['orderinfo']['carrier'] = $express_info['iscode'];
  134. $info['orderinfo']['tracking_url'] = $express_info['url'];
  135. $this->sendOrderNotice(json_encode($info));
  136. }
  137. //订单预计送达时间
  138. protected function orderPredelivery($order_info,$express_info =[]){
  139. $info = $this->transferData($order_info,$express_info);
  140. if(empty($info)){
  141. return ;
  142. }
  143. $info['updated_at'] = time();
  144. $info["act"] = "order_predelivery";
  145. $info["status"]='processing';//订单进行中
  146. $info['orderinfo']['tracking_number'] = $order_info['waybill'];
  147. $info['orderinfo']['carrier'] = $express_info['iscode'];
  148. $info['orderinfo']['tracking_url'] = $express_info['url'];
  149. $this->sendOrderNotice(json_encode($info));
  150. }
  151. //向crm 发送订单收获通知
  152. protected function orderDelivery($order_info,$express_info =[]){
  153. $info = $this->transferData($order_info,$express_info);
  154. if(empty($info)){
  155. return ;
  156. }
  157. $info['updated_at'] = time();
  158. $info["act"] = "order_delivery";
  159. $info["status"]='processing';//订单进行中
  160. $info['orderinfo']['tracking_number'] = $order_info['waybill'];
  161. $info['orderinfo']['carrier'] = $express_info['iscode'];
  162. $info['orderinfo']['tracking_url'] = $express_info['url'];
  163. $this->sendOrderNotice(json_encode($info));
  164. }
  165. //向crm发送订单通知
  166. protected function sendOrderNotice($params){
  167. $all_url = "http://crm.hnwmzp.cn/sqs";
  168. $ch = curl_init($all_url);
  169. // 设置cURL选项
  170. $options = array(
  171. CURLOPT_SSL_VERIFYPEER=>false,
  172. CURLOPT_SSL_VERIFYHOST=>false,
  173. CURLOPT_RETURNTRANSFER => true,
  174. CURLOPT_POST => true,
  175. CURLOPT_POSTFIELDS => $params,
  176. CURLOPT_HTTPHEADER => [
  177. 'lytoken'=>'lytec',
  178. 'Content-Type: application/json'
  179. ],
  180. );
  181. // 应用这些选项到cURL会话
  182. curl_setopt_array($ch, $options);
  183. // 执行cURL会话并获取响应
  184. $response = curl_exec($ch);
  185. //var_dump( $response );
  186. // 检查是否有错误发生
  187. if ($response === false) {
  188. $error = curl_error($ch);
  189. curl_close($ch);
  190. return [
  191. "code"=> -1,
  192. "msg"=> $error
  193. ];
  194. }
  195. // 关闭cURL会话
  196. curl_close($ch);
  197. // 输出响应内容
  198. return json_decode($response,true);
  199. }
  200. }