expressUtil.php 6.1 KB

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