287 lines
9.0 KiB
PHP
287 lines
9.0 KiB
PHP
<?php
|
|
|
|
namespace member\modules\v1\controllers;
|
|
|
|
use common\core\BaseAppController;
|
|
use common\enums\ProductOrderEnum;
|
|
use common\models\oldDb\BaseConfig;
|
|
use common\models\oldDb\ProductOrder;
|
|
use common\models\oldDb\User;
|
|
use common\services\PlatformService;
|
|
use common\services\SmsService;
|
|
use common\services\WechatService;
|
|
use member\models\forms\LoginForm;
|
|
use member\models\forms\UpdatePassForm;
|
|
use yii\db\Exception;
|
|
|
|
|
|
/**
|
|
* @doc-module 用户端
|
|
*/
|
|
class UserController extends BaseAppController
|
|
{
|
|
public $optional = ['login', 'send-code', 'update-user-info', 'agreement'];
|
|
|
|
/**
|
|
* @doc-name 用户端登录注册
|
|
* @doc-param string mobile 手机号 / optional
|
|
* @doc-param string smsCode 验证码 / optional
|
|
* @doc-param string code 微信code / optional
|
|
* @doc-param int status 1微信登录3手机号登录4手机号注册5开发登录
|
|
* @doc-return string token token
|
|
* @doc-return mixed @StoreUser{*} 门店用户信息
|
|
* @doc-return mixed @User{*} 用户信息
|
|
* @doc-return string platform_token 平台token
|
|
*/
|
|
public function actionLogin()
|
|
{
|
|
$post = \Yii::$app->request->post();
|
|
$this->requestValidate($post, [
|
|
['status', 'required']
|
|
]);
|
|
$form = new LoginForm();
|
|
$form->attributes = $post;
|
|
|
|
return $form->userlogin();
|
|
}
|
|
|
|
/**
|
|
* 登录互联网医院平台
|
|
*/
|
|
public function actionLoginPlatform(){
|
|
$post = \Yii::$app->request->post();
|
|
return (new PlatformService())->userLogin($post);
|
|
}
|
|
|
|
/**
|
|
* @doc-name 用户授权
|
|
* @doc-param string iv iv加密算法的初始向量
|
|
* @doc-param string encryptedData 包括敏感数据在内的完整用户信息的加密数据
|
|
* @doc-return mixed User{*} 用户详情
|
|
*/
|
|
public function actionUpdateUserInfo()
|
|
{
|
|
$post = \Yii::$app->request->post();
|
|
$this->requestValidate($post, [
|
|
[['iv', 'encryptedData'], 'required']
|
|
]);
|
|
$user = \Yii::$app->user->identity;
|
|
$data = WechatService::getInstance()->app->encryptor->decryptData($user->session_key, $post['iv'], $post['encryptedData']);
|
|
|
|
$user->attributes = [
|
|
'nickname' => $data['nickName'],
|
|
'gender' => $data['gender'],
|
|
'country' => $data['country'],
|
|
'province' => $data['province'],
|
|
'city' => $data['city'],
|
|
'avatarurl' => $data['avatarUrl'],
|
|
'mobile' => $data['phoneNumber'] ?? '',
|
|
];
|
|
|
|
$user->saveOrFail();
|
|
|
|
return $user;
|
|
}
|
|
|
|
/**
|
|
* @doc-name 手机号授权
|
|
* @doc-param string iv iv加密算法的初始向量
|
|
* @doc-param string encryptedData 包括敏感数据在内的完整用户信息的加密数据
|
|
* @doc-return mixed User{*} 用户详情
|
|
*/
|
|
public function actionPhoneNumber()
|
|
{
|
|
$post = \Yii::$app->request->post();
|
|
$this->requestValidate($post, [
|
|
[['iv', 'encryptedData'], 'required'],
|
|
]);
|
|
|
|
$user = \Yii::$app->user->identity;
|
|
$data = WechatService::getInstance()->app->encryptor->decryptData($user->session_key, $post['iv'], $post['encryptedData']);
|
|
if(!$user->mobile){
|
|
$user->mobile = $data['phoneNumber'];
|
|
$user->saveOrFail();
|
|
|
|
// $response = (new Client(['http_errors' => false]))->post(\Yii::$app->params['platform']['url']."/platform/v1/sync/user", [
|
|
// 'headers' => ['Authorization' =>"Bearer ".\Yii::$app->params['platform']['token']],
|
|
// 'form_params' => [
|
|
// 'id' => $user->id,
|
|
// 'mobile' => $user->mobile,
|
|
// 'nickname' => '微信用户',
|
|
// 'avatarurl' => $user->avatarurl
|
|
// ],
|
|
// ]);
|
|
// $result = json_decode($response->getBody(),true);
|
|
// if ($result['errcode'] == -1) {
|
|
// throw new Exception($result['msg']);
|
|
// }
|
|
}
|
|
|
|
|
|
return[
|
|
'user'=>$user,
|
|
'plate_token'=>"Bearer ".\Yii::$app->params['platform']['token'],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @doc-name 用户信息
|
|
* @doc-return mixed @User{*} 用户详情
|
|
*/
|
|
public function actionInfo()
|
|
{
|
|
$get = \Yii::$app->request->post();
|
|
$user= \Yii::$app->user->identity;
|
|
|
|
$ProductOrder['unpay'] = ProductOrder::find()->where([
|
|
'user_id' => $user->getId(),
|
|
'store_id' => $get['store_id'] ?? 11001
|
|
])->andWhere([
|
|
'status' => ProductOrderEnum::UNPAY
|
|
])->count();
|
|
|
|
$ProductOrder['wait_send'] = ProductOrder::find()->where([
|
|
'user_id' => $user->getId(),
|
|
'store_id' => $get['store_id'] ?? 11001
|
|
])->andWhere([
|
|
'status' =>ProductOrderEnum::WAIT_SEND
|
|
])->count();
|
|
|
|
$ProductOrder['wait_accept'] = ProductOrder::find()->where([
|
|
'user_id' => $user->getId(),
|
|
'store_id' => $get['store_id'] ?? 11001
|
|
])->andWhere([
|
|
'status' => ProductOrderEnum::WAIT_ACCEPT
|
|
])->count();
|
|
|
|
|
|
if ($user->gender==1){
|
|
$user->gender='男';
|
|
}elseif ($user->gender==2){
|
|
$user->gender='女';
|
|
}else{
|
|
$user->gender='未知';
|
|
}
|
|
|
|
return [
|
|
'user' => $user,
|
|
'sex' => $user->gender,
|
|
'ProductOrder'=>$ProductOrder
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @doc-name 编辑信息
|
|
* @doc-param string nickname 昵称 / optional
|
|
* @doc-param string mobile 电话 / optional
|
|
* @doc-param string gender 性别0默认1男2女 / optional
|
|
* @doc-param string country 国家 / optional
|
|
* @doc-param string province 省 / optional
|
|
* @doc-param string city 市 / optional
|
|
* @doc-param string avatarurl 头像 / optional
|
|
* @doc-param string idcard 身份证 / optional
|
|
* @doc-param int age 年龄 / optional
|
|
**/
|
|
public function actionEditInfo()
|
|
{
|
|
$post = \Yii::$app->request->post();
|
|
$user = User::find()->where([
|
|
'id' => \Yii::$app->user->id
|
|
])->one();
|
|
if (!$user) throw new Exception('用户不存在');
|
|
|
|
$user->nickname=$post['nickname']??$user->nickname;
|
|
$user->mobile=$post['mobile']??$user->mobile;
|
|
$user->gender=$post['gender']??$user->gender;
|
|
$user->country=$post['country']??$user->country;
|
|
$user->province=$post['province']??$user->province;
|
|
$user->city=$post['city']??$user->city;
|
|
$user->avatarurl=$post['avatarurl']??$user->avatarurl;
|
|
$user->idcard=$post['idcard']??$user->idcard;
|
|
$user->age=$post['age']??$user->age;
|
|
|
|
$user->saveOrFail();
|
|
return ['编辑成功'];
|
|
}
|
|
|
|
/**
|
|
* @doc-name 修改密码
|
|
* @doc-param string old_pass 旧密码
|
|
* @doc-param string new_pass 新密码
|
|
*/
|
|
public function actionUpdatePassword()
|
|
{
|
|
$form = new UpdatePassForm();
|
|
$form->attributes = \Yii::$app->request->post();
|
|
return $form->updatePassword();
|
|
}
|
|
|
|
/**
|
|
* @doc-name 退出登录
|
|
* @doc-param string token token
|
|
*/
|
|
public function actionLogout()
|
|
{
|
|
$post = \Yii::$app->request->post();
|
|
$this->requestValidate($post, [
|
|
[['token'], 'required'],
|
|
]);
|
|
|
|
$user = User::find()->where([
|
|
'id' => \Yii::$app->user->identity->getId(),
|
|
'token' => $post['token'],
|
|
])->one();
|
|
if (!$user) throw new Exception('账号不存在');
|
|
|
|
User::updateAll(['token' => ''], ['id' => \Yii::$app->user->identity->getId(), 'token' => $post['token']]);
|
|
}
|
|
|
|
/**
|
|
* @doc-name 手机号登录发送短信
|
|
* @doc-param string mobile 手机号码
|
|
* @doc-return string smsCode 验证码
|
|
*/
|
|
public function actionSendCode()
|
|
{
|
|
$code = (string)mt_rand(100000, 999999);
|
|
$post = \Yii::$app->request->post();
|
|
$this->requestValidate($post, [
|
|
['mobile', 'required']
|
|
]);
|
|
$message=[
|
|
'content' => '您的验证码为:" ' .$code. ' ",请勿泄露与他人',
|
|
'template' => 'SMS_274460204',
|
|
'data' => [
|
|
'code' => $code
|
|
]
|
|
];
|
|
$cache = \Yii::$app->cache;
|
|
$cache->set( 'login_sms_code_'.$post['mobile'], $code, 600);
|
|
$cache->set( 'login_sms_time_'.$post['mobile'], time(), 600);
|
|
|
|
$response = (new SmsService())->sendCaptcha($post['mobile'], $code);
|
|
|
|
return [$response];
|
|
}
|
|
|
|
/**
|
|
* @doc-name 协议
|
|
* @doc-param int end 1用户端2服务端
|
|
* @doc-return mixed @BaseConfig{*} 信息
|
|
*/
|
|
public function actionAgreement()
|
|
{
|
|
$post = \Yii::$app->request->post();
|
|
$this->requestValidate($post, [
|
|
['end', 'required']
|
|
]);
|
|
$BaseConfig = BaseConfig::find()->where([
|
|
'end' => $post['end'],
|
|
// 'store_id' => $post['store_id'],
|
|
'status' => 0
|
|
])->andWhere(['type' => [1, 2]])->select(['type', 'content', 'change_at'])->all();
|
|
return $BaseConfig;
|
|
}
|
|
|
|
}
|