expressUtil.php 6.1 KB

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