getInfo([['order_id', '=', $order_id]], 'site_id,mobile,out_trade_no,delivery_type,pay_type,member_id,order_type'); if ($order && $order['pay_type'] == 'wechatpay') { $member = model('member')->getInfo([['member_id', '=', $order['member_id']]], 'weapp_openid'); $weapp = new Weapp($order['site_id']); if ($weapp->isTradeManaged()) { $data = [ 'delivery_mode' => 'UNIFIED_DELIVERY',//发货模式,发货模式枚举值:1、UNIFIED_DELIVERY(统一发货)2、SPLIT_DELIVERY(分拆发货) 示例值: UNIFIED_DELIVERY 'shipping_list' => [], ]; if(!$logistics_type){ switch ($order['delivery_type']) { case 'express': $data['logistics_type'] = 1; $package_list = model('express_delivery_package')->getList([['order_id', '=', $order_id]], 'express_company_name,delivery_no,order_goods_id_array'); if (!empty($package_list)) { $company_list = $weapp->getCompanyList(); foreach ($package_list as $item) { $delivery_id = 'OTHERS'; if ($company_list['code'] == 0) { $index = array_search($item['express_company_name'], array_column($company_list['data'], 'delivery_name')); if ($index !== false && isset($company_list['data'][$index])) { $delivery_id = $company_list['data'][$index]['delivery_id']; } } $order_goods_model = model('order_goods')->getList([['order_goods_id', "in", $item['order_goods_id_array']]], "goods_id,sku_name,sku_id,num"); foreach ($order_goods_model as $order_iem) { $gdata = [ 'tracking_no' => $item['delivery_no'], 'express_company' => $delivery_id, 'item_desc' => mb_substr($order_iem['sku_name'], 0, 115), 'contact' => [ 'receiver_contact' => substr_replace($order['mobile'], '****', 3, 4) ], ]; array_push($data['shipping_list'], $gdata); } } } break; case 'local': $data['logistics_type'] = 2; break; case 'store': $data['logistics_type'] = 4; break; default : $data['logistics_type'] = 3; break; } }else { $data['logistics_type'] = $logistics_type; } if ($order['delivery_type'] != 'express') { $order_goods_model = model('order_goods')->getList([['order_id', "=", $order_id]], "goods_id,sku_name,sku_id,num"); foreach ($order_goods_model as $order_iem) { $gdata = [ 'item_desc' => mb_substr($order_iem['sku_name'], 0, 115), 'contact' => [ 'receiver_contact' => substr_replace($order['mobile'], '****', 3, 4) ], ]; array_push($data['shipping_list'], $gdata); } } $config_model = new ConfigModel(); $paycon = $config_model->getPayConfig($order['site_id'])['data']['value']; $requestData = [ 'order_key' => [ 'order_number_type' => 1, 'mchid' => $paycon['mch_id'], 'out_trade_no' => $order['out_trade_no'], ], 'delivery_mode' => $data['delivery_mode'] ?: 'UNIFIED_DELIVERY', 'upload_time' => date('Y-m-d\TH:i:sP', time()), 'payer' => [ 'openid' => $member['weapp_openid'] ], 'logistics_type' => $data['logistics_type'], 'shipping_list' => $data['shipping_list'] ]; if ($requestData['delivery_mode'] == 'UNIFIED_DELIVERY') { $requestData['shipping_list'] = [$data['shipping_list'][0]]; } $res = $weapp->httpPostJson('wxa/sec/order/upload_shipping_info', $requestData); if (isset($res['errcode']) && $res['errcode'] != 0) { $datas = [ 'merchant_trade_no' => $order['out_trade_no'], 'merchant_id' => $paycon['mch_id'], ]; if ($res['errcode'] == 48001) { return $this->success(); } $error = $res['errmsg']; $res = $weapp->httpPostJson('/wxa/sec/order/get_order', $datas); if (isset($res['order']) && in_array($res['order']['order_state'], [2, 3, 4, 5])) { return $this->success(); } return $this->error($error); } } } return $this->success(); } }