131 lines
6.6 KiB
PHP
131 lines
6.6 KiB
PHP
<?php
|
||
/**
|
||
* SaaSMall商城系统 - 团队十年电商经验汇集巨献!
|
||
* =========================================================
|
||
* Copy right 2019-2029 成都SAAS云科技有限公司, 保留所有权利。
|
||
* ----------------------------------------------
|
||
* 官方网址: https://www.gobuysaas.com
|
||
* =========================================================
|
||
*/
|
||
|
||
namespace addon\weapp\model;
|
||
|
||
use addon\wechatpay\model\Config as ConfigModel;
|
||
use app\model\BaseModel;
|
||
|
||
class Order extends BaseModel
|
||
{
|
||
|
||
/***
|
||
* 小程序支付订单提交
|
||
* @param $order_id
|
||
* @return array
|
||
* @throws \GuzzleHttp\Exception\GuzzleException
|
||
*/
|
||
public function delivery($order_id,$logistics_type='')
|
||
{
|
||
$order = model('order')->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();
|
||
}
|
||
}
|