下面是“PHP版微信公众平台之微信网页登录授权示例”的详细攻略。
1. 获取微信公众平台的AppID和AppSecret
在使用微信公众平台的功能之前,需要先申请并获取相应的AppID和AppSecret,你可以通过微信公众平台-开发-基本设置获取。
2. 配置网页授权回调域名
在公众号开发者中心-网页授权获取用户基本信息中配置授权回调链接域名。
3. 搭建本地开发环境
可以使用XAMPP搭建本地开发环境,其中包括Apache服务器和PHP环境。
4. 程序代码实现
第一步:获取并验证请求中的code:
if(isset($_GET['code'])){ //判断是否有code参数
$url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".APPID."&secret=".APPSECRET."&code=".$_GET['code']."&grant_type=authorization_code"; //拼接请求access_token的url
$res=https_request($url);
$res=json_decode($res,true);
if(isset($res['errcode'])){ //判断请求是否有错误
echo "<script>alert('获取access_token异常')</script>";
}else{
$access_token=$res['access_token'];
$openid=$res['openid']; //从返回结果中获取openid
//进行非空验证,并将openid和access_token存放到session中
if(!empty($openid)&&!empty($access_token)){
$_SESSION['openid']=$openid;
$_SESSION['access_token']=$access_token;
//授权成功,跳转到个人信息页面
header("Location: https://XXX.XXX.XXX/userinfo.php");
exit;
}
}
}elseif(isset($_GET['state'])){ //如果请求中带着state参数,说明用户取消了授权请求
echo "<script>alert('用户取消授权登录')</script>";
}else{ //去微信服务器请求授权登录
$redirect_uri=urlencode("https://XXX.XXX.XXX/oauth.php");
$scope="snsapi_userinfo";
$url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".APPID."&redirect_uri=".$redirect_uri."&response_type=code&scope=".$scope."&state=STATE#wechat_redirect";
header("Location: ".$url);
exit;
}
第二步:引导用户扫码,确认登录:
$redirect_uri=urlencode("https://XXX.XXX.XXX/oauth.php");
$scope="snsapi_userinfo";
$url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".APPID."&redirect_uri=".$redirect_uri."&response_type=code&scope=".$scope."&state=STATE#wechat_redirect";
header("Location: ".$url);
exit;
示例一:获取用户昵称和头像
第一步:从session中获取openid和access_token:
$openid=$_SESSION['openid'];
$access_token=$_SESSION['access_token'];
第二步:通过微信提供的API接口获取用户信息:
$url="https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN"; //拼接获取用户信息的url
$res=https_request($url);
$res=json_decode($res,true);
if(isset($res['errcode'])){ //判断请求是否有错误
echo "<script>alert('获取用户信息异常')</script>";
}else{
$nickname=$res['nickname'];
$avatar=$res['headimgurl'];
}
示例二:使用微信JS-SDK上传图片
第一步:引入JS-SDK:
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
第二步:通过服务器端接口获取JS-SDK配置信息:
//获取JS-SDK配置信息
$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".APPID."&secret=".APPSECRET;
$res=https_request($url);
$res=json_decode($res,true);
$access_token=$res['access_token'];
//获取JS-SDK的ticket
$url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$access_token."&type=jsapi";
$res=https_request($url);
$res=json_decode($res,true);
$ticket=$res['ticket'];
//构建签名算法所需参数
$noncestr=create_noncestr();
$timestamp=time();
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
//进行签名
$data=array(
"noncestr"=>$noncestr,
"jsapi_ticket"=>$ticket,
"timestamp"=>$timestamp,
"url"=>$url
);
$signature=create_signature($data);
第三步:使用JS-SDK中的chooseImage功能上传图片:
wx.config({
debug: false,
appId: '<?php echo APPID;?>',
timestamp: <?php echo time();?>,
nonceStr: '<?php echo $noncestr;?>',
signature: '<?php echo $signature;?>',
jsApiList: [
'chooseImage',
'uploadImage',
'previewImage',
'downloadImage'
]
});
wx.ready(function () {
var images = {
localId: [],
serverId: []
};
// 选择图片
document.querySelector("#chooseImage").onclick = function(){
wx.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType: ['album', 'camera'],
success: function (res) {
images.localId = res.localIds;
previewImage(images.localId[0]);
}
});
};
// 预览图片
function previewImage(url){
wx.previewImage({
current: url,
urls: images.localId
});
}
// 上传图片
function uploadImage(url){
wx.uploadImage({
localId: images.localId,
isShowProgressTips: 1,
success: function (res) {
images.serverId = images.serverId.concat(res.serverId);
document.querySelector("#serverResult").innerHTML = '上传成功,服务器端media_id为:' + res.serverId;
}
});
}
});
以上就是关于“PHP版微信公众平台之微信网页登录授权示例”的完整攻略,希望能帮助到你。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php版微信公众平台之微信网页登陆授权示例 - Python技术站