WxOrderLogistics.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <?php
  2. namespace app\store\service\wxApi;
  3. use app\common\service\BaseService;
  4. use app\common\service\MpWxService;
  5. use app\api\model\Wxapp as WxappModel;
  6. use think\facade\Log;
  7. /**
  8. * 物流发货logic
  9. * Class WxOrderLogistics
  10. * @package app\store\service\wxApi
  11. */
  12. class WxOrderLogistics extends BaseService
  13. {
  14. /**
  15. * 发货订单信息,如果发货物流公司是顺丰,必须保证有发件人和收件人信息,并且发件人收件人信息需要打掩码:`189****1234, 021-****1234, ****1234, 0**2-***1234, 0**2-******23-10, ****123-8008` 值限制: 0 ≤ value ≤ 1024
  16. * @param $orderTransId
  17. * @param $expressCompany
  18. * @param $trackingNo
  19. * @param $goodsDesc
  20. * @param $payerOpenId
  21. * @param $consignorContact
  22. * @param $receiverContact
  23. * @param $logisticsType 物流模式,发货方式枚举值:1、实体物流配送采用快递公司进行实体物流配送形式 2、同城配送 3、虚拟商品,虚拟商品,例如话费充值,点卡等,无实体配送形式 4、用户自提
  24. * @return object
  25. */
  26. public static function orderDeliveryByTransId($orderTransId, $expressCompany, $trackingNo, $goodsDesc, $payerOpenId, $consignorContact, $receiverContact, $logisticsType = 1)
  27. {
  28. $weixinToken = MpWxService::weixinTokenCache();
  29. $accessToken = $weixinToken['access_token'];
  30. $url = "https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token=" . $accessToken;
  31. //$params['access_token'] = $accessToken;
  32. $params['order_key'] = [
  33. 'order_number_type' => 2,
  34. 'transaction_id' => $orderTransId,
  35. ];
  36. $params['logistics_type'] = $logisticsType;
  37. $params['delivery_mode'] = 1;
  38. $params['is_all_delivered'] = true;
  39. $shippingInfo = [
  40. 'tracking_no' => $trackingNo,
  41. 'express_company' => $expressCompany,
  42. 'item_desc' => $goodsDesc,
  43. ];
  44. if ($consignorContact != null || $receiverContact != null) {
  45. $shippingInfo['contact'] = [];
  46. if ($consignorContact != null) {
  47. $shippingInfo['contact']['consignor_contact'] = $consignorContact;
  48. }
  49. if ($receiverContact != null) {
  50. $shippingInfo['contact']['receiver_contact'] = $receiverContact;
  51. }
  52. }
  53. $params['shipping_list'] = [$shippingInfo];
  54. $nowStr = date('Y-m-d H:i:s');
  55. $data = explode(' ', $nowStr);
  56. $params['upload_time'] = $data[0] . 'T' . $data[1] . '.000+08:00';
  57. $params['payer'] = [
  58. 'openid' => $payerOpenId
  59. ];
  60. $paramsJson = json_encode($params);
  61. Log::info('orderDeliveryByTransIdParams::' . $paramsJson);
  62. $ret = curl_post($url, $paramsJson);
  63. Log::info('orderDeliveryByTransId::' . $ret);
  64. $arr = json_decode($ret,true);
  65. return $arr;
  66. }
  67. /**
  68. * 发货订单信息,如果发货物流公司是顺丰,必须保证有发件人和收件人信息,并且发件人收件人信息需要打掩码:`189****1234, 021-****1234, ****1234, 0**2-***1234, 0**2-******23-10, ****123-8008` 值限制: 0 ≤ value ≤ 1024
  69. * @param $storeId
  70. * @param $outTradeNo
  71. * @param $expressCompany
  72. * @param $trackingNo
  73. * @param $goodsDesc
  74. * @param $payerOpenId
  75. * @param $consignorContact
  76. * @param $receiverContact
  77. * @return object
  78. */
  79. public static function orderDeliveryByOutTradeNo($storeId, $outTradeNo, $expressCompany, $trackingNo, $goodsDesc, $payerOpenId, $consignorContact, $receiverContact)
  80. {
  81. $weixinToken = MpWxService::weixinTokenCache();
  82. $accessToken = $weixinToken['access_token'];
  83. $url = "https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token=" . $accessToken;
  84. $params['access_token'] = $accessToken;
  85. $wxConfig = WxappModel::getWxappCache($storeId);
  86. $params['order_key'] = [
  87. 'order_number_type' => 1,
  88. 'mchid' => $wxConfig['mchid'],
  89. 'out_trade_no' => $outTradeNo,
  90. ];
  91. $params['logistics_type'] = 1;
  92. $params['delivery_mode'] = 1;
  93. $params['is_all_delivered'] = true;
  94. $shippingInfo = [
  95. 'tracking_no' => $trackingNo,
  96. 'express_company' => $expressCompany,
  97. 'item_desc' => $goodsDesc,
  98. ];
  99. if ($consignorContact != null || $receiverContact != null) {
  100. $shippingInfo['contact'] = [];
  101. if ($consignorContact != null) {
  102. $shippingInfo['contact']['consignor_contact'] = $consignorContact;
  103. }
  104. if ($receiverContact != null) {
  105. $shippingInfo['contact']['receiver_contact'] = $receiverContact;
  106. }
  107. }
  108. $params['shipping_list'] = [$shippingInfo];
  109. $nowStr = date('Y-m-d H:i:s');
  110. $data = explode($nowStr, ' ');
  111. $params['upload_time'] = $data[0] . 'T' . $data[1] . '.000+08:00';
  112. $params['payer'] = [
  113. 'openid' => $payerOpenId
  114. ];
  115. $ret = curl_post($url, json_encode($params));
  116. $arr = json_decode($ret, true);
  117. return $arr;
  118. }
  119. /**
  120. * 根据transId获得订单状态,状态字段:order_state:订单状态枚举:(1) 待发货;(2) 已发货;(3) 确认收货;(4) 交易完成;(5) 已退款。
  121. * @param $transId
  122. * @return object
  123. */
  124. public static function getOrderStatusByTransId($transId)
  125. {
  126. $weixinToken = MpWxService::weixinTokenCache();
  127. $accessToken = $weixinToken['access_token'];
  128. $url = "https://api.weixin.qq.com/wxa/sec/order/get_order?access_token=" . $accessToken;
  129. //$params['access_token'] = $accessToken;
  130. $params['transaction_id'] = $transId;
  131. $ret = curl_post($url, json_encode($params));
  132. $arr = json_decode($ret, true);
  133. return $arr;
  134. }
  135. /**
  136. * 根据outTradeNo获得订单状态,状态字段:order_state:订单状态枚举:(1) 待发货;(2) 已发货;(3) 确认收货;(4) 交易完成;(5) 已退款。
  137. * @param $storeId
  138. * @param $outTradeNo
  139. * @return object
  140. */
  141. public static function getOrderStatusByOutTradeNo($storeId, $outTradeNo)
  142. {
  143. $weixinToken = MpWxService::weixinTokenCache();
  144. $accessToken = $weixinToken['access_token'];
  145. $url = "https://api.weixin.qq.com/wxa/sec/order/get_order?access_token=" . $accessToken;
  146. $params['access_token'] = $accessToken;
  147. $wxConfig = WxappModel::getWxappCache($storeId);
  148. $params['merchant_id'] = $wxConfig['mchid'];
  149. $params['merchant_trade_no'] = $outTradeNo;
  150. $ret = curl_post($url, json_encode($params));
  151. $arr = json_decode($ret);
  152. return $arr;
  153. }
  154. public static function getDeliveryList()
  155. {
  156. $weixinToken = MpWxService::weixinTokenCache();
  157. $accessToken = $weixinToken['access_token'];
  158. $url = 'https://api.weixin.qq.com/cgi-bin/express/delivery/open_msg/get_delivery_list?access_token=' . $accessToken;
  159. //$params = [];
  160. Log::info($url);
  161. $ret = curl_post($url, '{}');
  162. return json_decode($ret,true);
  163. }
  164. public static function isTradeManaged($storeId)
  165. {
  166. $weixinToken = MpWxService::weixinTokenCache();
  167. $accessToken = $weixinToken['access_token'];
  168. $url = 'https://api.weixin.qq.com/wxa/sec/order/is_trade_managed?access_token=' . $accessToken;
  169. $wxConfig = WxappModel::getWxappCache($storeId);
  170. $params = ['appid' => $wxConfig['app_id']];
  171. $ret = curl_post($url, json_encode($params));
  172. return json_decode($ret,true);
  173. }
  174. }