[ ['user_id' => $this->user_id], ['mall_id' => $this->mall_id], ['status' => StatusEnum::ENABLED] ], 'order' => 'created_at desc' ]); if (empty($list)) return $this->success('success', ['list' => []], ApiStatusEnum::CODE_SUCCESS, 0); $card_ids = array_column($list, 'id'); $union_user_card_list = HuifuPayUserBankcard::lists(['where' => [['card_id' => $card_ids]], 'index' => 'card_id']); foreach ($list as &$item) { $item['is_sign'] = 0; if (isset($union_user_card_list[$item['id']])) { $item['is_sign'] = $union_user_card_list[$item['id']]['is_sign']; } $item['icon'] = UserBankCard::getBankPicture($item['bank_code']); $item['back_image'] = UserBankCard::getBankPicture($item['bank_code'], 'back'); } return $this->success('success', ['list' => $list], ApiStatusEnum::CODE_SUCCESS, 0); } /** * @name: * @msg: 添加银行卡并签约接口,提交订单页面添加并签约银行卡 * @param {*} * @return {*} */ public function actionAddCardAndSign() { if (!\Yii::$app->request->isPost) { return $this->error('请求方式错误'); } $post = \Yii::$app->request->post(); //'bank_code', 'card_type', 'card_type_name' 这三个参数由后端处理,前端不提交该参数 $rules = [ [['id_type', 'bank_card_no', 'id_no', 'payer_name', 'mobile_no','sdate'], 'required'], [['id_type','is_longer'], 'integer'], ['id_type', 'default', 'value' => 1], ['is_longer', 'default', 'value' => 0], ['bank_card_no', 'string', 'max' => 64], [['id_no', 'payer_name', 'bank_name','sdate','edate'], 'string', 'max' => 255], [['mobile_no', 'bank_code', 'card_type', 'card_type_name'], 'string', 'max' => 32], ]; $res = \Yii::$app->services->validate->validate($post, $rules); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $validate_card = UserBankCard::validateCardInfo($post['bank_card_no'],$post['bank_name']); $post = array_merge($post,$validate_card); $bank_card_info = UserBankCard::findONe(['bank_card_no' => $post['bank_card_no'], 'status' => StatusEnum::ENABLED]); if (!empty($bank_card_info)) { return $this->error('银行卡已经被绑定'); } $post['user_id'] = $this->user_id; $user_bank_card_data = [ 'user_id' => $this->user_id, 'bank_card_no' => $post['bank_card_no'], 'payer_name' => $post['payer_name'], 'bank_name' => $post['bank_name'], 'bank_code' => $post['bank_code'], 'card_type' => $post['card_type'], 'card_type_name' => $post['card_type_name'], ]; $model = UserBankCard::setData($this->mall_id, $user_bank_card_data); if (false === $model) return $this->error(UserBankCard::getStaticError()); $post['card_id'] = $model->id; $resj = HuifuPayUserBankcard::setData($this->mall_id, $post); if (false === $resj) return $this->error(HuifuPayUserBankcard::getStaticError()); try { //调用汇付接口:发送签约短信 $fast_pay_class = new FastPayService($this->mall_id); $fast_pay_class->sendSignSms($model->id); return $this->success('操作成功', ['card_id' => $model->id]); } catch (\Exception $e) { return $this->error($e->getMessage()); } } /** * @name: * @msg: 去签约接口,会员中心银行卡列表页面 * @param {*} * @return {*} */ public function actionToSign() { if (!\Yii::$app->request->isPost) { return $this->error('请求方式错误'); } $post = \Yii::$app->request->post(); $rules = [ [['card_id','id_type', 'bank_card_no', 'id_no', 'payer_name', 'mobile_no','sdate'], 'required'], [['card_id','id_type','is_longer'], 'integer'], ['id_type', 'default', 'value' => 1], ['is_longer', 'default', 'value' => 0], ['bank_card_no', 'string', 'max' => 64], [['id_no', 'payer_name', 'bank_name','sdate','edate'], 'string', 'max' => 255], [['mobile_no', 'bank_code', 'card_type', 'card_type_name'], 'string', 'max' => 32], ]; $res = \Yii::$app->services->validate->validate($post, $rules); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $card_info = UserBankCard::find() ->select('user_id,payer_name,bank_name,bank_code,bank_card_no,card_type,card_type_name') ->where(['mall_id' => $this->mall_id, 'id' => $post['card_id'], 'status' => StatusEnum::ENABLED]) ->asArray() ->limit(1) ->one(); if (empty($card_info)) { return $this->error('银行卡不存在'); } $validate_card = UserBankCard::validateCardInfo($post['bank_card_no'],$post['bank_name']); $post = array_merge($post,$validate_card); $post['user_id'] = $this->user_id; $model = HuifuPayUserBankcard::setData($this->mall_id, $post); if (false === $model) return $this->error(HuifuPayUserBankcard::getStaticError()); try { $fast_pay_class = new FastPayService($this->mall_id); $fast_pay_class->sendSignSms($post['card_id']); return $this->success('操作成功', ['card_id' => $post['card_id']]); } catch (\Exception $e) { return $this->error($e->getMessage()); } } /** * @name: * @msg: 签约 * @param {*} * @return {*} */ public function actionSignContract() { if (!\Yii::$app->request->isPost) { return $this->error('请求方式错误'); } $post = \Yii::$app->request->post(); $rules = [ [['card_id', 'sms_code'], 'required'], [['card_id'], 'integer'], ['sms_code', 'string'], ]; $res = \Yii::$app->services->validate->validate($post, $rules); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $card_info = UserBankCard::findOne([ 'mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'id' => $post['card_id'], 'user_id' => $this->user_id, ]); if (empty($card_info)) return $this->error('银行卡不存在'); $huifupay_card_info = HuifuPayUserBankcard::findOne([ 'mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED, 'card_id' => $post['card_id'], 'user_id' => $this->user_id, ]); if (empty($huifupay_card_info)) { return $this->error('银行卡数据异常'); } if ($huifupay_card_info->is_sign == 1) { return $this->error('银行卡已经签约'); } try { // 签约快捷支付 $fast_pay_class = new FastPayService($this->mall_id); $reuslt=$fast_pay_class->sign($post['card_id'], $post['sms_code']); $card_info = ArrayHelper::toArray($card_info); $card_info['is_sign'] = 1; $card_info['is_auth'] = true; $card_info['icon'] = UserBankCard::getBankPicture($card_info['bank_code'], 'icon'); unset($card_info['cvv'], $card_info['sign_no'], $card_info['payer_name'], $card_info['id_no']); return $this->success('签约成功', ['card_info' => $card_info], ApiStatusEnum::CODE_SUCCESS, 0); } catch (\Exception $e) { return $this->error($e->getMessage()); } } /** * @name: * @msg: 解除快捷支付签约 * @param {*} * @return {*} */ public function actionContractRelieve() { if (!\Yii::$app->request->isPost) { return $this->error('请求方式错误'); } $post = \Yii::$app->request->post(); $rules = [ [['card_id'], 'required'], [['card_id'], 'integer'], ]; $res = \Yii::$app->services->validate->validate($post, $rules); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); // 获取当前用户银行卡绑定汇付信息 $bankCardInfo = HuifuPayUserBankcard::find() ->where(['mall_id' => $this->mall_id, 'card_id' => $post['card_id'], 'user_id' => $this->user_id, 'status' => StatusEnum::ENABLED, 'is_sign' => 1, ]) ->with(['card' => function ($query) use ($post) { $query->where(['mall_id' => $this->mall_id, 'user_id' => $this->user_id, 'status' => StatusEnum::ENABLED, 'id' => $post['card_id']]); }]) ->one(); if (empty($bankCardInfo) || empty($bankCardInfo['card'])) { return $this->error('银行卡不存在或者已经解除签约'); } // 进行解绑 try { $service = new FastPayService($this->mall_id); $result = $service->unsign($bankCardInfo); if (!$result) { return $this->error('解绑失败'); } } catch (\Exception $e) { return $this->error('解绑失败'); } return $this->success('解绑成功'); } /** * @name: * @msg: 发送快捷支付支付短信 * @param {*} * @return {*} */ public function actionPaySms() { if (!\Yii::$app->request->isPost) { return $this->error('请求方式错误'); } $post = \Yii::$app->request->post(); $rules = [ [['card_id', 'trade_id'], 'required'], [['card_id', 'trade_id'], 'integer'], ]; $res = \Yii::$app->services->validate->validate($post, $rules); if ($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage()); $huifupay_card_info = HuifuPayUserBankcard::findOne([ 'mall_id' => $this->mall_id, 'user_id' => $this->user_id, 'card_id' => $post['card_id'], 'status' => StatusEnum::ENABLED, 'is_sign' => 1, ]); if ( empty($huifupay_card_info)) throw new \Exception('银行卡不存在或者未开通快捷支付'); try { $fast_pay_class = new FastPayService($this->mall_id); $fast_pay_class->sendPaySms($post['trade_id'], $huifupay_card_info, $this->mall_id); return $this->success('操作成功'); } catch (\Exception $e) { return $this->error($e->getMessage()); } } }