新增微信授权接口

This commit is contained in:
2023-03-17 11:52:12 +08:00
parent 2d88e29734
commit a3eb0e3dd0
3 changed files with 118 additions and 2 deletions
+101
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();
}
}