|
@@ -0,0 +1,207 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace app\store\service\wxApi;
|
|
|
+
|
|
|
+use app\common\service\BaseService;
|
|
|
+use app\common\service\MpWxService;
|
|
|
+use app\api\model\Wxapp as WxappModel;
|
|
|
+use think\facade\Log;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 物流发货logic
|
|
|
+ * Class WxOrderLogistics
|
|
|
+ * @package app\store\service\wxApi
|
|
|
+ */
|
|
|
+class WxOrderLogistics extends BaseService
|
|
|
+{
|
|
|
+ /**
|
|
|
+ * 发货订单信息,如果发货物流公司是顺丰,必须保证有发件人和收件人信息,并且发件人收件人信息需要打掩码:`189****1234, 021-****1234, ****1234, 0**2-***1234, 0**2-******23-10, ****123-8008` 值限制: 0 ≤ value ≤ 1024
|
|
|
+ * @param $orderTransId
|
|
|
+ * @param $expressCompany
|
|
|
+ * @param $trackingNo
|
|
|
+ * @param $goodsDesc
|
|
|
+ * @param $payerOpenId
|
|
|
+ * @param $consignorContact
|
|
|
+ * @param $receiverContact
|
|
|
+ * @param $logisticsType 物流模式,发货方式枚举值:1、实体物流配送采用快递公司进行实体物流配送形式 2、同城配送 3、虚拟商品,虚拟商品,例如话费充值,点卡等,无实体配送形式 4、用户自提
|
|
|
+ * @return object
|
|
|
+ */
|
|
|
+ public static function orderDeliveryByTransId($orderTransId, $expressCompany, $trackingNo, $goodsDesc, $payerOpenId, $consignorContact, $receiverContact, $logisticsType = 1)
|
|
|
+ {
|
|
|
+ $weixinToken = MpWxService::weixinTokenCache();
|
|
|
+ $accessToken = $weixinToken['access_token'];
|
|
|
+ $url = "https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token=" . $accessToken;
|
|
|
+
|
|
|
+ //$params['access_token'] = $accessToken;
|
|
|
+ $params['order_key'] = [
|
|
|
+ 'order_number_type' => 2,
|
|
|
+ 'transaction_id' => $orderTransId,
|
|
|
+ ];
|
|
|
+ $params['logistics_type'] = $logisticsType;
|
|
|
+ $params['delivery_mode'] = 1;
|
|
|
+ $params['is_all_delivered'] = true;
|
|
|
+
|
|
|
+ $shippingInfo = [
|
|
|
+ 'tracking_no' => $trackingNo,
|
|
|
+ 'express_company' => $expressCompany,
|
|
|
+ 'item_desc' => $goodsDesc,
|
|
|
+ ];
|
|
|
+
|
|
|
+ if ($consignorContact != null || $receiverContact != null) {
|
|
|
+ $shippingInfo['contact'] = [];
|
|
|
+ if ($consignorContact != null) {
|
|
|
+ $shippingInfo['contact']['consignor_contact'] = $consignorContact;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($receiverContact != null) {
|
|
|
+ $shippingInfo['contact']['receiver_contact'] = $receiverContact;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $params['shipping_list'] = [$shippingInfo];
|
|
|
+
|
|
|
+ $nowStr = date('Y-m-d H:i:s');
|
|
|
+ $data = explode(' ', $nowStr);
|
|
|
+ $params['upload_time'] = $data[0] . 'T' . $data[1] . '.000+08:00';
|
|
|
+ $params['payer'] = [
|
|
|
+ 'openid' => $payerOpenId
|
|
|
+ ];
|
|
|
+ $paramsJson = json_encode($params);
|
|
|
+ Log::info('orderDeliveryByTransIdParams::' . $paramsJson);
|
|
|
+ $ret = curl_post($url, $paramsJson);
|
|
|
+ Log::info('orderDeliveryByTransId::' . $ret);
|
|
|
+ $arr = json_decode($ret,true);
|
|
|
+
|
|
|
+ return $arr;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发货订单信息,如果发货物流公司是顺丰,必须保证有发件人和收件人信息,并且发件人收件人信息需要打掩码:`189****1234, 021-****1234, ****1234, 0**2-***1234, 0**2-******23-10, ****123-8008` 值限制: 0 ≤ value ≤ 1024
|
|
|
+ * @param $storeId
|
|
|
+ * @param $outTradeNo
|
|
|
+ * @param $expressCompany
|
|
|
+ * @param $trackingNo
|
|
|
+ * @param $goodsDesc
|
|
|
+ * @param $payerOpenId
|
|
|
+ * @param $consignorContact
|
|
|
+ * @param $receiverContact
|
|
|
+ * @return object
|
|
|
+ */
|
|
|
+ public static function orderDeliveryByOutTradeNo($storeId, $outTradeNo, $expressCompany, $trackingNo, $goodsDesc, $payerOpenId, $consignorContact, $receiverContact)
|
|
|
+ {
|
|
|
+ $weixinToken = MpWxService::weixinTokenCache();
|
|
|
+ $accessToken = $weixinToken['access_token'];
|
|
|
+ $url = "https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token=" . $accessToken;
|
|
|
+
|
|
|
+ $params['access_token'] = $accessToken;
|
|
|
+
|
|
|
+ $wxConfig = WxappModel::getWxappCache($storeId);
|
|
|
+
|
|
|
+ $params['order_key'] = [
|
|
|
+ 'order_number_type' => 1,
|
|
|
+ 'mchid' => $wxConfig['mchid'],
|
|
|
+ 'out_trade_no' => $outTradeNo,
|
|
|
+ ];
|
|
|
+ $params['logistics_type'] = 1;
|
|
|
+ $params['delivery_mode'] = 1;
|
|
|
+ $params['is_all_delivered'] = true;
|
|
|
+
|
|
|
+ $shippingInfo = [
|
|
|
+ 'tracking_no' => $trackingNo,
|
|
|
+ 'express_company' => $expressCompany,
|
|
|
+ 'item_desc' => $goodsDesc,
|
|
|
+ ];
|
|
|
+
|
|
|
+ if ($consignorContact != null || $receiverContact != null) {
|
|
|
+ $shippingInfo['contact'] = [];
|
|
|
+ if ($consignorContact != null) {
|
|
|
+ $shippingInfo['contact']['consignor_contact'] = $consignorContact;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($receiverContact != null) {
|
|
|
+ $shippingInfo['contact']['receiver_contact'] = $receiverContact;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $params['shipping_list'] = [$shippingInfo];
|
|
|
+
|
|
|
+ $nowStr = date('Y-m-d H:i:s');
|
|
|
+ $data = explode($nowStr, ' ');
|
|
|
+ $params['upload_time'] = $data[0] . 'T' . $data[1] . '.000+08:00';
|
|
|
+ $params['payer'] = [
|
|
|
+ 'openid' => $payerOpenId
|
|
|
+ ];
|
|
|
+
|
|
|
+ $ret = curl_post($url, json_encode($params));
|
|
|
+ $arr = json_decode($ret, true);
|
|
|
+
|
|
|
+ return $arr;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据transId获得订单状态,状态字段:order_state:订单状态枚举:(1) 待发货;(2) 已发货;(3) 确认收货;(4) 交易完成;(5) 已退款。
|
|
|
+ * @param $transId
|
|
|
+ * @return object
|
|
|
+ */
|
|
|
+ public static function getOrderStatusByTransId($transId)
|
|
|
+ {
|
|
|
+ $weixinToken = MpWxService::weixinTokenCache();
|
|
|
+ $accessToken = $weixinToken['access_token'];
|
|
|
+ $url = "https://api.weixin.qq.com/wxa/sec/order/get_order?access_token=" . $accessToken;
|
|
|
+
|
|
|
+ //$params['access_token'] = $accessToken;
|
|
|
+
|
|
|
+ $params['transaction_id'] = $transId;
|
|
|
+
|
|
|
+ $ret = curl_post($url, json_encode($params));
|
|
|
+ $arr = json_decode($ret, true);
|
|
|
+
|
|
|
+ return $arr;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据outTradeNo获得订单状态,状态字段:order_state:订单状态枚举:(1) 待发货;(2) 已发货;(3) 确认收货;(4) 交易完成;(5) 已退款。
|
|
|
+ * @param $storeId
|
|
|
+ * @param $outTradeNo
|
|
|
+ * @return object
|
|
|
+ */
|
|
|
+ public static function getOrderStatusByOutTradeNo($storeId, $outTradeNo)
|
|
|
+ {
|
|
|
+ $weixinToken = MpWxService::weixinTokenCache();
|
|
|
+ $accessToken = $weixinToken['access_token'];
|
|
|
+ $url = "https://api.weixin.qq.com/wxa/sec/order/get_order?access_token=" . $accessToken;
|
|
|
+
|
|
|
+ $params['access_token'] = $accessToken;
|
|
|
+ $wxConfig = WxappModel::getWxappCache($storeId);
|
|
|
+ $params['merchant_id'] = $wxConfig['mchid'];
|
|
|
+ $params['merchant_trade_no'] = $outTradeNo;
|
|
|
+
|
|
|
+ $ret = curl_post($url, json_encode($params));
|
|
|
+ $arr = json_decode($ret);
|
|
|
+
|
|
|
+ return $arr;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function getDeliveryList()
|
|
|
+ {
|
|
|
+ $weixinToken = MpWxService::weixinTokenCache();
|
|
|
+ $accessToken = $weixinToken['access_token'];
|
|
|
+ $url = 'https://api.weixin.qq.com/cgi-bin/express/delivery/open_msg/get_delivery_list?access_token=' . $accessToken;
|
|
|
+ //$params = [];
|
|
|
+ Log::info($url);
|
|
|
+ $ret = curl_post($url, '{}');
|
|
|
+ return json_decode($ret,true);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function isTradeManaged($storeId)
|
|
|
+ {
|
|
|
+ $weixinToken = MpWxService::weixinTokenCache();
|
|
|
+ $accessToken = $weixinToken['access_token'];
|
|
|
+ $url = 'https://api.weixin.qq.com/wxa/sec/order/is_trade_managed?access_token=' . $accessToken;
|
|
|
+ $wxConfig = WxappModel::getWxappCache($storeId);
|
|
|
+
|
|
|
+ $params = ['appid' => $wxConfig['app_id']];
|
|
|
+ $ret = curl_post($url, json_encode($params));
|
|
|
+ return json_decode($ret,true);
|
|
|
+ }
|
|
|
+}
|