提交 6aabda73 编写于 作者: G gongfuxiang

优化订单0元无需选择支付方式

上级 60c6edfe
......@@ -526,7 +526,7 @@
<!-- 订单确认页面分组商品底部钩子-结束 -->
<!-- 支付方式 -->
{{if $common_order_is_booking neq 1}}
{{if $base['actual_price'] gt 0 and $common_order_is_booking neq 1}}
<div class="buy-items business-item payment" data-field="payment_id">
<h3>选择支付</h3>
{{if !empty($payment_list)}}
......@@ -645,7 +645,7 @@
</div>
{{/if}}
</div>
<form class="am-form form-validation nav-buy" action="{{:MyUrl('index/buy/add')}}" method="post" class="nav-buy" request-type="ajax-fun" request-value="BuySubmitBack" data-site-type="{{$common_site_type}}" data-is-booking="{{$common_order_is_booking}}">
<form class="am-form form-validation nav-buy" action="{{:MyUrl('index/buy/add')}}" method="post" class="nav-buy" request-type="ajax-fun" request-value="BuySubmitBack" data-site-type="{{$common_site_type}}" data-base-actual-price="{{$base.actual_price}}" data-is-booking="{{$common_order_is_booking}}">
<input type="hidden" name="goods_id" value="{{if isset($params['goods_id'])}}{{$params.goods_id}}{{else /}}0{{/if}}" />
<input type="hidden" name="buy_type" value="{{if isset($params['buy_type'])}}{{$params.buy_type}}{{else /}}goods{{/if}}" />
<input type="hidden" name="stock" value="{{if isset($params['stock'])}}{{$params.stock}}{{else /}}1{{/if}}" />
......
......@@ -1026,22 +1026,15 @@ class BuyService
'error_msg' => '请选择地址',
];
}
// 非预约模式则校验支付方式
if(MyC('common_order_is_booking', 0) != 1)
{
$p[] = [
'checked_type' => 'empty',
'key_name' => 'payment_id',
'error_msg' => '支付方式有误',
];
}
$ret = ParamsChecked($params, $p);
if($ret !== true)
{
return DataReturn($ret, -1);
}
// 是否预约模式
$common_order_is_booking = MyC('common_order_is_booking', 0);
// 查询用户状态是否正常
$ret = UserService::UserStatusCheck('id', $params['user']['id']);
if($ret['code'] != 0)
......@@ -1057,11 +1050,20 @@ class BuyService
return $buy;
}
// 金额大于0、非预约模式 必须选择支付方式
if($buy['data']['base']['total_price'] > 0 && $common_order_is_booking != 1)
{
if(empty($params['payment_id']))
{
return DataReturn('支付方式有误', -1);
}
}
// 用户留言
$user_note = empty($params['user_note']) ? '' : str_replace(['"', "'"], '', strip_tags($params['user_note']));
// 订单默认状态
$order_status = (intval(MyC('common_order_is_booking', 0)) == 1) ? 0 : 1;
$order_status = ($common_order_is_booking == 1) ? 0 : 1;
// 支付方式
$payment_id = 0;
......
......@@ -73,22 +73,6 @@ class OrderService
return DataReturn('订单支付id有误', -1);
}
// 支付方式
$payment = [];
$payment_id = empty($params['payment_id']) ? Db::name('Order')->where(['id'=>$ids[0]])->value('payment_id') : intval($params['payment_id']);
if(!empty($payment_id))
{
$res = PaymentService::PaymentList(['where'=>['id'=>$payment_id]]);
if(!empty($res[0]))
{
$payment = $res[0];
}
}
if(empty($payment))
{
return DataReturn('支付方式有误', -1);
}
// 支付基础信息
$order_payment_id = 0;
$client_type = '';
......@@ -133,16 +117,6 @@ class OrderService
return $ret;
}
// 更新订单支付方式信息
if($payment['id'] != $order_payment_id)
{
Db::name('Order')->where(['id'=>$ids])->update([
'payment_id' => $payment['id'],
'is_under_line' => in_array($payment['payment'], MyConfig('shopxo.under_line_list')) ? 1 : 0,
'upd_time' => time(),
]);
}
// 金额为0、走直接支付成功
$total_price = 0;
$success_count = 0;
......@@ -152,7 +126,6 @@ class OrderService
{
$pay_result = self::OrderDirectSuccess([
'order' => $order,
'payment' => $payment,
'user' => $params['user'],
'params' => $params,
]);
......@@ -175,6 +148,33 @@ class OrderService
return DataReturn('操作成功', 0, ['is_success'=>1]);
}
// 订单金额大于0则必须存在支付方式
// 支付方式、未指定支付方式则获取第一个订单的支付方式
$payment = [];
$payment_id = empty($params['payment_id']) ? Db::name('Order')->where(['id'=>$ids[0]])->value('payment_id') : intval($params['payment_id']);
if(!empty($payment_id))
{
$res = PaymentService::PaymentList(['where'=>['id'=>$payment_id]]);
if(!empty($res[0]))
{
$payment = $res[0];
}
}
if(empty($payment))
{
return DataReturn('支付方式有误', -1);
}
// 更新订单支付方式信息
if($payment['id'] != $order_payment_id)
{
Db::name('Order')->where(['id'=>$ids])->update([
'payment_id' => $payment['id'],
'is_under_line' => in_array($payment['payment'], MyConfig('shopxo.under_line_list')) ? 1 : 0,
'upd_time' => time(),
]);
}
// 支付入口文件检查
$pay_checked = PaymentService::EntranceFileChecked($payment['payment'], 'order');
if($pay_checked['code'] != 0)
......@@ -472,29 +472,15 @@ class OrderService
*/
private static function OrderDirectSuccess($params = [])
{
if(!empty($params['order']) && !empty($params['payment']) && !empty($params['user']))
if(!empty($params['order']) && !empty($params['user']))
{
if($params['order']['total_price'] <= 0.00)
{
// 新增支付日志
$pay_log = self::OrderPayLogInsert([
'user_id' => $params['user']['id'],
'business_ids' => $params['order']['id'],
'business_nos' => $params['order']['order_no'],
'total_price' => $params['order']['total_price'],
'payment' => $params['payment']['payment'],
'payment_name' => $params['payment']['name'],
]);
if($pay_log['code'] != 0)
{
return $pay_log;
}
// 支付处理
$pay_params = [
'order' => [$params['order']],
'payment' => $params['payment'],
'pay_log_data' => $pay_log['data'],
'payment' => [],
'pay_log_data' => [],
'pay' => [
'trade_no' => '',
'subject' => isset($params['params']['subject']) ? $params['params']['subject'] : '订单支付',
......@@ -858,16 +844,21 @@ class OrderService
return DataReturn('订单数据不存在或类型有误', -1);
}
// 支付方式
if(empty($params['payment']))
// 订单金额大于0必须存在支付方式和订单支付日志
$order_total_price = array_sum(array_column($params['order'], 'total_price'));
if($order_total_price > 0)
{
return DataReturn('支付方式有误', -1);
}
// 支付方式
if(empty($params['payment']))
{
return DataReturn('支付方式有误', -1);
}
// 日志订单
if(empty($params['pay_log_data']))
{
return DataReturn('日志订单有误', -1);
// 日志订单
if(empty($params['pay_log_data']))
{
return DataReturn('日志订单有误', -1);
}
}
// 开启事务
......@@ -905,7 +896,6 @@ class OrderService
$upd_data = [
'pay_status' => 1,
'pay_price' => $order['total_price'],
'payment_id' => $params['payment']['id'],
'pay_time' => time(),
'upd_time' => time(),
];
......@@ -916,8 +906,15 @@ class OrderService
$upd_data['status'] = 2;
}
// 是否线下支付
$upd_data['is_under_line'] = in_array($params['payment']['payment'], MyConfig('shopxo.under_line_list')) ? 1 : 0;
// 订单金额大于0
if($order['total_price'] > 0 && !empty($params['payment']))
{
// 更新支付方式
$upd_data['payment_id'] = $params['payment']['id'];
// 是否线下支付
$upd_data['is_under_line'] = in_array($params['payment']['payment'], MyConfig('shopxo.under_line_list')) ? 1 : 0;
}
// 更新订单
if(!Db::name('Order')->where(['id'=>$order['id']])->update($upd_data))
......@@ -991,21 +988,24 @@ class OrderService
}
// 更新支付日志
$pay_log_data = [
'log_id' => $params['pay_log_data']['id'],
'trade_no' => isset($params['pay']['trade_no']) ? $params['pay']['trade_no'] : '',
'buyer_user' => isset($params['pay']['buyer_user']) ? $params['pay']['buyer_user'] : '',
'pay_price' => isset($params['pay']['pay_price']) ? $params['pay']['pay_price'] : 0,
'subject' => isset($params['pay']['subject']) ? $params['pay']['subject'] : '订单支付',
'payment' => $params['payment']['payment'],
'payment_name' => $params['payment']['name'],
];
$ret = PayLogService::PayLogSuccess($pay_log_data);
if($ret['code'] != 0)
{
// 事务回滚
Db::rollback();
return $ret;
if($order_total_price > 0 && !empty($params['pay_log_data']) && !empty($params['payment']))
{
$pay_log_data = [
'log_id' => $params['pay_log_data']['id'],
'trade_no' => isset($params['pay']['trade_no']) ? $params['pay']['trade_no'] : '',
'buyer_user' => isset($params['pay']['buyer_user']) ? $params['pay']['buyer_user'] : '',
'pay_price' => isset($params['pay']['pay_price']) ? $params['pay']['pay_price'] : 0,
'subject' => isset($params['pay']['subject']) ? $params['pay']['subject'] : '订单支付',
'payment' => $params['payment']['payment'],
'payment_name' => $params['payment']['name'],
];
$ret = PayLogService::PayLogSuccess($pay_log_data);
if($ret['code'] != 0)
{
// 事务回滚
Db::rollback();
return $ret;
}
}
// 提交事务
......
......@@ -106,7 +106,8 @@ $(function()
// 非预约模式校验支付方式
var is_booking = $('.nav-buy').data('is-booking') || 0;
if(is_booking != 1)
var actual_price = parseFloat($('.nav-buy').data('base-actual-price')) || 0;
if(is_booking != 1 && actual_price > 0)
{
var payment_id = parseInt($('form.nav-buy input[name="payment_id"]').val()) || 0;
if(payment_id === 0)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册