KDNiaoQuery.Class.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: phperstar
  5. * Date: 2020/9/7
  6. * Time: 11:33 AM
  7. */
  8. namespace Util\KDNiao;
  9. use Mall\Framework\Core\ResultWrapper;
  10. use Mall\Framework\Core\ErrorCode;
  11. use Mall\Framework\Factory;
  12. class KDNiaoQuery
  13. {
  14. // 基础域名
  15. private $baseUrl = '';
  16. // 商户ID
  17. private $EBusinessID = '';
  18. // 授权KEY
  19. private $key = '';
  20. // 实时查询物流信息缓存key
  21. private $kdniaoQueryKey = 'kdniaoQuery';
  22. public function __construct($EBusinessID='', $key = '')
  23. {
  24. $this->EBusinessID = $EBusinessID;
  25. $this->key = $key;
  26. }
  27. /**
  28. * 实时查询
  29. * 官方文档地址: https://www.kdniao.com/v2/API/Track.aspx
  30. */
  31. public function EbusinessOrderHandle($params)
  32. {
  33. if(empty($params['com']) || empty($params['num'])){
  34. return ResultWrapper::fail('请求参数为空', ErrorCode::$paramError);
  35. }
  36. $requestData = json_encode([
  37. 'ShipperCode' => $params['com'], // 快递公司编码
  38. 'LogisticCode' => $params['num'], // 物流单号
  39. ]);
  40. $postData = [
  41. 'EBusinessID' => $this->EBusinessID,
  42. 'RequestType' => '1002', // 请求指令类型
  43. 'DataType' => 2, // 请求、返回数据类型 2-json
  44. 'RequestData' => urlencode($requestData),
  45. ];
  46. $postData['DataSign'] = urlencode(base64_encode(md5($requestData.$this->key))); // 签名
  47. $pollQueryData = Factory::cache('default')->get($this->kdniaoQueryKey.':'.$params['num']);
  48. if (!empty($pollQueryData)) {
  49. return ResultWrapper::success($pollQueryData);
  50. }
  51. $response = request('http://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx', $postData, 30, true);
  52. if ($response['httpcode'] != 200) {
  53. return ResultWrapper::fail('请求外部系统接口报错', ErrorCode::$apiNotResult);
  54. }
  55. $responseData = json_decode($response['content'], true);
  56. if(!$responseData['Success']){
  57. return ResultWrapper::fail($responseData['Reason'], ErrorCode::$notAllowAccess);
  58. }
  59. Factory::cache('default')->set($this->kdniaoQueryKey . ':' . $params['num'], $response['content'], 3600);
  60. return ResultWrapper::success($response['content']);
  61. }
  62. // 快递单当前状态
  63. public function getState($state)
  64. {
  65. $satateData = [
  66. 2 => '在途',
  67. 3 => '签收',
  68. 4 => '问题件'
  69. ];
  70. return isset($satateData[$state]) ? $satateData[$state] : '';
  71. }
  72. }