Forráskód Böngészése

发货物流测试

zhangdehua 1 éve
szülő
commit
00319529f5

+ 22 - 19
app/console/service/WxDelivery.php

@@ -8,20 +8,17 @@
 // +----------------------------------------------------------------------
 // | Author: 萤火科技 <admin@yiovo.com>
 // +----------------------------------------------------------------------
-declare (strict_types = 1);
+declare (strict_types=1);
 
 namespace app\console\service;
 
 use app\console\library\Tools;
 use app\common\service\BaseService;
-use app\console\model\User;
-use app\console\model\User as UserModel;
-use app\console\model\user\BonusHistory;
-use app\console\model\user\CommissionsDetail;
 use app\store\model\Express as ExpressModel;
 use app\store\model\Order;
-use app\store\model\OrderAddress;
+use app\store\model\OrderAddressSimple;
 use app\store\model\OrderGoods;
+use app\store\model\User;
 use app\store\service\wxApi\WxOrderLogistics;
 
 
@@ -46,32 +43,38 @@ class WxDelivery extends BaseService
         $data = [];
         $orderGoodsModel = new OrderGoods();
         $orderGoodses = $orderGoodsModel->getNeedToWxDelivery();
-        $orderIds = array_column($orderGoodses,'order_id');
+        $orderIds = array_column($orderGoodses, 'order_id');
         $orderModel = new Order();
         $orders = $orderModel->getListByIds($orderIds);
 
         $express = ExpressModel::getAllList();
-        $expressIndexById = array_column($express,null,'express_id');
+        $expressIndexById = array_column($express, null, 'express_id');
 
-        $orderAddressModel = new OrderAddress();
+        $orderAddressModel = new OrderAddressSimple();
         $orderAddress = $orderAddressModel->batchByOrderIds($orderIds);
         $orderAddressIndexByOrderId = array_column($orderAddress,'phone','order_id');
 
-        $userIds = array_column($orderGoodses,'user_id');
-        $users = \app\store\model\User::getByUserIds($userIds);
-        $userToOpenId = array_column($users,'open_id','user_id');
+        $userIds = array_column($orderGoodses, 'user_id');
+        $users = User::getByUserIds($userIds);
+        $userToOpenId = array_column($users, 'open_id', 'user_id');
 
         // 遍历整理数据
         foreach ($orderGoodses as $orderGoods) {
             $res = WxOrderLogistics::getOrderStatusByTransId($orders[$orderGoods['order_id']]['transaction_id']);
-            dd(json_encode($res));
-            if ($res['code'] == 10060020){
-                $a = WxOrderLogistics::orderDeliveryByTransId($orders[$orderGoods['order_id']]['transaction_id'],
-                    $expressIndexById[$orderGoods['express_id']]['wx_delivery_id'],$orderGoods['express_no'],$orderGoods['goods_name'],$userToOpenId[$orderGoods['user_id']],'',$orderAddressIndexByOrderId[$orderGoods['order_id']]);
-                if ($a['code'] == 'ok'){
-                    OrderGoods::update(['wx_delivery_status'=>20],['order_goods_id'=>$orderGoods['order_goods_id']]);
+            //$res = ['errcode' => 0, 'errmsg' => 'ok', 'order' => ['order_state' => 1]];
+            if ($res['errcode'] == 0 && $res['errmsg'] == 'ok') {
+                if ($res['order']['order_state'] == 1) {//订单状态枚举:(1) 待发货;(2) 已发货;(3) 确认收货;(4) 交易完成;(5) 已退款。
+                    //$orderAddress = $orderAddressModel->findByOrderId($orderGoods['order_id']);
+                    $a = WxOrderLogistics::orderDeliveryByTransId($orders[$orderGoods['order_id']]['transaction_id'],
+                        $expressIndexById[$orderGoods['express_id']]['wx_delivery_id'], $orderGoods['express_no'], $orderGoods['goods_name'], $userToOpenId[$orderGoods['user_id']], '', $orderAddressIndexByOrderId[$orderGoods['order_id']]);
+                    dd(json_encode($a));
+                    if ($a['code'] == 'ok') {
+                        OrderGoods::update(['wx_delivery_status' => 20], ['order_goods_id' => $orderGoods['order_goods_id']]);
+                    }
                 }
-                dd($a);
+
+            }else{
+                dd(json_encode($res));
             }
         }
         // 记录日志

+ 42 - 0
app/store/model/OrderAddressSimple.php

@@ -0,0 +1,42 @@
+<?php
+// +----------------------------------------------------------------------
+// | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
+// +----------------------------------------------------------------------
+// | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
+// +----------------------------------------------------------------------
+// | Author: 萤火科技 <admin@yiovo.com>
+// +----------------------------------------------------------------------
+declare (strict_types = 1);
+
+namespace app\store\model;
+
+use app\common\model\BaseModel;
+
+/**
+ * 订单收货地址模型
+ * Class OrderAddress
+ * @package app\store\model
+ */
+class OrderAddressSimple extends BaseModel
+{
+    protected $name = 'order_address';
+
+    // 定义主键
+    protected $pk = 'order_address_id';
+
+    protected $updateTime = false;
+    public function findByOrderId($orderId)
+    {
+        if (empty($orderId))return null;
+        return $this->where('order_id', $orderId)->find()->toArray();
+    }
+
+    public function batchByOrderIds($orderIds)
+    {
+        if (empty($orderIds))return null;
+        return $this->whereIn('order_id', $orderIds)->select()->toArray();
+    }
+
+}

+ 30 - 25
app/store/service/wxApi/WxOrderLogistics.php

@@ -1,4 +1,5 @@
 <?php
+
 namespace app\store\service\wxApi;
 
 use app\common\service\BaseService;
@@ -20,22 +21,23 @@ class WxOrderLogistics extends BaseService
      * @param $trackingNo
      * @param $goodsDesc
      * @param $payerOpenId
-     * @param $consignorContact 
+     * @param $consignorContact
      * @param $receiverContact
+     * @param $logisticsType 物流模式,发货方式枚举值:1、实体物流配送采用快递公司进行实体物流配送形式 2、同城配送 3、虚拟商品,虚拟商品,例如话费充值,点卡等,无实体配送形式 4、用户自提
      * @return object
      */
-    public static function orderDeliveryByTransId($orderTransId, $expressCompany, $trackingNo, $goodsDesc, $payerOpenId, $consignorContact, $receiverContact)
+    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;
+        $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'] = 1; 
+        $params['logistics_type'] = $logisticsType;
         $params['delivery_mode'] = 1;
         $params['is_all_delivered'] = true;
 
@@ -48,23 +50,22 @@ class WxOrderLogistics extends BaseService
         if ($consignorContact != null || $receiverContact != null) {
             $shippingInfo['contact'] = [];
             if ($consignorContact != null) {
-              $shippingInfo['contact']['consignor_contact'] = $consignorContact;
+                $shippingInfo['contact']['consignor_contact'] = $consignorContact;
             }
 
             if ($receiverContact != null) {
-              $shippingInfo['contact']['receiver_contact'] = $receiverContact;
+                $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';
+        $data = explode(' ', $nowStr);
+        $params['upload_time'] = $data[0] . 'T' . $data[1] . '.000+08:00';
         $params['payer'] = [
             'openid' => $payerOpenId
         ];
-        dd($params);
         $ret = curl_post($url, json_encode($params));
         $arr = json_decode($ret);
 
@@ -83,11 +84,11 @@ class WxOrderLogistics extends BaseService
      * @param $receiverContact
      * @return object
      */
-    public static function orderDeliveryByOutTradeNo($storeId,$outTradeNo, $expressCompany, $trackingNo, $goodsDesc, $payerOpenId, $consignorContact, $receiverContact)
+    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;
+        $url = "https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token=" . $accessToken;
 
         $params['access_token'] = $accessToken;
 
@@ -98,7 +99,7 @@ class WxOrderLogistics extends BaseService
             'mchid' => $wxConfig['mchid'],
             'out_trade_no' => $outTradeNo,
         ];
-        $params['logistics_type'] = 1; 
+        $params['logistics_type'] = 1;
         $params['delivery_mode'] = 1;
         $params['is_all_delivered'] = true;
 
@@ -111,11 +112,11 @@ class WxOrderLogistics extends BaseService
         if ($consignorContact != null || $receiverContact != null) {
             $shippingInfo['contact'] = [];
             if ($consignorContact != null) {
-              $shippingInfo['contact']['consignor_contact'] = $consignorContact;
+                $shippingInfo['contact']['consignor_contact'] = $consignorContact;
             }
 
             if ($receiverContact != null) {
-              $shippingInfo['contact']['receiver_contact'] = $receiverContact;
+                $shippingInfo['contact']['receiver_contact'] = $receiverContact;
             }
         }
 
@@ -123,7 +124,7 @@ class WxOrderLogistics extends BaseService
 
         $nowStr = date('Y-m-d H:i:s');
         $data = explode($nowStr, ' ');
-        $params['upload_time'] = $data[0].'T'.$data[1].'.000+08:00';
+        $params['upload_time'] = $data[0] . 'T' . $data[1] . '.000+08:00';
         $params['payer'] = [
             'openid' => $payerOpenId
         ];
@@ -139,10 +140,11 @@ class WxOrderLogistics extends BaseService
      * @param $transId
      * @return object
      */
-    public static function getOrderStatusByTransId($transId) {
+    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;
+        $url = "https://api.weixin.qq.com/wxa/sec/order/get_order?access_token=" . $accessToken;
 
         //$params['access_token'] = $accessToken;
 
@@ -154,16 +156,17 @@ class WxOrderLogistics extends BaseService
         return $arr;
     }
 
-        /**
+    /**
      * 根据outTradeNo获得订单状态,状态字段:order_state:订单状态枚举:(1) 待发货;(2) 已发货;(3) 确认收货;(4) 交易完成;(5) 已退款。
      * @param $storeId
      * @param $outTradeNo
      * @return object
      */
-    public static function getOrderStatusByOutTradeNo($storeId, $outTradeNo) {
+    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;
+        $url = "https://api.weixin.qq.com/wxa/sec/order/get_order?access_token=" . $accessToken;
 
         $params['access_token'] = $accessToken;
         $wxConfig = WxappModel::getWxappCache($storeId);
@@ -176,23 +179,25 @@ class WxOrderLogistics extends BaseService
         return $arr;
     }
 
-    public static function getDeliveryList(){
+    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;
+        $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);
     }
 
-    public static function isTradeManaged($storeId){
+    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;
+        $url = 'https://api.weixin.qq.com/wxa/sec/order/is_trade_managed?access_token=' . $accessToken;
         $wxConfig = WxappModel::getWxappCache($storeId);
 
-        $params = ['appid'=>$wxConfig['app_id']];
+        $params = ['appid' => $wxConfig['app_id']];
         $ret = curl_post($url, json_encode($params));
         return json_decode($ret);
     }