|
@@ -3,6 +3,7 @@
|
|
|
namespace app\api\controller;
|
|
|
|
|
|
use app\common\controller\Api;
|
|
|
+use app\common\service\OrderService;
|
|
|
use think\Db;
|
|
|
use addons\epay\library\Service;
|
|
|
use think\Exception;
|
|
@@ -64,8 +65,6 @@ class Pay extends Api
|
|
|
//验签
|
|
|
$paytype = input('paytype','wechat');
|
|
|
$func = input('func','order_notify_do');
|
|
|
- $out_trade_no = 'O230606102813244205462';
|
|
|
- $rs = $this->$func($out_trade_no);echo '<pre>';var_dump($rs);exit;
|
|
|
$notify_file = $this->notify_log_start($paytype);
|
|
|
$pay = Service::checkNotify($paytype);
|
|
|
if (!$pay) {
|
|
@@ -356,6 +355,36 @@ class Pay extends Api
|
|
|
Db::rollback();
|
|
|
return false;
|
|
|
}
|
|
|
+ //商家端金额更新
|
|
|
+ $companyWalletWhere['user_id'] = $orderInfo['company_id'];
|
|
|
+ $companyWalletRes = Db::name('company_wallet')->where($companyWalletWhere)->find();
|
|
|
+ $companyMoneyBefore = isset($companyWalletRes['money']) ? $companyWalletRes['money'] : 0.00;
|
|
|
+ $companyMoneyNew = bcadd($companyMoneyBefore,$orderInfo['order_amount'],2);
|
|
|
+ $companyMoneyData = [
|
|
|
+ 'money' => $companyMoneyNew,
|
|
|
+ ];
|
|
|
+ $companyWalletRes = Db::name('company_wallet')->where($companyWalletWhere)->update($companyMoneyData);
|
|
|
+ if (!$companyWalletRes) {
|
|
|
+ Db::rollback();
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ //商家端记录日志
|
|
|
+ $companyMoneyLogData = [
|
|
|
+ 'user_id' => $orderInfo['user_id'],//用户ID
|
|
|
+ 'log_type' => 204,//日志类型
|
|
|
+ 'before' => $companyMoneyBefore,//之前余额
|
|
|
+ 'change_value' => $orderInfo['order_amount'],//变动金额
|
|
|
+ 'remain' => $companyMoneyNew,//剩余金额
|
|
|
+ 'table' => 'pay_order',//数据来源
|
|
|
+ 'table_id' => $orderInfo['id'],//数据来源ID
|
|
|
+ 'remark' => '充值',//备注
|
|
|
+ 'createtime' => $time, //创建时间
|
|
|
+ ];
|
|
|
+ $companyMoneyLogRes = Db::name('company_money_log')->insertGetId($companyMoneyLogData);
|
|
|
+ if (!$companyMoneyLogRes) {
|
|
|
+ Db::rollback();
|
|
|
+ return false;
|
|
|
+ }
|
|
|
//逻辑结束
|
|
|
|
|
|
//状态
|
|
@@ -384,152 +413,30 @@ class Pay extends Api
|
|
|
$carId = input('car_id','0');
|
|
|
$uid = $this->auth->id;
|
|
|
$companyId = $this->auth->company_id;
|
|
|
- $time = time();
|
|
|
+ $miniOpenId = $this->auth->mini_openid;
|
|
|
if (empty($id)) {
|
|
|
throw new Exception('请选择套餐');
|
|
|
}
|
|
|
if (empty($carId)) {
|
|
|
throw new Exception('请选择车辆');
|
|
|
}
|
|
|
- $userCarWhere['user_id'] = $uid;
|
|
|
- $userCarWhere['id'] = $carId;
|
|
|
- $userCar = Db::name('user_car')->where($userCarWhere)->find();
|
|
|
- if (empty($userCar)) {
|
|
|
- throw new Exception('未找到车辆信息');
|
|
|
- }
|
|
|
- $packageWhere['id'] = $id;
|
|
|
- $packageWhere['status'] = 1;
|
|
|
- $package = Db::name('package')->where($packageWhere)->find();
|
|
|
- if (empty($package)) {
|
|
|
- throw new Exception('未找到套餐信息');
|
|
|
- }
|
|
|
- if ($package['company_id'] != $companyId) {
|
|
|
- throw new Exception('您绑定的门店和购买套餐门店不一致');
|
|
|
- }
|
|
|
- if ($pay_type == 'wallet') {//验证余额
|
|
|
- $userWalletWhere['user_id'] = $uid;
|
|
|
- $userWalletWhere['company_id'] = $companyId;
|
|
|
- $userWallet = Db::name('user_wallet')->where($userWalletWhere)->find();
|
|
|
- if (empty($userWallet)) {
|
|
|
- throw new Exception('钱包异常');
|
|
|
- }
|
|
|
- if ($userWallet['money'] < $package['price']) {
|
|
|
- throw new Exception('您的余额不足,请充值。');
|
|
|
- }
|
|
|
- }
|
|
|
- $gift_amount = 0.00;
|
|
|
- $order_amount = $package['price'];
|
|
|
- $extData = ['car_id'=>$carId];
|
|
|
- //创建订单
|
|
|
- $data['company_id'] = $companyId;
|
|
|
- $data['user_id'] = $uid;
|
|
|
- $data['out_trade_no'] = createUniqueNo('O',$uid); // 数据库订单号加密
|
|
|
- $data['order_amount'] = $order_amount;
|
|
|
- $data['gift_amount'] = $gift_amount;
|
|
|
- $data['createtime'] = time();
|
|
|
- $data['pay_type'] = $pay_type;
|
|
|
- $data['order_status'] = 0;
|
|
|
- $data['table_name'] = 'package';
|
|
|
- $data['table_id'] = $id;
|
|
|
- $data['ext_data'] = json_encode($extData);
|
|
|
-
|
|
|
- $orderid = Db::name('pay_order')->insertGetId($data);
|
|
|
- if ($pay_type == 'wechat') {//微信支付
|
|
|
- $openid = $this->auth->mini_openid;
|
|
|
- $httpStr = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'];
|
|
|
- //下单
|
|
|
- $params = [
|
|
|
- 'type' => $pay_type,
|
|
|
- 'orderid' => $data['out_trade_no'],
|
|
|
- 'title' => '购买套餐',
|
|
|
- 'amount' => $data['order_amount'],
|
|
|
- 'method' => $platform,
|
|
|
- 'openid' => $openid,
|
|
|
- 'notifyurl' => $httpStr.'/api/pay/order_notify_base/paytype/'.$pay_type.'/func/package_do',
|
|
|
- 'returnurl' => '',
|
|
|
- ];
|
|
|
-
|
|
|
- $res = Service::submitOrder($params);
|
|
|
- } else {//余额支付
|
|
|
- //扣除钱包
|
|
|
- $oldMoney = $userWallet['money'];
|
|
|
- $newMoney = bcsub($oldMoney,$package['price'],2);
|
|
|
- $userWalletData['money'] = $newMoney;
|
|
|
- $userWalletData['updatetime'] = $time;
|
|
|
-
|
|
|
- $userWalletWhere['user_id'] = $uid;
|
|
|
- $userWalletWhere['company_id'] = $companyId;
|
|
|
- $userWalletRes = Db::name('user_wallet')->where($userWalletWhere)->update($userWalletData);
|
|
|
- if (!$userWalletRes) {
|
|
|
- throw new Exception('支付失败');
|
|
|
- }
|
|
|
- //余额明细记录
|
|
|
- $userMoneyLogData = [
|
|
|
- 'company_id' => $companyId,
|
|
|
- 'user_id' => $uid,
|
|
|
- 'log_type' => 103,//购买套餐
|
|
|
- 'before' => $oldMoney,
|
|
|
- 'change_value' => $package['price'],
|
|
|
- 'remain' => $newMoney,
|
|
|
- 'table' => 'pay_order',
|
|
|
- 'table_id' => $orderid,
|
|
|
- 'remark' => '订单消费',
|
|
|
- 'createtime' => $time,
|
|
|
- ];
|
|
|
- $userMoneyLogRes = Db::name('user_money_log')->insertGetId($userMoneyLogData);
|
|
|
- if (!$userMoneyLogRes) {
|
|
|
- throw new Exception('余额明细记录失败');
|
|
|
- }
|
|
|
- //生成订单
|
|
|
- $time = time();
|
|
|
- $packageWhere['id'] = $id;
|
|
|
- $package = Db::name('package')->where($packageWhere)->find();
|
|
|
- $days = isset($package['days']) ? $package['days'] : 0;
|
|
|
- $packageEndtime = $time + 86400 * $days;
|
|
|
- $userId = $uid;
|
|
|
- $userWhere['id'] = $userId;
|
|
|
- $user = Db::name('user')->where($userWhere)->find();
|
|
|
- $userCarWhere['id'] = $carId;
|
|
|
- $userCar = Db::name('user_car')->where($userCarWhere)->find();
|
|
|
- //生成订单
|
|
|
- $orderData = [
|
|
|
- 'orderno' => createUniqueNo('O', $userId),//订单号
|
|
|
- 'ordertype' => 3,//类型:1=预约下单,2=在线下单,3=套餐订单
|
|
|
- 'company_id' => $companyId,//门店ID
|
|
|
- 'user_id' => $userId,//用户ID
|
|
|
- 'user_name' => isset($user['nickname']) ? $user['nickname'] : '',//用户姓名
|
|
|
- 'user_car_id' => isset($userCar['id']) ? $userCar['id'] : 0,//车辆ID
|
|
|
- 'user_car_number' => isset($userCar['car_number']) ? $userCar['car_number'] : '',//用户车牌
|
|
|
- 'user_mobile' => isset($user['mobile']) ? $user['mobile'] : '',//用户手机
|
|
|
- 'pre_order_id' => 0,//预约单ID
|
|
|
- 'package_id' => isset($package['id']) ? $package['id'] : 0,//套餐ID
|
|
|
- 'server_info' => isset($package['info']) ? $package['info'] : '',//套餐内容
|
|
|
- 'server_images' => isset($package['images']) ? $package['images'] : '',//套餐图片
|
|
|
- 'pay_fee' => isset($package['price']) ? $package['price'] : 0,//套餐价格
|
|
|
- 'package_endtime' => $packageEndtime,//套餐到期时间
|
|
|
- 'status' => 2,//状态:1=待支付,2=待处理,3=已完成,4=已取消
|
|
|
- 'pay_time' => $time,
|
|
|
- 'paytype' => 2,//支付方式:1=线下,2=余额,3=微信
|
|
|
- 'pay_fee' => $order_amount,//支付总额
|
|
|
- 'createtime' => $time,//下单时间
|
|
|
- 'pay_order_id' => $orderid,//支付ID
|
|
|
- ];
|
|
|
- $orderRes = Db::name('order')->insertGetId($orderData);
|
|
|
- $payOrderData['order_status'] = 1;
|
|
|
- $payOrderWhere['id'] = $orderid;
|
|
|
- $payOrderRes = Db::name('pay_order')->where($payOrderWhere)->update($payOrderData);
|
|
|
- if (!$payOrderRes) {
|
|
|
- throw new Exception('支付失败');
|
|
|
- }
|
|
|
+ $orderService = new OrderService();
|
|
|
+ $params = [
|
|
|
+ 'pay_type' => $pay_type,
|
|
|
+ 'platform' => $platform,
|
|
|
+ 'package_id' => $id,
|
|
|
+ 'car_id' => $carId,
|
|
|
+ 'user_id' => $uid,
|
|
|
+ 'company_id' => $companyId,
|
|
|
+ 'mini_openid' => $miniOpenId,
|
|
|
+ ];
|
|
|
+ $orderRes = $orderService->orderPay($params);
|
|
|
+ if (!$orderRes['status']) {
|
|
|
+ throw new Exception($orderRes['msg']);
|
|
|
}
|
|
|
- $res['order_id'] = isset($orderRes) ? $orderRes : 0;
|
|
|
- $res['pay_order_id'] = $orderid;
|
|
|
+ $res = $orderRes['data'];
|
|
|
Db::commit();
|
|
|
- if($pay_type == 'wechat'){
|
|
|
- $this->success('操作成功',json_decode($res,true));
|
|
|
- }else{
|
|
|
- $this->success('操作成功',$res);
|
|
|
- }
|
|
|
+ $this->success('操作成功',$res);
|
|
|
} catch (Exception $e) {
|
|
|
Db::rollback();
|
|
|
$this->error($e->getMessage());
|
|
@@ -553,42 +460,19 @@ class Pay extends Api
|
|
|
Db::rollback();
|
|
|
return false;
|
|
|
}
|
|
|
- $time = time();
|
|
|
- $packageWhere['id'] = $orderInfo['table_id'];
|
|
|
- $package = Db::name('package')->where($packageWhere)->find();
|
|
|
- $days = isset($package['days']) ? $package['days'] : 0;
|
|
|
- $packageEndtime = $time + 86400 * $days;
|
|
|
- $userId = $orderInfo['user_id'];
|
|
|
- $userWhere['id'] = $userId;
|
|
|
- $user = Db::name('user')->where($userWhere)->find();
|
|
|
+ $orderService = new OrderService();
|
|
|
$extData = json_decode($orderInfo['ext_data'], true);
|
|
|
- $userCarWhere['id'] = isset($extData['car_id']) ? $extData['car_id'] : 0;
|
|
|
- $userCar = Db::name('user_car')->where($userCarWhere)->find();
|
|
|
- //生成订单
|
|
|
- $orderData = [
|
|
|
- 'orderno' => createUniqueNo('O', $userId),//订单号
|
|
|
- 'ordertype' => 3,//类型:1=预约下单,2=在线下单,3=套餐订单
|
|
|
- 'company_id' => $orderInfo['company_id'],//门店ID
|
|
|
- 'user_id' => $userId,//用户ID
|
|
|
- 'user_name' => isset($user['nickname']) ? $user['nickname'] : '',//用户姓名
|
|
|
- 'user_car_id' => isset($userCar['id']) ? $userCar['id'] : 0,//车辆ID
|
|
|
- 'user_car_number' => isset($userCar['car_number']) ? $userCar['car_number'] : '',//用户车牌
|
|
|
- 'user_mobile' => isset($user['mobile']) ? $user['mobile'] : '',//用户手机
|
|
|
- 'pre_order_id' => 0,//预约单ID
|
|
|
- 'package_id' => isset($package['id']) ? $package['id'] : 0,//套餐ID
|
|
|
- 'server_info' => isset($package['info']) ? $package['info'] : '',//套餐内容
|
|
|
- 'server_images' => isset($package['images']) ? $package['images'] : '',//套餐图片
|
|
|
- 'pay_fee' => isset($package['price']) ? $package['price'] : 0,//套餐价格
|
|
|
- 'package_endtime' => $packageEndtime,//套餐到期时间
|
|
|
- 'status' => 2,//状态:1=待支付,2=待处理,3=已完成,4=已取消
|
|
|
- 'pay_time' => $time,
|
|
|
- 'paytype' => 3,//支付方式:1=线下,2=余额,3=微信
|
|
|
- 'pay_fee' => $orderInfo['order_amount'],//支付总额
|
|
|
- 'createtime' => $time,//下单时间
|
|
|
- 'pay_order_id' => $orderInfo['id'],//支付ID
|
|
|
+ $carId = isset($extData['car_id']) ? $extData['car_id'] : 0;
|
|
|
+ $params = [
|
|
|
+ 'package_id' => $orderInfo['table_id'],
|
|
|
+ 'company_id' => $orderInfo['company_id'],
|
|
|
+ 'user_id' => $orderInfo['user_id'],
|
|
|
+ 'car_id' => $carId,
|
|
|
+ 'pay_order_id' => $orderInfo['id'],
|
|
|
+ 'order_paytype' => 3,//支付方式:1=线下,2=余额,3=微信
|
|
|
];
|
|
|
- $orderRes = Db::name('order')->insertGetId($orderData);
|
|
|
- if (!$orderRes) {
|
|
|
+ $orderRes = $orderService->addOrder($params);
|
|
|
+ if (!$orderRes['status']) {
|
|
|
Db::rollback();
|
|
|
return false;
|
|
|
}
|