expressUtil.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <?php
  2. namespace common\components;
  3. use yii\helpers\Json;
  4. use linslin\yii2\curl;
  5. /**
  6. * 微信小程序物流服务工具类
  7. * 参考微信官方文档:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/express/business/interface_and_event.html
  8. * 风格参考 miniUtil.php
  9. */
  10. class expressUtil
  11. {
  12. /**
  13. * 获取 access_token
  14. * @param $merchant
  15. * @param int $ptStyle
  16. * @return string
  17. */
  18. public static function getAccessToken($merchant, $ptStyle = 0)
  19. {
  20. // 直接复用 miniUtil 的获取小程序 access_token 方法
  21. return miniUtil::getMiniProgramAccessToken($merchant, $ptStyle);
  22. }
  23. public static function getShopList($merchant, $data, $ptStyle = 0)
  24. {
  25. $accessToken = self::getAccessToken($merchant, $ptStyle);
  26. $url = "https://api.weixin.qq.com/cgi-bin/express/intracity/querystore?access_token={$accessToken}";
  27. $curl = new curl\Curl();
  28. $result = $curl->setOption(CURLOPT_HTTPHEADER, ['Content-Type: application/json'])
  29. ->setOption(CURLOPT_POSTFIELDS, Json::encode($data))
  30. ->post($url);
  31. return Json::decode($result);
  32. }
  33. /**
  34. * 绑定账号
  35. * @param $merchant
  36. * @param $data
  37. * @param int $ptStyle
  38. * @return mixed
  39. */
  40. public static function bindAccount($merchant, $data, $ptStyle = 0)
  41. {
  42. $accessToken = self::getAccessToken($merchant, $ptStyle);
  43. $url = "https://api.weixin.qq.com/cgi-bin/express/business/account/bind?access_token={$accessToken}";
  44. $curl = new curl\Curl();
  45. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  46. return Json::decode($result);
  47. }
  48. /**
  49. * 拉取已绑定账号
  50. */
  51. public static function getBindAccount($merchant, $ptStyle = 0)
  52. {
  53. $accessToken = self::getAccessToken($merchant, $ptStyle);
  54. $url = "https://api.weixin.qq.com/cgi-bin/express/business/account/get?access_token={$accessToken}";
  55. $curl = new curl\Curl();
  56. $result = $curl->setOption(CURLOPT_POSTFIELDS, '{}')->post($url);
  57. return Json::decode($result);
  58. }
  59. /**
  60. * 获取支持的快递公司列表
  61. */
  62. public static function getAllDelivery($merchant, $ptStyle = 0)
  63. {
  64. $accessToken = self::getAccessToken($merchant, $ptStyle);
  65. $url = "https://api.weixin.qq.com/cgi-bin/express/business/delivery/getall?access_token={$accessToken}";
  66. $curl = new curl\Curl();
  67. $result = $curl->setOption(CURLOPT_POSTFIELDS, '{}')->post($url);
  68. return Json::decode($result);
  69. }
  70. /**
  71. * 生成运单
  72. */
  73. public static function addOrder($merchant, $data, $ptStyle = 0)
  74. {
  75. $accessToken = self::getAccessToken($merchant, $ptStyle);
  76. $url = "https://api.weixin.qq.com/cgi-bin/express/business/order/add?access_token={$accessToken}";
  77. $curl = new curl\Curl();
  78. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  79. return Json::decode($result);
  80. }
  81. /**
  82. * 取消运单
  83. */
  84. public static function cancelOrder($merchant, $data, $ptStyle = 0)
  85. {
  86. $accessToken = self::getAccessToken($merchant, $ptStyle);
  87. $url = "https://api.weixin.qq.com/cgi-bin/express/business/order/cancel?access_token={$accessToken}";
  88. $curl = new curl\Curl();
  89. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  90. return Json::decode($result);
  91. }
  92. /**
  93. * 获取运单数据
  94. */
  95. public static function getOrder($merchant, $data, $ptStyle = 0)
  96. {
  97. $accessToken = self::getAccessToken($merchant, $ptStyle);
  98. $url = "https://api.weixin.qq.com/cgi-bin/express/business/order/get?access_token={$accessToken}";
  99. $curl = new curl\Curl();
  100. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  101. return Json::decode($result);
  102. }
  103. /**
  104. * 批量获取运单数据
  105. */
  106. public static function batchGetOrder($merchant, $data, $ptStyle = 0)
  107. {
  108. $accessToken = self::getAccessToken($merchant, $ptStyle);
  109. $url = "https://api.weixin.qq.com/cgi-bin/express/business/order/batchget?access_token={$accessToken}";
  110. $curl = new curl\Curl();
  111. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  112. return Json::decode($result);
  113. }
  114. /**
  115. * 查询运单轨迹
  116. */
  117. public static function getPath($merchant, $data, $ptStyle = 0)
  118. {
  119. $accessToken = self::getAccessToken($merchant, $ptStyle);
  120. $url = "https://api.weixin.qq.com/cgi-bin/express/business/path/get?access_token={$accessToken}";
  121. $curl = new curl\Curl();
  122. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  123. return Json::decode($result);
  124. }
  125. /**
  126. * 配置打印员
  127. */
  128. public static function addPrinter($merchant, $data, $ptStyle = 0)
  129. {
  130. $accessToken = self::getAccessToken($merchant, $ptStyle);
  131. $url = "https://api.weixin.qq.com/cgi-bin/express/business/printer/update?access_token={$accessToken}";
  132. $curl = new curl\Curl();
  133. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  134. return Json::decode($result);
  135. }
  136. /**
  137. * 查询打印员
  138. */
  139. public static function getPrinter($merchant, $data, $ptStyle = 0)
  140. {
  141. $accessToken = self::getAccessToken($merchant, $ptStyle);
  142. $url = "https://api.weixin.qq.com/cgi-bin/express/business/printer/get?access_token={$accessToken}";
  143. $curl = new curl\Curl();
  144. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  145. return Json::decode($result);
  146. }
  147. /**
  148. * 查询电子面单余额
  149. */
  150. public static function getQuota($merchant, $data, $ptStyle = 0)
  151. {
  152. $accessToken = self::getAccessToken($merchant, $ptStyle);
  153. $url = "https://api.weixin.qq.com/cgi-bin/express/business/quota/get?access_token={$accessToken}";
  154. $curl = new curl\Curl();
  155. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  156. return Json::decode($result);
  157. }
  158. /**
  159. * 沙盒测试:模拟更新订单接口
  160. */
  161. public static function testUpdateOrder($merchant, $data, $ptStyle = 0)
  162. {
  163. $accessToken = self::getAccessToken($merchant, $ptStyle);
  164. $url = "https://api.weixin.qq.com/cgi-bin/express/business/test_update_order?access_token={$accessToken}";
  165. $curl = new curl\Curl();
  166. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  167. return Json::decode($result);
  168. }
  169. }