expressUtil.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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_POSTFIELDS, '{"wx_store_id":"4000000000017952003"}')->post($url);
  29. return Json::decode($result);
  30. }
  31. /**
  32. * 绑定账号
  33. * @param $merchant
  34. * @param $data
  35. * @param int $ptStyle
  36. * @return mixed
  37. */
  38. public static function bindAccount($merchant, $data, $ptStyle = 0)
  39. {
  40. $accessToken = self::getAccessToken($merchant, $ptStyle);
  41. $url = "https://api.weixin.qq.com/cgi-bin/express/business/account/bind?access_token={$accessToken}";
  42. $curl = new curl\Curl();
  43. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  44. return Json::decode($result);
  45. }
  46. /**
  47. * 拉取已绑定账号
  48. */
  49. public static function getBindAccount($merchant, $ptStyle = 0)
  50. {
  51. $accessToken = self::getAccessToken($merchant, $ptStyle);
  52. $url = "https://api.weixin.qq.com/cgi-bin/express/business/account/get?access_token={$accessToken}";
  53. $curl = new curl\Curl();
  54. $result = $curl->setOption(CURLOPT_POSTFIELDS, '{}')->post($url);
  55. return Json::decode($result);
  56. }
  57. /**
  58. * 获取支持的快递公司列表
  59. */
  60. public static function getAllDelivery($merchant, $ptStyle = 0)
  61. {
  62. $accessToken = self::getAccessToken($merchant, $ptStyle);
  63. $url = "https://api.weixin.qq.com/cgi-bin/express/business/delivery/getall?access_token={$accessToken}";
  64. $curl = new curl\Curl();
  65. $result = $curl->setOption(CURLOPT_POSTFIELDS, '{}')->post($url);
  66. return Json::decode($result);
  67. }
  68. /**
  69. * 生成运单
  70. */
  71. public static function addOrder($merchant, $data, $ptStyle = 0)
  72. {
  73. $accessToken = self::getAccessToken($merchant, $ptStyle);
  74. $url = "https://api.weixin.qq.com/cgi-bin/express/business/order/add?access_token={$accessToken}";
  75. $curl = new curl\Curl();
  76. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  77. return Json::decode($result);
  78. }
  79. /**
  80. * 取消运单
  81. */
  82. public static function cancelOrder($merchant, $data, $ptStyle = 0)
  83. {
  84. $accessToken = self::getAccessToken($merchant, $ptStyle);
  85. $url = "https://api.weixin.qq.com/cgi-bin/express/business/order/cancel?access_token={$accessToken}";
  86. $curl = new curl\Curl();
  87. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  88. return Json::decode($result);
  89. }
  90. /**
  91. * 获取运单数据
  92. */
  93. public static function getOrder($merchant, $data, $ptStyle = 0)
  94. {
  95. $accessToken = self::getAccessToken($merchant, $ptStyle);
  96. $url = "https://api.weixin.qq.com/cgi-bin/express/business/order/get?access_token={$accessToken}";
  97. $curl = new curl\Curl();
  98. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  99. return Json::decode($result);
  100. }
  101. /**
  102. * 批量获取运单数据
  103. */
  104. public static function batchGetOrder($merchant, $data, $ptStyle = 0)
  105. {
  106. $accessToken = self::getAccessToken($merchant, $ptStyle);
  107. $url = "https://api.weixin.qq.com/cgi-bin/express/business/order/batchget?access_token={$accessToken}";
  108. $curl = new curl\Curl();
  109. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  110. return Json::decode($result);
  111. }
  112. /**
  113. * 查询运单轨迹
  114. */
  115. public static function getPath($merchant, $data, $ptStyle = 0)
  116. {
  117. $accessToken = self::getAccessToken($merchant, $ptStyle);
  118. $url = "https://api.weixin.qq.com/cgi-bin/express/business/path/get?access_token={$accessToken}";
  119. $curl = new curl\Curl();
  120. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  121. return Json::decode($result);
  122. }
  123. /**
  124. * 配置打印员
  125. */
  126. public static function addPrinter($merchant, $data, $ptStyle = 0)
  127. {
  128. $accessToken = self::getAccessToken($merchant, $ptStyle);
  129. $url = "https://api.weixin.qq.com/cgi-bin/express/business/printer/update?access_token={$accessToken}";
  130. $curl = new curl\Curl();
  131. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  132. return Json::decode($result);
  133. }
  134. /**
  135. * 查询打印员
  136. */
  137. public static function getPrinter($merchant, $data, $ptStyle = 0)
  138. {
  139. $accessToken = self::getAccessToken($merchant, $ptStyle);
  140. $url = "https://api.weixin.qq.com/cgi-bin/express/business/printer/get?access_token={$accessToken}";
  141. $curl = new curl\Curl();
  142. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  143. return Json::decode($result);
  144. }
  145. /**
  146. * 查询电子面单余额
  147. */
  148. public static function getQuota($merchant, $data, $ptStyle = 0)
  149. {
  150. $accessToken = self::getAccessToken($merchant, $ptStyle);
  151. $url = "https://api.weixin.qq.com/cgi-bin/express/business/quota/get?access_token={$accessToken}";
  152. $curl = new curl\Curl();
  153. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  154. return Json::decode($result);
  155. }
  156. /**
  157. * 沙盒测试:模拟更新订单接口
  158. */
  159. public static function testUpdateOrder($merchant, $data, $ptStyle = 0)
  160. {
  161. $accessToken = self::getAccessToken($merchant, $ptStyle);
  162. $url = "https://api.weixin.qq.com/cgi-bin/express/business/test_update_order?access_token={$accessToken}";
  163. $curl = new curl\Curl();
  164. $result = $curl->setOption(CURLOPT_POSTFIELDS, Json::encode($data))->post($url);
  165. return Json::decode($result);
  166. }
  167. }