微信web用户授权

以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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值