文件
mashangyoujiu/Application/SmallProgramApi/Controller/RechargeController.class.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);
}
}