以thinkphp3.2为例
步骤:1.用户授权->2.获得CODE->3.根据CODE获取openid->4.根据openid获取用户信息
1.每个页面继承BaseController访问时判断有无openid保存,无保存的话直接去getUserInfo获取openid
BaseController.class.php中
<?php
namespace Home\Controller;
use Think\Controller;
class BaseController extends Controller {
public function _initialize(){
//判断是否有openid值,无openid则请求用户返回code值
if(!session('openid')){
header('Location: https://open.weixin.qq.com/connect/oauth2/authorize?appid='.C('APPID').'&redirect_uri=https://wechat.labao168.com/baoxian/index.php/base/getOpenid&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect');
}
}
public function getOpenid(){
//2.通过授权获取code
if(isset($_GET['code'])){
$code = $_GET['code'];
}else{
if(!session('openid')){
$this->redirect('index/index');
}
}
//3.根据CODE获得access_token和openid
$arccess_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".C('APPID')."&secret=".C('APPSC')."&code=".$code."&grant_type=authorization_code";
$arccess_token_json = file_get_contents($arccess_token_url);
$arccess_token_array = json_decode($arccess_token_json, true);
$access_token = $arccess_token_array['access_token'];
$openid = $arccess_token_array['openid'];
session('openid',$openid);
session('access_token',$access_token);
if(session('openid')){
$this->redirect('index/index');
}
}
}
IndexController.class.php中继承BaseController
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends BaseController {
public function index(){
//由于base的存在此处必有openid,可根据需求拉取用户信息
$access_token = session('access_token');
$openid = session('openid');
$list = getinfo($access_token,$openid);
}
}
公共函数中添加函数方便随时调取用户数据
/**
* *根据OPENID和access_token获取用户数据
* @param [type] $access_token [session中获取]
* @param [type] $openid [session中获取]
* @return [type] [用户数据]
*/
function getinfo($access_token,$openid){
$userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
$userinfo_json = file_get_contents($userinfo_url);
$userinfo_array = json_decode($userinfo_json, true);
return $userinfo_array;
}