public function join() { $join_id = I('join_id'); $join = M('job_join')->find($join_id) or $this->error('找不到此兼职参与信息!'); $payModel = new \Job\Model\PayModel(); $pay_money = $payModel->joinMoney($join_id); $pay_money === false && $this->error($payModel->getError()); if ($pay_money <= 0) { $this->error('此兼职不需要缴纳费用!'); } if (M('job_pay')->where(['type' => 2, 'job_id' => $join['job_id'], 'join_id' => $join['id'], 'is_paid' => 1, 'is_closed' => 0])->count() > 0) { $this->error('存在未结算记录,禁止重复支付!'); } $title = '支付兼职诚意金'; $trade_no = date('YmdHis') . str_pad(mt_rand(0, 9999), 4, '0', STR_PAD_LEFT); $remark = ''; $user = get_user(); $op_uid = $user ? $user['uid'] : 0; M('job_pay')->add(['trade_no' => $trade_no, 'type' => 2, 'created' => time(), 'job_id' => $join['job_id'], 'join_id' => $join['id'], 'money_guaranty' => $pay_money, 'remark' => $remark, 'uid' => $op_uid]); // 跳转到钱包支付页面(支付成功,目前由钱包产品直接调用兼职的PayModel $return_url = U('/job/user_my_join/@mobile'); $this->_wallet($join['uid'], $trade_no, $pay_money, $title, $remark, $return_url); }
public function checkout() { $id = I('id', 0, 'intval'); $money_student = I('money_student', 0, 'float'); $money_company = I('money_company', 0, 'float'); $money_service = I('money_service', 0, 'float'); $type = I('type'); $jobModel = new \Job\Model\PayModel(); if ($type == 'company') { $ret = $jobModel->checkout($id, $money_student, $money_company, $money_service); $ret or $this->error($jobModel->getError()); // 结算成功后,立即执行自动还款 $join = M('job_join')->find($id) or $this->error('找不到此参与信息!'); $orderModel = new \Loan\Model\OrderModel(); $ret = $orderModel->autoRepay($join['uid'], $money_student); $ret ? $this->success() : $this->error('结算成功,但自动分期还款失败:' . $jobModel->getError()); } elseif ($type == 'student') { $ret = $jobModel->checkoutStudent($id, $money_student, $money_company, $money_service); $ret ? $this->success() : $this->error($jobModel->getError()); } else { $this->error('未知请求类型!'); } }
/** * 支付页面 */ public function pay() { $param = $_GET; $uid = $this->user['uid']; $userMoneyModel = new UserMoneyModel(); // 需事先设置交易密码,设置成功后自动跳转回来继续支付 if (!$userMoneyModel->isSetPassword($uid)) { $this->assign('return_url', '?to_url=' . U('/wallet/pay/@mobile', $_GET)); $this->display('set_password_required'); return; } if (IS_POST) { // 确认支付,检验交易密码 if (!$userMoneyModel->checkPassword($uid, I('password'))) { $this->error($userMoneyModel->getError() ?: '交易密码错误!'); } // 还原支付参数 $param = json_decode(urldecode($_POST['param']), true); $source = $param['source']; $trade_no = $param['trade_no']; $title = $param['title']; $money_pay = $param['money']; $remark = $param['remark']; $return_url = $param['return_url']; // 验证请求是否合法 $sign = $param['sign']; unset($param['sign']); ksort($param); reset($param); $query_str = http_build_query($param); $key = M('user_money_source')->where('id=' . intval($param['source']))->getField('key'); if ($sign != md5($query_str . $key)) { $this->error('请求数据不合法!'); } // 执行资金操作 if ($userMoneyModel->frozen($source, $trade_no, $uid, $money_pay, $title, $remark)) { // 不发通知请求给支付方,而是直接调用具体业务模型方法,执行完成交易结果 if ($source == $userMoneyModel::SOURCE_JOB) { $payModel = new \Job\Model\PayModel(); $ret = $payModel->pay_success($trade_no); $ret or $this->error('支付成功,但业务处理失败:' . $payModel->getError()); } $this->success('支付成功', $return_url); } else { $this->error($userMoneyModel->getError()); } return; } // 判断可用金额是否满足,否则提示充值 $money_pay = I('money', 0, 'float'); if ($money_pay <= 0) { $this->error('支付金额异常!'); } $money_avaliable = $userMoneyModel->get($uid); if (bccomp($money_avaliable, $money_pay) < 0) { $this->display('pay_insufficient'); return; } // 显示支付页面 $this->assign('param', urlencode(json_encode($param))); $this->assign('title', I('title')); $this->assign('money_pay', number_format($money_pay, 2, '.', '')); $this->assign('money_avaliable', $money_avaliable); $this->display(); }