72 lines
2.3 KiB
PHP
72 lines
2.3 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()
|
|
];
|
|
}
|
|
}
|
|
|
|
} |