jh-admin/addon/weapp/model/Order.php

131 lines
6.6 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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();
}
}