文件
mashangyoujiu/Application/PayApi/Controller/VipPayController.class.php

232 行
10 KiB
PHP
可执行文件

<?php
namespace PayApi\Controller;
use Think\Controller;
//[1.8.68]
/**
* 会员支付
* Class VipPayController
* @package Api\Controller
*/
class VipPayController extends Controller
{
/**
* @param $bill_id
* @param $scene_type 场景 1收银机 2商户后台 3门店后台 4小程序 5公众号
* @param $type 类型 1充值 2消费 3编辑增加 4编辑减少 5退款增加 6红包充值 7大转盘充值 8礼品卡充值
* @param null $password
* @param null $pay_order_id
* @return mixed
*/
public function pay($bill_id, $scene_type, $type, $password = null, $pay_order_id = null)
{
$PayOrderModel = D('RetailPayOrder');
$payMap = array(
$PayOrderModel::BILL_ID => $bill_id,
$PayOrderModel::ORDER_STATE => 'WAIT_BUYER_PAY',
$PayOrderModel::PAY_TYPE => 6, //余额支付
);
if (!empty($pay_order_id)) {
$payMap[$PayOrderModel::ID] = $pay_order_id;
}
$payOrder = $PayOrderModel->getFind($payMap);
if (empty($payOrder)) {
$res['status'] = 0;
$res['msg'] = '订单不存在1';
return $res;
}
if ($payOrder[$PayOrderModel::PAY_TYPE] = !6 || empty($payOrder[$PayOrderModel::VID])) {
$res['status'] = 0;
$res['msg'] = '您的请求有误';
return $res;
}
$VipModel = D('RetailVip');
$vipMap = array(
$VipModel::ID => $payOrder[$PayOrderModel::VID],
);
$vipInfo = $VipModel->getFind($vipMap);
if (empty($vipInfo)) {
$res['status'] = 0;
$res['msg'] = '数据库发生错误';
return $res;
}
if (!empty($password) && !checkPassword($vipInfo[$VipModel::PASSWORD], $password, $vipInfo[$VipModel::ADD_TIME])) {
$res['status'] = 0;
$res['msg'] = '支付密码错误';
return $res;
}
$payMoney = $payOrder[$PayOrderModel::TRADE_AMOUNT];
if (round($vipInfo[$VipModel::BALANCE] - $payMoney, 2) < 0) {
$res['status'] = 0;
$res['msg'] = '会员卡余额不足,无法支付';
return $res;
}
$pay = $VipModel->toSetDec($vipMap, $VipModel::BALANCE, $payMoney);
if ($pay) {
$RechargeOrderModel = D('RetailRechargeOrder');
$remark = '';
switch ($scene_type) {
case 1:
$remark = '线下买单余额支付' . $payMoney . '元';
break;
case 2:
$remark = '商户后台余额支付' . $payMoney . '元';
break;
case 3:
$remark = '门店后台余额支付' . $payMoney . '元';
break;
case 4:
$remark = '小程序买单余额支付' . $payMoney . '元';
break;
case 5:
$remark = '公众号买单余额支付' . $payMoney . '元';
break;
}
$item = array(
$RechargeOrderModel::STORE_ID => $payOrder[$PayOrderModel::STORE_ID],
$RechargeOrderModel::MERCHANT_ID => $payOrder[$PayOrderModel::MERCHANT_ID],
$RechargeOrderModel::BILL_ID => $payOrder[$PayOrderModel::BILL_ID],
$RechargeOrderModel::PAY_ORDER_ID => $payOrder[$PayOrderModel::ID],
$RechargeOrderModel::CASHIER_ID => $payOrder[$PayOrderModel::CASHIER_ID],
$RechargeOrderModel::MONEY => $payMoney,
$RechargeOrderModel::ALL_MONEY => $payMoney,
$RechargeOrderModel::STATE => 1,
$RechargeOrderModel::SCENE_TYPE => $scene_type,//1收银机 2商户后台 3门店后台 4小程序 5公众号
$RechargeOrderModel::TYPE => $type,//1充值 2消费 3编辑增加 4编辑减少 5退款增加 6红包充值 7大转盘充值 8礼品卡充值
$RechargeOrderModel::ADD_TIME => time(),
$RechargeOrderModel::VID => $vipInfo[$VipModel::ID],
$RechargeOrderModel::REMARK => $remark,
);
$add = $RechargeOrderModel->addOrder($item);
if ($add) {
$res['pay_order'] = $payOrder;
$res['status'] = 1;
$res['msg'] = '支付成功';
$save = array(
$PayOrderModel::ORDER_STATE => 'SUCCESS',
$PayOrderModel::TRADE_DATE => time()
);
$PayOrderModel->updateOrder($payMap, $save);
} else {
$res['status'] = 0;
$res['msg'] = '支付成功,添加记录失败,请联系系统管理员';
}
} else {
$res['status'] = 0;
$res['msg'] = '会员卡支付失败,请刷新动态码重试';
}
return $res;
}
/**
* 会员加积分
* @param int $vip_info 会员详情
* @param int $integral 积分
* @param int $store_id 门店id
* @param int $type 类型
* @param int $remake 注释
* @param int $bill_id
* @return array $res
*/
public function rechargeVipIntegral($vip_info, $integral, $store_id, $type, $remake, $bill_id = 0)
{
$RVModel = D('RetailVip'); // 会员表模型
// 修改积分
$vip_info[$RVModel::INTEGRAL] = $vip_info[$RVModel::INTEGRAL] && $vip_info[$RVModel::INTEGRAL] > 0 ? $vip_info[$RVModel::INTEGRAL] : 0;
$vip_info[$RVModel::GRADE_INTEGRAL] = $vip_info[$RVModel::GRADE_INTEGRAL] && $vip_info[$RVModel::GRADE_INTEGRAL] > 0 ? $vip_info[$RVModel::GRADE_INTEGRAL] : 0;
$up = array(
$RVModel::INTEGRAL => $vip_info[$RVModel::INTEGRAL] + $integral,
$RVModel::GRADE_INTEGRAL => $vip_info[$RVModel::GRADE_INTEGRAL] + $integral,
);
$save_result = $RVModel->updateOrder(array($RVModel::ID => $vip_info[$RVModel::ID]), $up);
if (!$save_result) {
$res = array('status' => 0, 'msg' => '积分修改失败,请联系商家');
return $res;
}
// 添加积分记录
$RIOModel = D('RetailIntegralOrder');
$cr = array(
$RIOModel::VID => $vip_info[$RVModel::ID],
$RIOModel::TYPE => $type,
$RIOModel::INTEGRAL => $integral,
$RIOModel::ADD_TIME => time(),
$RIOModel::STORE_ID => $store_id,
$RIOModel::BILL_ID => $bill_id,
$RIOModel::REMARK => $remake
);
$add_result = $RIOModel->addOrder($cr);
if ($add_result) {
$res = array('status' => 1, 'msg' => '记录添加成功');
} else {
$res = array('status' => 0, 'msg' => '记录添加失败');
}
return $res;
}
/**
* 会员退款
* @param $payOrder pay_order
* @param $scene_type 场景 1收银机 2商户后台 3门店后台 4小程序 5公众号
* @param $type 类型 1充值 2消费 3编辑增加 4编辑减少 5退款增加 6红包充值 7大转盘充值 8礼品卡充值
* @return mixed
*/
public function refundForVip_v1($payOrder, $scene_type, $type)
{
$VipModel = D('RetailVip');
$PayOrderModel = D('RetailPayOrder');
$setInc = $VipModel->toSetInc(array($VipModel::ID => $payOrder[$PayOrderModel::VID]), $VipModel::BALANCE, $payOrder[$PayOrderModel::TRADE_AMOUNT]);
if ($setInc) {
$RechargeOrderModel = D('RetailRechargeOrder');
$item[$RechargeOrderModel::STORE_ID] = $payOrder[$PayOrderModel::STORE_ID];
$item[$RechargeOrderModel::MERCHANT_ID] = $payOrder[$PayOrderModel::MERCHANT_ID];
$item[$RechargeOrderModel::BILL_ID] = $payOrder[$PayOrderModel::BILL_ID];
$item[$RechargeOrderModel::PAY_ORDER_ID] = $payOrder[$PayOrderModel::ID];
$item[$RechargeOrderModel::CASHIER_ID] = $payOrder[$PayOrderModel::CASHIER_ID];
$item[$RechargeOrderModel::MONEY] = $payOrder[$PayOrderModel::TRADE_AMOUNT];
$item[$RechargeOrderModel::ALL_MONEY] = $payOrder[$PayOrderModel::TRADE_AMOUNT];
$item[$RechargeOrderModel::STATE] = 1;
$item[$RechargeOrderModel::TYPE] = $type;
$item[$RechargeOrderModel::SCENE_TYPE] = $scene_type;
$item[$RechargeOrderModel::ADD_TIME] = time();
$item[$RechargeOrderModel::VID] = $payOrder[$PayOrderModel::VID];
$payMoney = $payOrder[$PayOrderModel::TRADE_AMOUNT];
switch ($scene_type) {
case 1:
$remark = '线下余额退款' . $payMoney . '元';
break;
case 2:
$remark = '商户后台余额退款' . $payMoney . '元';
break;
case 3:
$remark = '门店后台余额退款' . $payMoney . '元';
break;
case 4:
$remark = '小程序订单余额退款' . $payMoney . '元';
break;
case 5:
$remark = '公众号余额退款' . $payMoney . '元';
break;
case 6:
$remark = '小助手快捷收银退款' . $payMoney . '元';
break;
}
$item[$RechargeOrderModel::REMARK] = $remark;
$add = $RechargeOrderModel->addOrder($item);
if ($add) {
$result['status'] = 1;
$result['msg'] = '退款成功';
} else {
$result['status'] = 0;
$result['msg'] = '退款成功,添加记录失败,请联系系统管理员';
}
} else {
$result['status'] = 0;
$result['msg'] = '会员退款失败';
}
return $result;
}
}