[PHP] 纯文本查看 复制代码<?php
session_start();
include 'function.php';
/**
* 小程序登陆验证
* [url=home.php?mod=space&uid=952169]@Param[/url] $code
*/
if($_GET){
$code = $_GET['code'];
function getOpenid($code){
//配置appid
$appid = "wx9e1f021c48d719bd";
//配置appscret
$secret = "acbd031b5e53f1819d97cd00be77dc89";
//api接口
$api = "https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$secret}&js_code={$code}&grant_type=authorization_code";
//初始化
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$api);
// 执行后不直接打印出来
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
// 跳过证书检查
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// 不从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
//执行并获取HTML文档内容
$output = curl_exec($ch);
//释放curl句柄
curl_close($ch);
return json_decode($output,true);
}
/**
* 1.小程序短发 token 给后端 (token = md5(session_key+openid))
* 2. 后端判断 token 是否存在 session中,存在则正常访问已授权
* 3. 不存在的话 ,判断openid 是否已经 添加数据库中,(添加: 老用户刷新token ,没有添加 新用户,进行存储信息返回token)
* @param $token
*/
function checkToken($token){
if(isset($_SESSION[$token])){ //token可使用
return '{"code":0,"msg":"token正常"}';
}else{
/**
* 已经把code获取到的 session_key 和 openid 存储在session里面啦key为token
*
* 1. 老用户 token过期 发配
* 2. 新用户 未token 注册后 发配
* 方法: 查询数据库 openId存在判断新老用户
*/
$info = getOpenid($code);
if(checkHave('jiechan_user','open_id',$info['openid']) == 1){ //存在(老用户)
//存储
$key = md5($info['session_key'].$info['openid']);
$_SESSION[$key] = array(
$session_key => $info['session_key'],
$openid => $info['openid']
)
if(isset($_SESSION[$key])){
echo '{"code":1,"token":"'.$key.'","msg":"刷新成功~"}';
}else{
echo '{"code":3,"msg":"刷新token失败~"}';
}
}else{ //新用户
echo "新用户";
//开始 添加数据库 然后 成功后创建token 返给小程序端,
}
}
}
checkToken();
}else{
echo '{"code":1,"msg":"请求方式错误!"}';
}
// code 0 token正常
// code 1 老用户刷新 token
// code 2 新用户 创建 token
// code 3 用户刷新token失败