zoukankan      html  css  js  c++  java
  • 微信pc网页扫码授权登录php

    一、获取扫码登录授权二维码

    html部分

     <div id="login_container"></div>

    <script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>

    <script>
    var loginUrl = "http://" + window.location.host + "/index.php?route=common/home/weChatLogin";
    //console.log(loginUrl);
    var obj = new WxLogin({
    id: "login_container",//存放二维码框
    appid: "*************",
    scope: "snsapi_login",
    redirect_uri: encodeURIComponent(loginUrl),
    state: Math.ceil(Math.random()*1000),
    style: "black",
    href: ""});
    </script>


    二、php部分.
    class wxlogin
    {
    var $appid = "********";
    var $appsecret = "******************";

    //构造函数,获取Access Token
    public function __construct($appid = NULL, $appsecret = NULL)
    {
    //扫码登录不需要该Access Token, 语义理解需要
    //1. 本地写入
    $res = @file_get_contents('test/access_token.json');
    $result = json_decode($res, true);
    $this->expires_time = $result["expires_time"];
    $this->access_token = $result["access_token"];

    if (time() > ($this->expires_time + 3600)) {
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $this->appid . "&secret=" . $this->appsecret;
    $res = $this->http_request($url);
    $result = json_decode($res, true);
    $this->access_token = $result["access_token"];
    $this->expires_time = time();
    file_put_contents('test/access_token.json', '{"access_token": "' . $this->access_token . '", "expires_time": ' . $this->expires_time . '}');
    }
    }

    //生成扫码登录的URL
    public function qrconnect($redirect_url, $scope, $state = NULL)
    {
    $url = "https://open.weixin.qq.com/connect/qrconnect?appid=" . $this->appid . "&redirect_uri=" . urlencode($redirect_url) . "&response_type=code&scope=" . $scope . "&state=" . $state . "#wechat_redirect";
    return $url;
    }

    //生成OAuth2的Access Token
    public function oauth2_access_token($code)
    {
    $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $this->appid . "&secret=" . $this->appsecret . "&code=" . $code . "&grant_type=authorization_code";
    $res = $this->http_request($url);
    return json_decode($res, true);
    }

    //获取用户基本信息(OAuth2 授权的 Access Token 获取 未关注用户,Access Token为临时获取)
    public function oauth2_get_user_info($access_token, $openid)
    {
    $url = "https://api.weixin.qq.com/sns/userinfo?access_token=" . $access_token . "&openid=" . $openid . "&lang=zh_CN";
    $res = $this->http_request($url);
    return json_decode($res, true);
    }

    public function http_request($url){
    return file_get_contents($url);
    }
    }

    //微信扫码登录
    public function weChatLogin(){
    $weixin = getModel("wxlogin");
    //$weixin = new class_weixin();
    if (!isset($_GET["code"])){
    $redirect_url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    $jumpurl = $weixin->qrconnect($redirect_url, "snsapi_login", "123");
    Header("Location: $jumpurl");
    }else{
    //获取token
    $oauth2_info = $weixin->oauth2_access_token($_GET["code"]);

    //获取用户信息
    $userinfo = $weixin->oauth2_get_user_info($oauth2_info['access_token'], $oauth2_info['openid']);
          //参数样式$userinfo用户信息结构
        //array(10) { ["openid"]=> string(28) "oJDSV0lWOjfXE7VXk6C4_QuiUtQY" ["nickname"]=> string(6) "俊哥" ["sex"]=> int(1) ["language"]=> string(5) "zh_CN" ["city"]=> string(6) "成都" ["province"]=> string(6) "四川" ["country"]=> string(6) "中国" ["headimgurl"]=> string(129) "http://thirdwx.qlogo.cn/mmopen/vi_32/JuV6pCO123H8xHXGe7goSW9tFy0PKLL1zSH3uVuJ9QZ9omZeZ8TjfWGdtjtOBLAs82VqriajFecBys0pGjicVBow/132" ["privilege"]=> array(0) { } ["unionid"]=> string(28) "oAnnw0ix6eEYev5w7AUR29VoS-ow" }
       
        //登录成功后跳转
    header("Location:************");
    }
    }
     
  • 相关阅读:
    Android开发 Android Studio2.0 教程从入门到精通Windows版
    SQLSERVER 执行过的语句查询
    通过身份证分析出生年月日、性别、年龄的SQL语句
    SQL 根据日期精确计算年龄
    SQL 语句转换格式函数Cast、Convert
    Delphi 单元
    【转】实现Ribbon风格的窗体
    Delphi的打开文件对话框-TOpenDialog
    Delphi数据类型转换
    深入理解javascript中的立即执行函数(function(){…})()
  • 原文地址:https://www.cnblogs.com/jj0219/p/10436664.html
Copyright © 2011-2022 走看看