更新openid

This commit is contained in:
Dai 2024-07-23 21:59:15 +08:00
parent 21a53abd93
commit b0ad73fe2b
5 changed files with 179 additions and 7 deletions

View File

@ -8,7 +8,7 @@ use support\Request;
class StudentController extends BaseController class StudentController extends BaseController
{ {
protected $noNeedLogin = ['login']; protected $noNeedLogin = ['login', 'getCode'];
/** /**
* @desc 登录 * @desc 登录
@ -22,6 +22,20 @@ class StudentController extends BaseController
return $this->json($res); return $this->json($res);
} }
/**
* @desc 获取code
* @param Request $request
* @return \support\Response
*/
public function getCode(Request $request)
{
$appid = getenv('WECHAT_APPID');
$redirect_uri = urlencode(getenv('SERVER_DOMAIN') . "/h5/teacher#/pages/index/index");//重定向地址
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect";
return redirect($url);
}
/** /**
* @desc 学生信息 * @desc 学生信息
* @param Request $request * @param Request $request
@ -34,4 +48,10 @@ class StudentController extends BaseController
return $this->json($res); return $this->json($res);
} }
public function updateOpenid(Request $request)
{
$service = new StudentService();
}
} }

View File

@ -9,7 +9,7 @@ use support\Request;
class TeacherController extends BaseController class TeacherController extends BaseController
{ {
protected $noNeedLogin = ['login']; protected $noNeedLogin = ['login', 'getCode'];
public function login(Request $request) public function login(Request $request)
{ {
@ -19,6 +19,20 @@ class TeacherController extends BaseController
} }
/**
* @desc 获取code
* @param Request $request
* @return \support\Response
*/
public function getCode(Request $request)
{
$appid = getenv('WECHAT_APPID');
$redirect_uri = urlencode(getenv('SERVER_DOMAIN') . "/h5/teacher#/pages/login/login");//重定向地址
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect";
return redirect($url);
}
/** /**
* @desc 设置时区 * @desc 设置时区
* @param Request $request * @param Request $request
@ -43,5 +57,13 @@ class TeacherController extends BaseController
return $this->json($res); return $this->json($res);
} }
public function updateOpenid(Request $request)
{
$service = new TeacherService();
$res = $service->updateOpenid($request);
return $this->json($res);
}
} }

View File

@ -4,22 +4,69 @@ namespace app\api\controller;
use app\BaseController; use app\BaseController;
use app\constant\ResponseCode; use app\constant\ResponseCode;
use GuzzleHttp\Client;
use support\Request; use support\Request;
use think\Exception;
class WechatSubscriptController extends BaseController class WechatSubscriptController extends BaseController
{ {
protected $noNeedLogin = ['*']; protected $noNeedLogin = ['*'];
const GENERAL_ACCESS_TOKEN = 'general_access_token';
const CODE_ACCESS_TOKEN = 'code_access_token';
const BASE_URI = 'https://api.weixin.qq.com';
public function getCode(Request $request) public function getCode(Request $request)
{ {
$appid = getenv('WECHAT_APPID'); $appid = getenv('WECHAT_APPID');
$redirect_uri = urlencode(getenv('SERVER_DOMAIN') . "/index.html#/pages/login/login ");//重定向地址 if($request->all('client') == 'student'){
$redirect_uri = urlencode(getenv('SERVER_DOMAIN') . "/h5/student#/pages/login/login");//重定向地址
}else{
$redirect_uri = urlencode(getenv('SERVER_DOMAIN') . "/h5/teacher#/pages/login/login");//重定向地址
}
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect"; $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect";
return $this->json([ return redirect($url);
'code' => ResponseCode::SUCCESS, }
'data' => $url
/**
* @desc 获取网页授权code的access_token
* @param $code
* @return array|void
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public static function getCodeAccessToken($code)
{
try {
$client = new Client(['base_uri'=>self::BASE_URI]);
$response = $client->request('get', 'sns/oauth2/access_token', [
'query' => [
'appid' => getenv('APPID'),
'secret' => getenv('APPSECRET'),
'code'=>$code,
'grant_type'=>'authorization_code'
]
]); ]);
$response_contents = $response->getBody()->getContents();
raw_log('wechat/code_access_token', ['result' => $response_contents]);
if ($response->getStatusCode() == 200) {
$result = json_decode($response_contents, true);
raw_log('wechat/code_access_token', ['result' => $result]);
if (isset($result['errcode'])) {
throw new Exception($result['errmsg']);
}
return $result;
}
}catch (Exception $e){
return [
'code'=>ResponseCode::FAIL,
'msg'=>$e->getMessage()
];
}
} }
} }

View File

@ -2,6 +2,7 @@
namespace app\common\service; namespace app\common\service;
use app\api\controller\WechatSubscriptController;
use app\common\model\Student; use app\common\model\Student;
use app\constant\ResponseCode; use app\constant\ResponseCode;
use think\Exception; use think\Exception;
@ -79,4 +80,45 @@ class StudentService
} }
} }
/**
* @desc 更新code
* @param $request
* @return array|void
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function updateOpenid($request)
{
try {
if(empty($request->teacher)){
throw new Exception('请先教师登陆');
}
$teacher = Student::where(['id' => $request->teacher->id])->findOrEmpty();
if($teacher->isEmpty()){
throw new Exception('未找到教师信息');
}
$data = $request->post('code');
$user_info = WechatSubscriptController::getCodeAccessToken($data['code']);
if (isset($result['code'])) {
$message = '获取信息失败';
}
$openid = $user_info['openid'];
$teacher = Student::where(['id'=>$request->teacher->id])->findOrEmpty();
$teacher->save([
'openid' => $openid,
]);
return [
'code' => ResponseCode::SUCCESS,
'msg' => 'success'
];
}catch (Exception $e){
return [
'code' => ResponseCode::FAIL,
'msg' => $e->getMessage()
];
}
}
} }

View File

@ -2,6 +2,7 @@
namespace app\common\service; namespace app\common\service;
use app\api\controller\WechatSubscriptController;
use app\common\model\Teacher; use app\common\model\Teacher;
use app\common\model\TimeZone; use app\common\model\TimeZone;
use app\constant\ResponseCode; use app\constant\ResponseCode;
@ -115,4 +116,44 @@ class TeacherService
} }
} }
/**
* @desc 更新code
* @param $request
* @return array|void
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function updateOpenid($request)
{
try {
if(empty($request->teacher)){
throw new Exception('请先教师登陆');
}
$teacher = Teacher::where(['id' => $request->teacher->id])->findOrEmpty();
if($teacher->isEmpty()){
throw new Exception('未找到教师信息');
}
$data = $request->post('code');
$user_info = WechatSubscriptController::getCodeAccessToken($data['code']);
if (isset($result['code'])) {
$message = '获取信息失败';
}
$openid = $user_info['openid'];
$teacher = Teacher::where(['id'=>$request->teacher->id])->findOrEmpty();
$teacher->save([
'openid' => $openid,
]);
return [
'code' => ResponseCode::SUCCESS,
'msg' => 'success'
];
}catch (Exception $e){
return [
'code' => ResponseCode::FAIL,
'msg' => $e->getMessage()
];
}
}
} }