delivery.logic.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <?php
  2. /**
  3. * 物流推送
  4. *
  5. *
  6. *
  7. *
  8. * by Jeff Wan
  9. */
  10. defined('InShopNC') or exit('Access Invalid!');
  11. require_once (BASE_CORE_PATH . '/framework/function/http.php');
  12. class deliveryLogic
  13. {
  14. const oms_url = 'http://223.4.48.187:30004/lrlzApiRest/router/rest';
  15. //'http://oms.shtest.lrlz.com:49521/lrlzApiRest/router/rest';
  16. private static $appkey = '2015panda';
  17. private static $appPassWord = 'nEs5vu86JSjh89WPW4de2d3e87rwli3e8rw';
  18. private function sign($data) {
  19. return md5(self::$appkey . self::$appPassWord . $data);
  20. }
  21. public function putOrder($pay_sn, $trade_no)
  22. {
  23. // 调试模式下不能推送到oms
  24. if(defined('OMS_PUSH_OFF') && OMS_PUSH_OFF == true) {
  25. return false;
  26. }
  27. $order_list = Model('order')->getNormalOrderList(array('pay_sn'=> $pay_sn), $this->page, '*', 'order_id desc', '', array('order_address', 'order_goods'));
  28. if(empty($order_list)) {
  29. Log::record("putOrder:cannot get order list when pay_sn={$pay_sn},trade_no={$trade_no} ",Log::DEBUG);
  30. return false;
  31. }
  32. $order_sn = '';
  33. $delivery_order_list = array();
  34. foreach ($order_list as $order_info)
  35. {
  36. if ($order_info['order_state'] === '20')
  37. {
  38. $nick_name = $order_info['reciver_name'];
  39. $delivery_order = array();
  40. $order_sn = $order_info['order_sn'];
  41. $delivery_order['tid'] = $order_info['order_sn'];
  42. $delivery_order['total_fee'] = $order_info['order_amount'];
  43. $delivery_order['discount_fee'] = '';
  44. $delivery_order['post_fee'] = $order_info['shipping_fee'];
  45. $delivery_order['created'] = date('Y-m-d H:i:s', $order_info['add_time']);
  46. $delivery_order['pay_time'] = date('Y-m-d H:i:s',$order_info['payment_time']);
  47. $delivery_order['buyer_message'] = '';
  48. $delivery_order['express_code'] = '';
  49. $delivery_order['pay_account_type'] = $order_info['payment_code'] == 'wxpay' ? '微信支付': '支付宝';
  50. $delivery_order['pay_account_id'] = '';
  51. $delivery_order['pay_account_no'] = $trade_no;
  52. $delivery_order['buyer_nick'] = $nick_name;//$order_info['buyer_name'] === 'anonymous' ? 'anonymous'.'_'. $order_info['buyer_id'] : $order_info['buyer_name'];
  53. $delivery_order['buyer_email'] = $order_info['buyer_email'];
  54. $delivery_order['trade_memo'] = '';
  55. $delivery_order['receiver_name'] = $order_info['reciver_name'];
  56. $delivery_area = explode("\t", $order_info['reciver_info']['area']);
  57. $delivery_order['receiver_state'] = $delivery_area[0];
  58. $delivery_order['receiver_city'] = $delivery_area[1];
  59. $delivery_order['receiver_district'] = $delivery_area[2];
  60. Log::record("{$delivery_order['receiver_state']} {$delivery_order['receiver_city']} {$delivery_order['receiver_district']}");
  61. $delivery_order['receiver_address'] = $order_info['reciver_info']['street'];
  62. $delivery_order['receiver_zip'] = '000000';
  63. $delivery_order['receiver_mobile'] = $order_info['reciver_info']['mob_phone'];
  64. $delivery_order['receiver_phone'] = $order_info['reciver_info']['tel_phone'];
  65. $delivery_order['order_size'] = count($order_info['extend_order_goods']);
  66. $delivery_order['orderList'] = array();
  67. foreach($order_info['extend_order_goods'] as $key => $goods)
  68. {
  69. $delivery_goods = array();
  70. $delivery_goods['oid'] = $order_info['order_sn'] . $key;
  71. $delivery_goods['tid'] = $order_info['order_sn'];
  72. $delivery_goods['title'] = $goods['goods_name'];
  73. $delivery_goods['price'] = $goods['goods_price'];
  74. $delivery_goods['num'] = $goods['goods_num'];
  75. $goods_serial = Model('goods')->getGoodsInfo(array('goods_id'=>$goods['goods_id']));
  76. $delivery_goods['outer_sku_id'] = $goods_serial['goods_serial'];
  77. $delivery_goods['outer_sku_properties_name'] = $goods['goods_name'];
  78. $delivery_goods['buyer_nick'] = $nick_name; //$order_info['reciver_name'];//$order_info['buyer_name'] === 'anonymous' ? 'anonymous'.'_'. $order_info['buyer_id'] : $order_info['buyer_name'];
  79. array_push($delivery_order['orderList'] , $delivery_goods);
  80. }
  81. array_push($delivery_order_list, $delivery_order);
  82. }
  83. }
  84. // 订单状态不对
  85. if (empty($delivery_order_list) || count($delivery_order_list) == 0) {
  86. Log::record("putOrder: pay_sn={$pay_sn}, 错误原因: 订单状态不对");
  87. return fasle;
  88. }
  89. $data = array('type' => 'PUT_TRADE', 'data' => $delivery_order_list);
  90. $body = json_encode($data,JSON_UNESCAPED_UNICODE);
  91. $sign = $this->sign($body);
  92. $headers = array('v_appkey: '.self::$appkey, 'v_sign: '.$sign, 'Content-Type: application/json');
  93. $resp = http_post_data(self::oms_url,urlencode($body),$headers);
  94. Log::record("post data={$resp}",Log::DEBUG);
  95. return $this->check($pay_sn, $trade_no, $order_sn,$resp);
  96. }
  97. public function handleCallback($param)
  98. {
  99. $model_order = Model('order');
  100. $condition = array('order_sn' => $param['order_sn']);
  101. $order_info = $model_order->getOrderInfo($condition,array('order_common','order_goods'));
  102. $model_express = Model('express');
  103. $express_info = $model_express->getExpressInfoByOMS($param['oms_code']);
  104. $data['reciver_name'] = $order_info['reciver_name'];
  105. $data['reciver_info'] = $order_info['reciver_info'];
  106. $data['deliver_explain'] = $order_info['deliver_explain'];
  107. $data['daddress_id'] = intval($order_info['daddress_id']);
  108. $data['shipping_express_id'] =intval($express_info['express_id']);
  109. $data['shipping_code'] = $param['shipping_code'];
  110. $logic_order = Logic('order');
  111. $result = $logic_order->changeOrderSend($order_info, 'seller', $order_info['buyer_name'], $data);
  112. return $result;
  113. }
  114. /**
  115. * @param $pay_sn
  116. * @param $trade_no
  117. * @param $result
  118. * @param $order_sn
  119. * @return mixed
  120. */
  121. private function check($pay_sn,$trade_no,$order_sn,$resp)
  122. {
  123. $data = array();
  124. $data_log = array();
  125. $data['pay_sn'] = $pay_sn;
  126. $data['order_sn'] = $order_sn;
  127. $data_log['pay_sn'] = $pay_sn;
  128. $data_log['order_sn'] = $order_sn;
  129. $data_log['exception_time'] = time();
  130. $data_log['exception_state'] = 0;
  131. //1:成功 0 :失败
  132. // 1:新订单 2:等待仓库处理 99:已拦截 90:库存不足 7:已发货
  133. // -99:发货失败 -2:订单关闭 -3:订单已存在(没有进行拦截的订单不予更新) -1:异常订单 -2:订单关闭
  134. $result = json_decode($resp, true);
  135. if (!empty($result) && is_array($result))
  136. {
  137. if ($result['apiCode'] == 'success')
  138. {
  139. if (!empty($result['data']) && is_array($result['data']) && count($result['data']) > 0)
  140. {
  141. // 填充错误理由
  142. $data_log['exception_reason'] = $result['data'][0]['errorMessge'];
  143. if (!empty($result['data'][0]['status']))
  144. {
  145. $status = intval($result['data'][0]['status']);
  146. if($status == 1 || $status == 2 || $status == 3 || $status == 7 || $status == 99) {
  147. return true;
  148. } else {
  149. Log::record("PUSHOMS ERR has status: order_sn = {$order_sn},pay_sn={$pay_sn},trade_no = {$trade_no}", Log::WAIT_HANDLE);
  150. Model('order_exception_push')->insert($data);
  151. Model('order_exception_log')->insert($data_log);
  152. return false;
  153. }
  154. } else {
  155. $msg = $result['data'][0]['errorMessge'];
  156. if(strstr($msg,'订单已存在')) {
  157. return true;
  158. } else {
  159. // 技术债务, 未知问题, 不放入推送表, 确认后再放
  160. //Model('order_exception_push')->insert($data);
  161. Model('order_exception_log')->insert($data_log);
  162. return false;
  163. }
  164. }
  165. }
  166. else
  167. {
  168. // 填充错误理由
  169. $data_log['exception_reason'] = "$resp order_sn = {$order_sn},pay_sn={$pay_sn},trade_no = {$trade_no}";
  170. Log::record("$resp order_sn = {$order_sn},pay_sn={$pay_sn},trade_no = {$trade_no}", Log::WAIT_HANDLE);
  171. Model('order_exception_push')->insert($data);
  172. Model('order_exception_log')->insert($data_log);
  173. return false;
  174. }
  175. } else {
  176. Log::record("PUSHOMS ERR have not data: order_sn = {$order_sn},pay_sn={$pay_sn},trade_no = {$trade_no}", Log::WAIT_HANDLE);
  177. Model('order_exception_push')->insert($data);
  178. Model('order_exception_log')->insert($data_log);
  179. return false;
  180. }
  181. } else {
  182. Log::record("PUSHOMS ERR empty result: order_sn = {$order_sn},pay_sn={$pay_sn},trade_no = {$trade_no}", Log::WAIT_HANDLE);
  183. Model('order_exception_push')->insert($data);
  184. Model('order_exception_log')->insert($data_log);
  185. return false;
  186. }
  187. }
  188. }