一、注册公众号并获取appid和appsecret
在进行微信公众号网页授权之前,首先需要注册一个微信公众号,并申请开发者权限。申请成功后,可以在“开发者中心”中获取appid和appsecret两个重要的参数。
二、配置公众号信息
在thinkphp5框架中,我们可以在config目录下新建一个wechat.php文件,用于存放我们的公众号配置信息。在该文件中,我们需要配置以下信息:
<?phpreturn [ 'app_id' => 'your appid', 'app_secret' => 'your appsecret', 'auth_redirect' => 'your callback url',];
其中:
app_id和app_secret是我们在公众号管理界面获得的参数。auth_redirect是微信网页授权后的回调地址,要求必须是公网可访问的url地址。三、获取网页授权url
在我们调用微信网页授权接口前,需要构造网页授权url。我们可以在控制器中添加以下代码:
$config = config('wechat');$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $config['app_id'] . '&redirect_uri=' . urlencode($config['auth_redirect']) . '&response_type=code&scope=snsapi_userinfo&state=state#wechat_redirect';
以上代码中,我们通过config函数获取到了之前配置的公众号信息,并构造了一个微信网页授权的uri。其中,response_type=code表示使用code方式进行授权,scope=snsapi_userinfo表示授权范围为获取用户基本信息。
四、获取网页授权code
构造好网页授权的url后,我们需要跳转该url,进行授权。授权成功后,微信服务器会将code参数通过get方式传递回来。我们可以在控制器中添加以下代码,用于获取code。
if (isset($_get['code'])) { $code = $_get['code'];} else { $this->redirect($url);}
以上代码中,我们首先判断url中是否包含了code参数。如果有,则表示用户已经授权成功,我们将获取到的code存储起来,以便后续使用。如果没有,则需要进行跳转,进行网页授权。
五、获取用户access_token和openid
在授权成功后,后续的操作需要用到access_token和openid。我们可以在控制器中添加以下代码,用于获取用户的access_token和openid。
$accesstokenurl = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $config['app_id'] . '&secret=' . $config['app_secret'] . '&code=' . $code . '&grant_type=authorization_code';$accesstokenresponse = json_decode(file_get_contents($accesstokenurl), true);if (isset($accesstokenresponse['errcode'])) { throw new \exception('error ' . $accesstokenresponse['errcode'] . ': ' . $accesstokenresponse['errmsg']);}$accesstoken = $accesstokenresponse['access_token'];$openid = $accesstokenresponse['openid'];
以上代码中,我们首先构造了一个请求access_token的url,并向该url发送了请求,获取到了响应结果。如果响应结果中包含了errcode,则表示请求出现了错误,我们将抛出一个异常;否则,我们将获取到的access_token和openid存储起来,以便后续使用。
六、获取用户详细信息
在获取到用户的access_token和openid后,我们可以通过以下代码,获取到用户的详细信息:
$userinfourl = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $accesstoken . '&openid=' . $openid . '&lang=zh_cn';$userinforesponse = json_decode(file_get_contents($userinfourl), true);if (isset($userinforesponse['errcode'])) { throw new \exception('error ' . $userinforesponse['errcode'] . ': ' . $userinforesponse['errmsg']);}
以上代码中,我们构造了一个请求用户信息的url,并向该url发送了请求,获取到了响应结果。如果响应结果中包含了errcode,则表示请求出现了错误,我们将抛出一个异常。
至此,我们已经成功地完成了微信公众号网页授权的过程!
以上就是thinkphp5框架如何进行微信公众号网页授权的详细内容。
