358 行
15 KiB
PHP
可执行文件
358 行
15 KiB
PHP
可执行文件
<?php
|
|
|
|
namespace SmallProgramApi\Controller;
|
|
|
|
use Common\Model\InstallAccountModel;
|
|
use Common\Model\RetailMerchantModel;
|
|
|
|
//[1.8.45]
|
|
class RechargeController extends BaseController
|
|
{
|
|
/**
|
|
* 判断门店id
|
|
*/
|
|
public function _initialize()
|
|
{
|
|
parent::_initialize();
|
|
if (!self::$store_id || self::$store_id == 0) {
|
|
$res = array('status' => 0, 'msg' => '缺少必要的store_id参数');
|
|
$this->ajaxReturn($res);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取充值活动,用户信息
|
|
* @param array $res
|
|
*/
|
|
public function getRechargeList()
|
|
{
|
|
// 判断会员
|
|
$vip = $this->getVipInfo();
|
|
$plus_day = 0;
|
|
if ($vip) { // 会员
|
|
$vip_type = A('PayApi/Recharge')->getVipType($vip['vid']);
|
|
$RetailVipIntegralModel = D('RetailVipIntegral');
|
|
$grade = $RetailVipIntegralModel->getVipGradeInfo(self::$merchant_id, $vip['grade_integral']);
|
|
$vip['grade_name'] = $grade['grade_name'] ? $grade['grade_name'] : '常规会员';
|
|
$PlusVipModel = D('RetailPlusVip');
|
|
$end_time = $PlusVipModel->getFindField(array($PlusVipModel::VIP_ID => self::$user['vid']), $PlusVipModel::END_TIME);
|
|
$time = time();
|
|
if ($end_time > $time) {
|
|
$plus_day = newDate('Y-m-d', $end_time);
|
|
} else {
|
|
$plus_day = 0;
|
|
}
|
|
} else { // 非会员
|
|
$vip_type = 1;
|
|
}
|
|
// 获取充值活动
|
|
$VipRechargeModel = D('RetailVipRecharge'); // 活动表模型
|
|
$recharge_activity = $VipRechargeModel->getRechargeActivity(self::$merchant_id, self::$store_id, $vip['vid'], $vip_type, 1);
|
|
$MerchantModel = D('RetailMerchant'); // 商户表模型
|
|
// 返回参数
|
|
$res = array(
|
|
'status' => 1,
|
|
'plus_day' => $plus_day,
|
|
'user_info' => self::$user,
|
|
'vip_info' => $vip,
|
|
'vip_type' => $vip_type,
|
|
'recharge_activity' => $recharge_activity,
|
|
'custom_recharge' => self::$merchant[$MerchantModel::CUSTOM_RECHARGE_STATE] ? self::$merchant[$MerchantModel::CUSTOM_RECHARGE_STATE] : 1, // 自定义充值 1.开启 2.关闭
|
|
);
|
|
$this->ajaxReturn($res);
|
|
}
|
|
|
|
/**
|
|
* 充值下单
|
|
* @param int $recharge_id
|
|
* @param string $money
|
|
* @return array $res
|
|
*/
|
|
public function placeOrder()
|
|
{
|
|
if (empty(self::$uid)) {
|
|
$res['status'] = -1;
|
|
$res['msg'] = '用户未登录';
|
|
$this->ajaxReturn($res);
|
|
}
|
|
// 判断会员
|
|
$vip_info = $this->getVipInfo();
|
|
if (!$vip_info) {
|
|
$res = array('status' => 0, 'msg' => '请先绑定会员卡');
|
|
$this->ajaxReturn($res);
|
|
}
|
|
// 接受参数
|
|
$recharge_id = I('post.recharge_id');
|
|
$money = I('post.money');
|
|
$time = time();
|
|
$RROModel = D('RetailRechargeOrder');
|
|
$MerchantModel = new RetailMerchantModel();
|
|
$InstallAccountModel = new InstallAccountModel();
|
|
// 判断参数
|
|
if ($recharge_id && $recharge_id != 0) { // 充值活动
|
|
// 充值活动查询条件
|
|
$RVRModel = D('RetailVipRecharge');
|
|
$map2 = array(
|
|
$RVRModel::ID => $recharge_id,
|
|
$RVRModel::MERCHANT_ID => self::$merchant_id,
|
|
$RVRModel::STORE_ID => self::$store_id,
|
|
$RVRModel::STATUS => 1,
|
|
$RVRModel::STATE => 1,
|
|
$RVRModel::ONLINE_STATE => 1,
|
|
$RVRModel::SURPLUS => array(array('eq', '-1'), array('gt', 0), 'or'),
|
|
$RVRModel::START_TIME => array(array('eq', ''), array('lt', $time), 'or'),
|
|
$RVRModel::END_TIME => array(array('eq', ''), array('gt', $time), 'or'),
|
|
);
|
|
$field = array($RVRModel::ID, $RVRModel::RECHARGE_MONEY, $RVRModel::GIVE_MONEY, $RVRModel::SURPLUS, $RVRModel::LIMIT_NUM, $RVRModel::AGING_REPAY, $RVRModel::AGING_TIME);
|
|
// 查询充值活动
|
|
$recharge_activity = $RVRModel->getFind($map2, $field);
|
|
if (!$recharge_activity) {
|
|
$res = array('status' => 0, 'msg' => '未查询到该充值活动');
|
|
$this->ajaxReturn($res);
|
|
}
|
|
// 判断充值活动剩余库存
|
|
if ($recharge_activity[$RVRModel::SURPLUS] <= 0 && $recharge_activity[$RVRModel::SURPLUS != -1]) {
|
|
$res = array('status' => 0, 'msg' => '剩余数量不足');
|
|
$this->ajaxReturn($res);
|
|
}
|
|
// 获取会有充值次数
|
|
if ($recharge_activity[$RVRModel::LIMIT_NUM] && $recharge_activity[$RVRModel::LIMIT_NUM] > 0) {
|
|
$map3 = array(
|
|
$RROModel::MERCHANT_ID => self::$merchant_id,
|
|
$RROModel::STORE_ID => self::$store_id,
|
|
$RROModel::VID => $vip_info['id'],
|
|
$RROModel::STATUS => 1,
|
|
$RROModel::VIP_RECHARGE_ID => $recharge_id,
|
|
);
|
|
$recharge_count = $RROModel->getCount($map3);
|
|
// 判断会员充值次数
|
|
if ($recharge_count && $recharge_count >= $recharge_activity[$RVRModel::LIMIT_NUM]) {
|
|
$res = array('status' => 0, 'msg' => '达到充值次数限制');
|
|
$this->ajaxReturn($res);
|
|
}
|
|
}
|
|
// 充值金额、赠送金额
|
|
$recharge_money = $recharge_activity[$RVRModel::RECHARGE_MONEY];
|
|
$give_money = $recharge_activity[$RVRModel::GIVE_MONEY];
|
|
} else { // 自定义充值
|
|
// 判断金额
|
|
if (!$money) {
|
|
$res = array('status' => 0, 'msg' => '请输入充值金额');
|
|
$this->ajaxReturn($res);
|
|
}
|
|
$recharge_money = $money;
|
|
// 判断是否自动读取活动赠送金额
|
|
$RMModel = D('RetailMerchant');
|
|
$RVModel = D('RetailVipRecharge');
|
|
if (!self::$merchant[$RMModel::AUTO_USE_GRADE] || self::$merchant[$RMModel::AUTO_USE_GRADE] == 1) {
|
|
// 获取做大充值金额
|
|
$recharge_activity = $RVModel->getMaxGiveMoney(self::$merchant_id, self::$store_id, $money, 1, $vip_info['user_type']);
|
|
$give_money = $recharge_activity['give_money'] ? $recharge_activity['give_money'] : 0;
|
|
$recharge_id = $recharge_activity['id'] ?: 0;
|
|
} else {
|
|
$give_money = 0;
|
|
}
|
|
}
|
|
$RPSModel = D('RetailPaySet'); // 支付设置模型
|
|
$RPOModel = D('RetailPayOrder');
|
|
$config_result = $RPSModel->getFindMerchantConfig(self::$merchant_id, 3);
|
|
if ($config_result['status'] != 1) {
|
|
$res = array('status' => 0, 'msg' => $config_result['msg'] ? $config_result['msg'] : '暂无可用的支付模式');
|
|
$this->ajaxReturn($res);
|
|
}
|
|
|
|
// 获取商户充值设置
|
|
$map = array(
|
|
$MerchantModel::ID => self::$merchant_id,
|
|
$MerchantModel::STATUS => 1
|
|
);
|
|
$field = array($MerchantModel::AGING_CYCLE, $MerchantModel::AGING_REPAY, $MerchantModel::AGING_TIME);
|
|
$setting = $MerchantModel->getFind($map, $field);
|
|
|
|
$cr[$RPOModel::M_PAY_TYPE] = $config_result['m_pay_type'];
|
|
$cr[$RPOModel::PAY_TYPE] = 4;
|
|
$cr[$RPOModel::ORDER_TYPE] = 2;
|
|
$cr[$RPOModel::STORE_ID] = self::$store_id;
|
|
$cr[$RPOModel::TRADE_AMOUNT] = $recharge_money;
|
|
$cr[$RPOModel::ADD_TIME] = $time;
|
|
$cr[$RPOModel::ORDER_STATE] = 'WAIT_BUYER_PAY';
|
|
$cr[$RPOModel::VID] = $vip_info['vid'];
|
|
$cr[$RPOModel::MERCHANT_ID] = self::$merchant_id;
|
|
|
|
$add_result = $RPOModel->addPayOrder($cr);
|
|
if (!$add_result) {
|
|
$res = array('status' => 0, 'msg' => '下单失败');
|
|
$this->ajaxReturn($res);
|
|
}
|
|
|
|
// 创建充值订单(余额记录)
|
|
$cr2 = array(
|
|
$RROModel::MERCHANT_ID => self::$merchant_id,
|
|
$RROModel::STORE_ID => self::$store_id,
|
|
$RROModel::VID => $vip_info['vid'],
|
|
$RROModel::STATUS => 0,
|
|
$RROModel::PAY_ORDER_ID => $add_result[$RPOModel::ID],
|
|
$RROModel::MONEY => $recharge_money,
|
|
$RROModel::USER_TYPE => 0,
|
|
$RROModel::VIP_RECHARGE_ID => $recharge_id ? $recharge_id : 0,
|
|
$RROModel::SCENE_TYPE => 4,
|
|
$RROModel::TYPE => 1,
|
|
$RROModel::PAY_TYPE => 2,
|
|
$RROModel::ADD_TIME => $time,
|
|
$RROModel::STATE => 1,
|
|
'give_money' => $give_money
|
|
);
|
|
|
|
if ($setting['aging_repay'] == 1 && $recharge_activity['aging_repay'] == 1) {
|
|
$cr2[$RROModel::REMARK] = '小程序充值' . $recharge_money . '元获得' . $recharge_money . '元,剩余' . $give_money . '分期到账';
|
|
$cr2[$RROModel::ALL_MONEY] = $recharge_money;
|
|
$cr2['repay_name'] = 1;
|
|
} else {
|
|
$cr2[$RROModel::REMARK] = '小程序充值' . $recharge_money . '元获得' . ($recharge_money + $give_money) . '元';
|
|
$cr2[$RROModel::ALL_MONEY] = $recharge_money + $give_money;
|
|
}
|
|
|
|
$add_result2 = $RROModel->addOrder($cr2);
|
|
if (!$add_result2) {
|
|
$res = array('status' => 0, 'msg' => '下单失败');
|
|
$this->ajaxReturn($res);
|
|
}
|
|
|
|
//分期到账
|
|
if ($setting['aging_repay'] == 1 && $recharge_activity['aging_repay'] == 1) {
|
|
$order_data = $RPOModel->getFind(array('id' => $add_result[$RPOModel::ID]));
|
|
$accountData = array(
|
|
'vip_id' => $order_data['vid'],
|
|
'merchant_id' => self::$merchant_id,
|
|
'store_id' => self::$store_id,
|
|
'aging_money' => $give_money,
|
|
'order_id' => $add_result2,
|
|
'aging_date' => date("Y-m-d", intval(time())),
|
|
'aging_cycle' => $setting['aging_cycle'], //设置->分期到账间隔时间
|
|
'aging_repay' => $setting['aging_repay'], //设置->分期到账是否开启
|
|
'aging_time' => $setting['aging_time'], //设置->分期到账间隔
|
|
'active_aging_repay' => $recharge_activity['aging_repay'], //活动->分期到账是否开启
|
|
'active_aging_time' => $recharge_activity['aging_time'], //活动->分几期到账
|
|
);
|
|
|
|
$InstallAccountModel->waitUpgradeAccount($accountData);
|
|
}
|
|
|
|
$notify_url = $this->REQUEST_URL . '/index.php/SmallProgramApi/WxPay/recharge_notify_url';
|
|
$notify_func = 'PayApi/Recharge/updateOrder';
|
|
$wei_xin_result = A('SmallProgramApi/Pay')->getWxPayData_v1($add_result, $notify_url, $notify_func);
|
|
|
|
if ($wei_xin_result['status'] == 0) {
|
|
$this->ajaxReturn($wei_xin_result);
|
|
}
|
|
|
|
//分期到账设置
|
|
$cycle = $setting['aging_cycle'] == 0 ? '天' : '月';
|
|
$aging_repay_name = $recharge_activity['aging_repay'] == 1 ? '分期到账' : '直接到账';
|
|
$install_account = array(
|
|
'aging_repay' => $setting['aging_repay'],
|
|
'aging_cycle' => $cycle,
|
|
'aging_time' => $setting['aging_time'],
|
|
'active_aging_repay' => $aging_repay_name,
|
|
'active_aging_time' => $recharge_activity['aging_time'],
|
|
);
|
|
$install_account = $recharge_activity['aging_repay'] == 1 ? $install_account : '';
|
|
|
|
$res = array('status' => 1, 'order_id' => $add_result2, 'pay_data' => $wei_xin_result, 'install_data' => $install_account);
|
|
$this->ajaxReturn($res);
|
|
}
|
|
|
|
/**
|
|
* 回调查询充值订单
|
|
* @param int $order_id 充值订单id
|
|
* @return array $res
|
|
*/
|
|
public function queryOrder()
|
|
{
|
|
// 接受数据
|
|
$order_id = I('post.order_id');
|
|
if (!$order_id) {
|
|
$res = array('status' => 0, 'msg' => '参数缺失');
|
|
$this->ajaxReturn($res);
|
|
}
|
|
// 查询订单
|
|
$RROModel = D('RetailRechargeOrder');
|
|
$map = array(
|
|
$RROModel::MERCHANT_ID => self::$merchant_id,
|
|
$RROModel::STORE_ID => self::$store_id,
|
|
$RROModel::ID => $order_id,
|
|
$RROModel::STATUS => 1
|
|
);
|
|
$find = $RROModel->getFind($map);
|
|
if ($find) {
|
|
$res = array('status' => 1, 'msg' => '充值成功');
|
|
} else {
|
|
$res = array('status' => 0, 'msg' => '正在充值');
|
|
}
|
|
$this->ajaxReturn($res);
|
|
}
|
|
|
|
/**
|
|
* PLUS购买记录
|
|
*/
|
|
public function plusBuyRecord()
|
|
{
|
|
$PlusVipModel = D('RetailPlusVip');
|
|
$PlusRecord = D('RetailPlusRecord');
|
|
// 接受数据
|
|
$vip_id = I('post.vid');
|
|
$page = I('post.page') ?: 1;
|
|
|
|
if (!$vip_id || !$page) {
|
|
$result = array('status' => 0, 'msg' => '参数缺失');
|
|
$this->ajaxReturn($result);
|
|
}
|
|
$plus_id = $PlusVipModel->getFindField(array($PlusVipModel::VIP_ID => $vip_id, 'state' => 1), 'id');
|
|
if (!$plus_id) {
|
|
$result = array('status' => 0, 'msg' => '当前用户不是PLUS会员!');
|
|
$this->ajaxReturn($result);
|
|
}
|
|
// 查询符合条件订单
|
|
$map = array(
|
|
$PlusRecord::MERCHANT_ID => self::$merchant_id,
|
|
$PlusRecord::VIP_ID => $vip_id,
|
|
$PlusRecord::PAY_STATE => 1,
|
|
);
|
|
$limit = 20;
|
|
$data = $PlusRecord->getSelect($map, 'time,type,addtime,money', 'id desc', "{$page},{$limit}");
|
|
|
|
foreach ($data as $key => &$value) {
|
|
$value['addtime'] = date('Y-m-d H:i:s', $value['addtime']);
|
|
switch ($value['type']) {
|
|
case 1:
|
|
$value['type_name'] = '购买套餐';
|
|
break;
|
|
case 2:
|
|
$value['type_name'] = '套餐续费';
|
|
break;
|
|
case 3:
|
|
$value['type_name'] = '充值';
|
|
break;
|
|
case 4:
|
|
$value['type_name'] = '充值续费';
|
|
break;
|
|
case 5:
|
|
$value['type_name'] = '购买商品';
|
|
break;
|
|
case 6:
|
|
$value['type_name'] = '购买商品套餐';
|
|
break;
|
|
default:
|
|
$value['type_name'] = '未知类型';
|
|
}
|
|
}
|
|
|
|
if ($data) {
|
|
$result = array('status' => 1, 'msg' => '数据获取成功!', 'data' => $data, 'limit' => $limit);
|
|
} else {
|
|
$result = array('status' => 0, 'msg' => '暂无PLUS购买记录!');
|
|
}
|
|
$this->ajaxReturn($result);
|
|
}
|
|
}
|