kdn_helper.php 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 16/3/30
  6. * Time: 下午5:10
  7. */
  8. require_once (BASE_CORE_PATH . "/framework/function/http.php");
  9. class kdn_helper
  10. {
  11. const req_url = 'http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx';
  12. static public function query($shipperCode, $logisticCode)
  13. {
  14. $requestData = json_encode(array('ShipperCode' => $shipperCode,'LogisticCode' => $logisticCode));
  15. $datas = array(
  16. 'EBusinessID' => '1256051',
  17. 'RequestType' => '1002',
  18. 'RequestData' => urlencode($requestData),
  19. 'DataType' => '2',
  20. 'DataSign' => self::encrypt($requestData, '6718d260-e2b6-4329-ad78-daff173309ac')
  21. );
  22. $result = http_post_data(self::req_url,$datas);
  23. return $result;
  24. }
  25. static private function encrypt($data, $appkey)
  26. {
  27. return urlencode(base64_encode(md5($data . $appkey)));
  28. }
  29. static public function subscribe($order_sn)
  30. {
  31. $model_order = Model('order');
  32. $condition['order_sn'] = $order_sn;
  33. $order_info = $model_order->getOrderInfo($condition, array('order_common', 'order_goods'));
  34. // 发送快递鸟订阅回调
  35. $express = rkcache('express', true);
  36. $e_code = $express[$order_info['extend_order_common']['shipping_express_id']]['e_kdn_code'];
  37. if(empty($e_code)) {
  38. Log::record("找不到该单号的快递公司编码—— ordersn={$order_sn}",Log::ERR);
  39. return;
  40. }
  41. // 通知订阅, 快递鸟定时回调
  42. $ret = self::req_subscribe($e_code, $order_info['shipping_code'], $order_sn);
  43. if($ret === false) {
  44. Log::record("kdn_helper::subscribe order_sn={$order_sn} error.",Log::ERR);
  45. } else {
  46. Log::record("kdn_helper::subscribe ret={$ret}",Log::DEBUG);
  47. }
  48. }
  49. static public function req_subscribe($e_code, $logisticCode, $order_sn)
  50. {
  51. $datas = array(array('Code' => $e_code,'Item' => array(array('No' => $logisticCode,'Bk' => $order_sn))));
  52. $requestData = json_encode($datas);
  53. $datas = array(
  54. 'EBusinessID' => '1256051',
  55. 'RequestType' => '1005',
  56. 'RequestData' => urlencode($requestData),
  57. 'DataType' => '2',
  58. 'DataSign' => self::encrypt($requestData, '6718d260-e2b6-4329-ad78-daff173309ac')
  59. );
  60. $result = http_post_data(self::req_url, $datas);
  61. return $result;
  62. }
  63. static public function onCallback($data)
  64. {
  65. $order_sn = $data['CallBack'];
  66. if(empty($order_sn)) return;
  67. $key = "express_" . $data['LogisticCode'];
  68. wkcache($key, $data, 3600 * 24 * 30);
  69. // 数据解析
  70. switch ($data['State'])
  71. {
  72. case '3': // 已签收, 设置为已收货
  73. {
  74. $model_order = Model('order');
  75. $update = $model_order->editOrder(array('order_state' => ORDER_STATE_SUCCESS), array('order_state' => ORDER_STATE_SEND,'order_sn' => $order_sn));
  76. if (!$update) {
  77. Log::record('更新订单状态为已收货状态时写入失败');
  78. }
  79. }
  80. break;
  81. case '4': // 问题件
  82. Log::record("order_sn={$order_sn},code = {$data['LogisticCode']}.",Log::ERR);
  83. break;
  84. default: {
  85. Log::record('query_status false');
  86. break;
  87. }
  88. }
  89. }
  90. }