course/app/api/controller/WechatSubscriptController.php
2024-07-25 17:07:01 +08:00

102 lines
3.4 KiB
PHP

<?php
namespace app\api\controller;
use app\BaseController;
use app\constant\ResponseCode;
use GuzzleHttp\Client;
use support\Request;
use think\Exception;
class WechatSubscriptController extends BaseController
{
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)
{
$appid = getenv('WECHAT_APPID');
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";
return redirect($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('APP_ID'),
'secret' => getenv('APP_SECRET'),
'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()
];
}
}
public static function getUserinfo($openid, $access_token)
{
try {
$client = new Client(['base_uri' => self::BASE_URI]);
$response = $client->request('get', 'sns/userinfo', [
'query' => [
'access_token' => getenv('APP_ID'),
'openid' => $openid,
'lang' => 'zh_CN',
]
]);
$response_contents = $response->getBody()->getContents();
raw_log('wechat/get_user_info', ['result' => $response_contents]);
if ($response->getStatusCode() == 200) {
$result = json_decode($response_contents, true);
raw_log('wechat/get_user_info', ['result' => $result]);
if (isset($result['errcode'])) {
throw new Exception($result['errmsg']);
}
return $result;
}
}catch (Exception $e) {
return [
'code' => ResponseCode::FAIL,
'msg' => $e->getMessage()
];
}
}
}