<?php
// 调用示例
// 引入WechatAuth类
require_once 'path/to/WechatAuth.php';
// 定义应用ID、应用密钥和重定向URI
$appId = 'YOUR_APP_ID';
$appSecret = 'YOUR_APP_SECRET';
$redirectUri = 'http://example.com/auth.php'; // 应该是当前脚本的完整URL
// 实例化WechatAuth对象
$wechatAuth = new WechatAuth($appId, $appSecret, $redirectUri);
// 检查是否已经获得了code
if (isset($_GET['code'])) {
$code = $_GET['code'];
// 通过code获取access_token
$accessTokenResponse = $wechatAuth->getAccessToken($code);
if (isset($accessTokenResponse['access_token'])) {
// 获取用户信息
$userInfo = $wechatAuth->getUserInfo($accessTokenResponse['access_token'], $accessTokenResponse['openid']);
// 输出用户信息
echo "<h1>用户信息:</h1>";
echo "<p>OpenID: {$userInfo['openid']}</p>";
echo "<p>Nickname: {$userInfo['nickname']}</p>";
echo "<img src='{$userInfo['headimgurl']}' alt='用户头像'>";
} else {
echo "获取access_token失败:" . print_r($accessTokenResponse, true);
}
} else {
// 如果没有code,则跳转到授权页面
$authUrl = $wechatAuth->getAuthUrl();
header("Location: {$authUrl}");
exit;
}
/**
* 微信公众号网页授权
* Class WechatAuth
* @package app\index\controller
*/
class WechatAuth
{
private $appId;
private $appSecret;
private $redirectUri;
public function __construct($appId, $appSecret, $redirectUri)
{
$this->appId = $appId;
$this->appSecret = $appSecret;
$this->redirectUri = $redirectUri;
}
/**
* 第一步:引导用户进入授权页面同意授权,获取code
*
* @param string $state
* @return string
*/
public function getAuthUrl($state = 'STATE')
{
$encodedRedirectUri = urlencode($this->redirectUri);
return "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$this->appId}&redirect_uri={$encodedRedirectUri}&response_type=code&scope=snsapi_userinfo&state={$state}#wechat_redirect";
}
/**
* 第二步:通过code换取网页授权access_token(与基础支持中的access_token不同)
* @param $code
* @return mixed
*/
public function getAccessToken($code)
{
//启动session的初始化
session_start();
if (isset($_SESSION['access_expires']) && isset($_SESSION['access_info'])) {
if (time() < $_SESSION['access_expires']) {
return $_SESSION['access_info'];
}
}
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$this->appId}&secret={$this->appSecret}&code={$code}&grant_type=authorization_code";
$response = $this->request($url);
if (!$response) {
return false;
}
//存入session
$_SESSION['access_expires'] = time() + $response['expires_in'];
$_SESSION['access_info'] = $response;
return $response;
}
/**
* 第三步:刷新access_token,避免过期(如果需要)
* @param $refreshToken
* @return mixed
*/
public function refreshAccessToken($refreshToken)
{
$url = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid={$this->appId}&grant_type=refresh_token&refresh_token={$refreshToken}";
$response = $this->request($url);
if (!$response) {
return false;
}
return $response;
}
/**
* 第四步:通过网页授权access_token和openid获取用户基本信息(需scope为 snsapi_userinfo)(支持UnionID机制)
* @param $accessToken
* @param $openid
* @return mixed
*/
public function getUserInfo($accessToken, $openid)
{
$url = "https://api.weixin.qq.com/sns/userinfo?access_token={$accessToken}&openid={$openid}&lang=zh_CN";
$response = $this->request($url);
if (!$response) {
return false;
}
return $response;
}
protected function request($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); // 设置连接超时时间
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
$data = curl_exec($ch);
curl_close($ch);
if ($data === false) {
return false;
}
return json_decode($data, true);
}
}
php微信公众号网页授权 2024-09-09
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 要进行网页授权,肯定要和微信合作,首先,要有一个自己的公众号,而且必须要经过认证的公众号.(如果没有,可以去申请测...
- 微信公众号h5的开发我是用vue做的。由于是要在微信内置浏览器运行的网页,所以首先就要获得微信的授权。 看了鹅厂的...
- 微信公众号授权登录和微信网页授权登录 这段时间,项目开发需要,研究和配置了下公众号平台的h5微信授权登录过程和pc...
- 开发微信公众号h5页面,使用微信的东西。需要处理2点。1、网页授权拿的code,调用后端同学的接口,把code提交...