新增微信授权接口

This commit is contained in:
wucongxing 2023-03-17 11:52:12 +08:00
parent 2d88e29734
commit a3eb0e3dd0
3 changed files with 118 additions and 2 deletions

View File

@ -7,6 +7,11 @@ use App\Services\LoginService;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use Psr\Http\Message\ResponseInterface;
use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\DecodingExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
/**
* 登陆
@ -42,7 +47,17 @@ class LoginController extends AbstractController
return $this->response->json($data);
}
// 微信授权接口
/**
* 微信授权接口
* @return ResponseInterface
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
* @throws ClientExceptionInterface
* @throws DecodingExceptionInterface
* @throws RedirectionExceptionInterface
* @throws ServerExceptionInterface
* @throws TransportExceptionInterface
*/
public function wxAuthorize(): ResponseInterface
{
// 验证参数

View File

@ -12,7 +12,7 @@ class LoginRequest extends FormRequest
protected array $scenes = [
'wechatMobileLogin' => ['phone_code','wx_code','user_type'],
'mobileLogin' => ['code','phone','user_type'],
'mobileLogin' => ['wx_code'],
'wxAuthorize' => ['wx_code'],
];
/**

View File

@ -16,6 +16,11 @@ use Hyperf\DbConnection\Db;
use Hyperf\Redis\Redis;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\DecodingExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
class LoginService extends BaseService
{
@ -409,4 +414,100 @@ class LoginService extends BaseService
return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage());
}
}
/**
* 微信授权接口
* @return array
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
* @throws ClientExceptionInterface
* @throws DecodingExceptionInterface
* @throws RedirectionExceptionInterface
* @throws ServerExceptionInterface
* @throws TransportExceptionInterface
*/
public function wxAuthorize(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$wx_code = $this->request->input('wx_code');
if (empty($user_info)){
return fail(HttpEnumCode::GET_WX_ERROR);
}
// 获取用户数据
$params = array();
$params['user_id'] = $user_info['user_id'];
$user = UserModel::getOne($params);
if (empty($user)){
return fail();
}
try {
$weChat = new Wechat($user['user_type']);
// 获取用户openid
$wx_info_data = $weChat->codeToSession($wx_code);
if (empty($wx_info_data['session_key']) || empty($wx_info_data['openid'])) {
return fail(HttpEnumCode::GET_WX_ERROR);
}
// 获取对应端用户信息
$params = array();
$params['user_id'] = $user['user_id'];
if ($user['user_type'] == 1) {
$result = UserPatientModel::getOne($params);
} elseif ($user['user_type'] == 2) {
$result = UserDoctorModel::getOne($params);
} elseif ($user['user_type'] == 3) {
$result = UserPharmacistModel::getOne($params);
}
if (empty($result)) {
return fail(HttpEnumCode::SERVER_ERROR);
}
// 判断用户状态
if ($result['status'] != 1) {
return fail(HttpEnumCode::USER_STATUS_ERROR);
}
// 更新session_key
$data = array();
if ($wx_info_data['session_key'] != $result['session_key']) {
$data['wx_session_key'] = $wx_info_data['session_key'];
}
if ($wx_info_data['openid'] != $result['open_id']) {
$data['open_id'] = $wx_info_data['openid'];
}
if (!empty($data)){
$data['updated_at'] = date('Y-m-d H:i:s', time());
$params = array();
if ($user['user_type'] == 1) {
$params['patient_id'] = $result['patient_id'];
$res = UserPatientModel::editUserPatient($params, $data);
} elseif ($user['user_type'] == 2) {
$params['doctor_id'] = $result['doctor_id'];
$res = UserDoctorModel::editUserDoctor($params, $data);
} elseif ($user['user_type'] == 3) {
$params['pharmacist_id'] = $result['pharmacist_id'];
$res = UserPharmacistModel::editUserPharmacist($params, $data);
}else{
$res = false;
}
if (!$res) {
return fail(HttpEnumCode::SERVER_ERROR);
}
}
} catch (\Exception $e) {
// 此处不进行处理
return fail(HttpEnumCode::GET_WX_ERROR,$e->getMessage());
}
return success();
}
}