0) { $data_pd = []; $data_pd['member_id'] = $order_info['buyer_id']; $data_pd['member_name'] = $order_info['buyer_name']; $data_pd['amount'] = $rcb_amount; $data_pd['order_sn'] = $order_info['order_sn']; $predeposit_model->changeRcb('order_comb_pay', $data_pd); } //下单,支付被冻结的预存款 $pd_amount = floatval($order_info['pd_amount']); if ($pd_amount > 0) { $data_pd = []; $data_pd['member_id'] = $order_info['buyer_id']; $data_pd['member_name'] = $order_info['buyer_name']; $data_pd['amount'] = $pd_amount; $data_pd['order_sn'] = $order_info['order_sn']; $predeposit_model->changePd('order_comb_pay', $data_pd); } //更新订单状态 $update_order = []; $update_order['order_state'] = ORDER_STATE_SUCCESS; $update_order['payment_time'] = isset($post['payment_time']) ? strtotime($post['payment_time']) : TIMESTAMP; $update_order['payment_code'] = $post['payment_code']; $update_order['trade_no'] = $post['trade_no']; $update_order['finished_time'] = TIMESTAMP; $update = $StoreOrder->edit($update_order, ['id' => $order_info['id']]); if (!$update) { throw new \think\Exception(lang('ds_common_save_fail'), 10006); } Db::commit(); return ds_callback(true, '更新成功'); } catch (Exception $e) { Db::rollback(); return ds_callback(false, $e->getMessage()); } } /** * 积分支付 */ public function pointPay($order_info, $input, $buyer_info) { $point_ratio = config('app.point_ratio'); $point_amount = floatval($buyer_info['point'] / $point_ratio); if ($point_amount <= 0) return $order_info; $order_model = model('StoreOrder'); $predeposit_model = model('predeposit'); $order_amount = round($order_info['order_amount'] - $order_info['rcb_amount'] - $order_info['pd_amount'], 2); $data_point = []; $data_point['member_id'] = $buyer_info['member_id']; $data_point['union_id'] = $buyer_info['member_wxunionid']; $data_point['member_name'] = $buyer_info['member_name']; $data_point['amount'] = $order_amount; $data_point['order_sn'] = $order_info['order_sn']; if ($point_amount >= $order_amount) { //积分立即支付,订单支付完成 $predeposit_model->changePoint('order_pay', $data_point); // 订单状态 置为已支付 $data_order = []; $order_info['order_state'] = $data_order['order_state'] = 40; $data_order['payment_time'] = TIMESTAMP; $data_order['finished_time'] = TIMESTAMP; $data_order['payment_code'] = 'predeposit'; $order_info['point_amount'] = $data_order['point_amount'] = round($order_info['point_amount'] + ($order_amount * $point_ratio), 2); $result = $order_model->edit($data_order, ['id' => $order_info['id']]); if (!$result) { throw new \think\Exception('订单更新失败', 10006); } } else { //暂冻结预存款,后面还需要 API彻底完成支付 $data_point['amount'] = $point_amount; $predeposit_model->changeRcb('order_freeze', $data_point); //预存款支付金额保存到订单 $data_order = []; $order_info['point_amount'] = $data_order['point_amount'] = $order_info['point_amount'] + $point_amount * $point_ratio; $result = $order_model->editorder($data_order, ['id' => $order_info['id']]); if (!$result) { throw new \think\Exception('订单更新失败', 10006); } } return $order_info; } /** * 取消订单 */ public function changeOrderStateCancel($order_info) { $expense = Db::name('sub_card_expense')->where('is_vir', 3)->where('order_id', $order_info['id'])->find(); if (!empty($expense)) { //1.回滚卡片余额 $cardInfo = Db::name('sub_card')->where('id', $expense['card_id'])->find(); if (($cardInfo['balance'] + $order_info['deduction_amount']) == $cardInfo['worth']) { $cardStatus = 1; } else { $cardStatus = 2; } $cardUpdate = [ 'card_status' => $cardStatus, 'balance' => $cardInfo['balance'] + $order_info['deduction_amount'], 'freeze' => $cardInfo['freeze'] - $order_info['deduction_amount'], 'update_time' => time(), 'used_count' => $cardInfo['used_count'] - 1, ]; $cardRes = Db::name('sub_card')->where('id', $expense['card_id'])->update($cardUpdate); if ($cardRes) { //如果卡的数据恢复成功了 删除卡的消费记录 Db::name('sub_card_expense')->where('id', $expense['id'])->update(['expense_status' => 2]); } } //更改订单状态 $TicketOrder = model('StoreOrder'); $TicketOrder->where('id', $order_info['id'])->update(['order_state' => 0]); Log::info('到店付款订单取消,id:' . $order_info['id'] . ',时间:' . date('Y-m-d H:i:s')); } }