0, 'msg' => '参数缺失'); $this->ajaxReturn($res); } // 判断会员 $map = array( $VipModel::ID => $vip_id, $VipModel::MERCHANT_ID => self::$merchant_id, $VipModel::STATUS => 1, ); // 获取会员信息 $vip_info = $VipModel->getFind($map); if (!$vip_info) { $res = array('status' => 0, 'msg' => '会员查询失败'); $this->ajaxReturn($res); } // 处理支付类型 switch ($pay_type) { case 1: // 现金 // 充值人员类型 if ($user_type == 1) { // 收银员 // 判断充值权限码 if (self::$cashier[$CashierModel::RECHARGE_STATE] != 2) { $res = array('status' => 0, 'msg' => '您无充值权限'); $this->ajaxReturn($res); } if (!$recharge_code || $recharge_code != self::$cashier[$CashierModel::RECHARGE_CODE]) { $res = array('status' => 0, 'msg' => '请输入正确的权限码'); $this->ajaxReturn($res); } } else if ($user_type == 2) { // 店长 // 店长账号、密码 if (!$manager_number || !$manager_pass) { $res = array('status' => 0, 'msg' => '请填写店长账号或密码后在提交'); $this->ajaxReturn($res); } // 查询店长 $manager = $ManagerModel->getFind(array($ManagerModel::MERCHANT_ID => self::$merchant_id, $ManagerModel::STORE_ID => self::$store_id, $ManagerModel::STATUS => 1, $ManagerModel::MOBILE => $manager_number)); if (!$manager) { $res = array('status' => 0, 'msg' => '暂无此店长,请先添加'); $this->ajaxReturn($res); } // 判断密码 $encryption_pass = $cryptoModel->encrypt($manager_pass, date('YmdHis', $manager[$ManagerModel::ADD_TIME])); if ($encryption_pass != $manager[$ManagerModel::PASSWORD]) { $res = array('status' => 0, 'msg' => '密码错误'); $this->ajaxReturn($res); } } else { // 未知 $res = array('status' => 0, 'msg' => '未知的操作人员'); $this->ajaxReturn($res); } $cr[$PayOrderModel::PAY_TYPE] = 3; $cr2[$RechargeOrderModel::PAY_TYPE] = 1; break; case 2: // 在线 // 接收支付码 if (!$pay_code || strlen($pay_code) != 18) { $res = array('status' => 0, 'msg' => '请扫描正确的付款码'); $this->ajaxReturn($res); } // 处理支付码 $num = substr($pay_code, 0, 2); // 截取付款码前两位 if ($num >= 25 && $num <= 30) { //支付宝付款码支付 $cr[$PayOrderModel::PAY_TYPE] = 2; $cr2[$RechargeOrderModel::PAY_TYPE] = 3; } else if ($num >= 10 && $num <= 15) { //微信的付款码支付 $cr[$PayOrderModel::PAY_TYPE] = 1; $cr2[$RechargeOrderModel::PAY_TYPE] = 2; } else { $res = array('status' => 0, 'msg' => '请扫描正确的付款码'); $this->ajaxReturn($res); } $cr['code'] = $pay_code; break; case 3: // 刷脸 // 判断刷脸码 if (!$face_token) { $res = array('status' => 0, 'msg' => '刷脸支付失败'); $this->ajaxReturn($res); } // 判断刷脸支付码 $ids = $PayOrderModel->getFindField(array($PayOrderModel::STORE_ID => self::$store_id, $PayOrderModel::FACE_TOKEN => $face_token), array($PayOrderModel::ID), true); if ($ids) { $res = array('status' => 0, 'msg' => '请重新扫描'); $this->ajaxReturn($res); } // 判断支付模式,获取支付配置 $cr[$PayOrderModel::PAY_TYPE] = 2; $cr[$PayOrderModel::FACE_TOKEN] = $face_token; $cr2[$RechargeOrderModel::PAY_TYPE] = 3; break; default: $res = array('status' => 0, 'msg' => '未知的支付类型'); $this->ajaxReturn($res); } // 判断是否为充值活动 if ($recharge_id && $recharge_id != 0) { // 充值活动查询条件 $map2 = array( $VipRechargeModel::ID => $recharge_id, $VipRechargeModel::MERCHANT_ID => self::$merchant_id, $VipRechargeModel::STORE_ID => self::$store_id, $VipRechargeModel::STATUS => 1, $VipRechargeModel::STATE => 1, $VipRechargeModel::LINE_STATE => 1, $VipRechargeModel::SURPLUS => array(array('gt', 0), array('eq', -1), 'or'), $VipRechargeModel::START_TIME => array(array('eq', ''), array('lt', $time), 'or'), $VipRechargeModel::END_TIME => array(array('eq', ''), array('gt', $time), 'or') ); $field = array($VipRechargeModel::ID, $VipRechargeModel::RECHARGE_MONEY, $VipRechargeModel::GIVE_MONEY, $VipRechargeModel::SURPLUS, $VipRechargeModel::LIMIT_NUM, $VipRechargeModel::AGING_REPAY, $VipRechargeModel::AGING_TIME); // 查询充值活动 $recharge_activity = $VipRechargeModel->getFind($map2, $field); if (!$recharge_activity) { $res = array('status' => 0, 'msg' => '未查询到该充值活动'); $this->ajaxReturn($res); } // 判断充值活动剩余库存 if ($recharge_activity[$VipRechargeModel::SURPLUS] <= 0 && $recharge_activity[$VipRechargeModel::SURPLUS != -1]) { $res = array('status' => 0, 'msg' => '剩余数量不足'); $this->ajaxReturn($res); } // 获取会有充值次数 if ($recharge_activity[$VipRechargeModel::LIMIT_NUM] && $recharge_activity[$VipRechargeModel::LIMIT_NUM] > 0) { $map3 = array( $RechargeOrderModel::MERCHANT_ID => self::$merchant_id, $RechargeOrderModel::STORE_ID => self::$store_id, $RechargeOrderModel::VID => $vip_id, $RechargeOrderModel::STATUS => 1, $RechargeOrderModel::VIP_RECHARGE_ID => $recharge_activity[$VipRechargeModel::ID], ); $recharge_count = $RechargeOrderModel->getCount($map3); // 判断会员充值次数 if ($recharge_count && intval($recharge_count) >= $recharge_activity[$VipRechargeModel::LIMIT_NUM]) { $res = array('status' => 0, 'msg' => '该会员已达到充值次数限制'); $this->ajaxReturn($res); } } // 充值金额、赠送金额 $recharge_money = $recharge_activity[$VipRechargeModel::RECHARGE_MONEY]; $give_money = $recharge_activity[$VipRechargeModel::GIVE_MONEY]; } else { // 判断自定义充值金额 if (!verifyPrice($recharge_money)) { $res = array('status' => 0, 'msg' => '请输入正确的充值金额'); $this->ajaxReturn($res); } // 判断门店自定义充值权限 if (self::$merchant[$MerchantModel::CUSTOM_RECHARGE_STATE] && self::$merchant[$MerchantModel::CUSTOM_RECHARGE_STATE] == 2) { $res = array('status' => 0, 'msg' => '暂无自定义充值权限'); $this->ajaxReturn($res); } // 判断赠送金额 if ($give_money) { // 判断收银员赠送权限 if (!self::$cashier[$CashierModel::CUSTOM_RECHARGE_STATE] || self::$cashier[$CashierModel::CUSTOM_RECHARGE_STATE] == 1) { $res = array('status' => 0, 'msg' => '暂无赠送权限'); $this->ajaxReturn($res); } // 处理金额 if (!verifyNumber($give_money, 2, 0.01, 1000000000)) { $res = array('status' => 0, 'msg' => '请输入正确的赠送金额'); $this->ajaxReturn($res); } } else { // 判断是否自动读取活动赠送金额 if (!self::$merchant[$MerchantModel::AUTO_USE_GRADE] || self::$merchant[$MerchantModel::AUTO_USE_GRADE] == 1) { // 获取做大充值金额 $recharge_activity = $VipRechargeModel->getMaxGiveMoney(self::$merchant_id, self::$store_id, $recharge_money, 0, $vip_info[$VipModel::PLUS_TYPE]); $give_money = $recharge_activity['give_money'] ?: 0; $recharge_id = $recharge_activity['id'] ? $recharge_activity['id'] : 0; } else { $give_money = 0; } } } // 微信、支付宝获取支付模式 if ($cr[$PayOrderModel::PAY_TYPE] == 1 || $cr[$PayOrderModel::PAY_TYPE] == 2) { $result = $PaySetModel->getFindMerchantConfig(self::$merchant_id, $cr[$PayOrderModel::PAY_TYPE]); if ($result['status'] != 1) { $res = array('status' => 0, 'msg' => $result['msg'] ? $result['msg'] : '暂无可用的支付模式'); $this->ajaxReturn($res); } $config = $result['config']; $config['body'] = self::$merchant[$CashierModel::NAME] . '-' . self::$store[$StoreModel::STORE_NAME]; $cr['m_pay_type'] = $result['m_pay_type']; } // 创建订单 $cr[$PayOrderModel::ORDER_TYPE] = 2; $cr[$PayOrderModel::STORE_ID] = self::$store_id; $cr[$PayOrderModel::TRADE_AMOUNT] = $recharge_money; $cr[$PayOrderModel::ADD_TIME] = $time; $cr[$PayOrderModel::ORDER_STATE] = 'WAIT_BUYER_PAY'; $cr[$PayOrderModel::VID] = $vip_id; $cr[$PayOrderModel::CASHIER_ID] = self::$cashier_id; $cr[$PayOrderModel::MERCHANT_ID] = self::$merchant_id; $add_result = $PayOrderModel->addPayOrder($cr); // 获取商户充值设置 $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); if (!$add_result) { $res = array('status' => 0, 'msg' => '订单创建失败'); $this->ajaxReturn($res); } // 创建充值订单(余额记录) $cr2[$RechargeOrderModel::MERCHANT_ID] = self::$merchant_id; $cr2[$RechargeOrderModel::STORE_ID] = self::$store_id; $cr2[$RechargeOrderModel::VID] = $vip_id; $cr2[$RechargeOrderModel::STATUS] = 0; $cr2[$RechargeOrderModel::PAY_ORDER_ID] = $add_result[$PayOrderModel::ID]; $cr2[$RechargeOrderModel::MONEY] = $recharge_money; $cr2['give_money'] = $give_money; if ($setting['aging_repay'] == 1 && $recharge_activity['aging_repay'] == 1) { $cr2[$RechargeOrderModel::ALL_MONEY] = $recharge_money; $cr2['repay_name'] = 1; $cr2[$RechargeOrderModel::REMARK] = '收银机充值' . $recharge_money . '元获得' . $recharge_money . '元,剩余' . $give_money . '分期到账'; } else { $cr2[$RechargeOrderModel::ALL_MONEY] = $recharge_money + $give_money; $cr2[$RechargeOrderModel::REMARK] = '收银机充值' . $recharge_money . '元获得' . ($recharge_money + $give_money) . '元'; } $cr2[$RechargeOrderModel::USER_TYPE] = $user_type == 1 ? 3 : 2; $cr2[$RechargeOrderModel::CASHIER_ID] = $user_type == 1 ? self::$cashier_id : $manager[$ManagerModel::ID]; $cr2[$RechargeOrderModel::VIP_RECHARGE_ID] = $recharge_id ? $recharge_id : 0; $cr2[$RechargeOrderModel::SCENE_TYPE] = 1; $cr2[$RechargeOrderModel::TYPE] = 1; $cr2[$RechargeOrderModel::ADD_TIME] = $time; $cr2[$RechargeOrderModel::STATE] = 1; $add_result2 = $RechargeOrderModel->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 = $PayOrderModel->getFind(array('id' => $add_result[$PayOrderModel::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); } if ($pay_type == 1) { // 现金 $up = array( $PayOrderModel::ORDER_STATE => 'SUCCESS', $PayOrderModel::TRADE_DATE => $time, ); $save = $PayOrderModel->updateOrder(array($PayOrderModel::ID => $add_result[$PayOrderModel::ID]), $up); if (!$save) { $res = array('status' => 0, 'msg' => '现金收款失败'); $this->ajaxReturn($res); } } else { // 在线支付 if ($cr['m_pay_type'] == 3) { //新大陆支付 $pay_result = A('Pay/PayContinent')->toContinentPay_v3($add_result, $config['body']); } elseif ($cr[$PayOrderModel::M_PAY_TYPE] == 4) { //新大陆支付 $payObj = new CloudPayController(); $pay_result = $payObj->soltCard($add_result, $config, $cr[$PayOrderModel::PAY_TYPE]); } elseif ($cr[$PayOrderModel::M_PAY_TYPE] == 7) { //钱客云支付 $moneyGuest = new \Terminalapi\Controller\BaseController(); //支付,查询 $pay_result = $moneyGuest->paymentQuery($add_result, $config, $cr[$PayOrderModel::PAY_TYPE]); } else { if ($cr[$PayOrderModel::PAY_TYPE] == 1) { //微信 $pay_result = A('Pay/NewWxPay')->toWxPay_v2($add_result, $config); } else if ($cr[$PayOrderModel::PAY_TYPE] == 2) { //支付宝 $pay_result = A('Pay/NewAliPay')->toAliPay_v2($add_result, $config); } else { $res = array('status' => 0, 'msg' => '未知的支付类型'); $this->ajaxReturn($res); } } if ($pay_result['status'] == 0) { $this->ajaxReturn($pay_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'], ); // 更新余额记录信息 $res = A('PayApi/Recharge')->updateOrder($add_result); $res['order_id'] = $add_result[$PayOrderModel::ID]; // 返回订单号(打印小票) $res['install_data'] = $recharge_activity['aging_repay'] == 1 ? $install_account : ''; // 返回分期到账设置 // 判断 if ($res['status'] == 1) { // wifi打印 A('PayApi/Printer')->rechargeWifiPrint([ 'cashier_name' => self::$cashier['name'], 'store_name' => self::$store['storetag'], 'order_id' => $add_result[$PayOrderModel::ID], 'store_id' => self::$store_id, ]); } $this->ajaxReturn($res); } /** * 打印充值订单 * @param int $order_id pay_order订单id * @param array $res */ public function printRechargeOrder() { // 接受数据 $order_id = I('post.order_id'); if (!$order_id) { $res = array('status' => 0, 'msg' => '参数缺失'); $this->ajaxReturn($res); } $res = A('PayApi/Printer')->getPrintInfo([ 'cashier_name' => self::$cashier['name'], 'store_name' => self::$store['storetag'], 'order_id' => $order_id, 'store_id' => self::$store_id, ]); $this->ajaxReturn($res); } /** * */ public function rechargeList() { $merchant_id = self::$merchant_id; $store_id = self::$store_id; $cashier_id = self::$cashier_id; if (IS_POST) { $id = I('post.id'); $page = I('post.page'); $limit = I('post.limit'); $RechargeRefundController = new RechargeRefundController(); $res = $RechargeRefundController->rechargeList($id, $merchant_id, $store_id, $cashier_id, 3, $page, $limit); } else { $res['status'] = 0; $res['msg'] = '数据出错'; } $this->ajaxReturn($res); } /** * 会员余额退款 */ public function refundMoney() { $merchant_id = self::$merchant_id; if (IS_POST) { $id = I('post.id'); $res = A('Api/RechargeRefund')->refundMoney($merchant_id, $id, 1); } else { $res['status'] = 0; $res['msg'] = '数据出错'; } $this->ajaxReturn($res); } /** * 会员余额退款 * user_type 1 收银员退款 2店长退款 * refund_code 收银员退款码与店长密码 * username 店长账号 */ public function refundMoney_v1() { $merchant_id = self::$merchant_id; if (IS_POST) { $id = I('post.id'); $user_type = I('post.user_type'); $refund_code = I('post.refund_code'); $username = I('post.username'); $res = A('CashierApi/Refund')->verifyRefund($user_type, $refund_code, $username); if ($res['status'] == 1) { $res = A('Api/RechargeRefund')->refundMoney($merchant_id, $id, 1); } } else { $res['status'] = 0; $res['msg'] = '数据出错'; } $this->ajaxReturn($res); } /* * 会员充值 2020-10-22 */ public function vipRecharge_v1() { $data = I('post.'); $data['merchant_id'] = self::$merchant_id; $data['store_id'] = self::$store_id; $data['cashier_id'] = self::$cashier_id; $data['merchantInfo'] = self::$merchant; $data['storeInfo'] = self::$store; $data['cashierInfo'] = self::$cashier; $data['scene_type'] = 1; //收银机充值 $RechargeClass = new VipRecharge(); $result = $RechargeClass->placeRechargeOrder($data); $this->ajaxReturn($result); } /** * 查询支付订单 */ public function payQueryOrder() { $data = I('post.'); $data['merchant_id'] = self::$merchant_id; $data['store_id'] = self::$store_id; $data['cashier_id'] = self::$cashier_id; $QueryClass = new QueryPayOrder(); $result = $QueryClass->rechargeQueryOrder($data); $this->ajaxReturn($result); } }