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); } }