zoukankan      html  css  js  c++  java
  • 微信公众号授权获取用户信息

    https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

    1、token文件     同上一篇文章

    2、配置文件       同上一篇文章

    3、用户扫码跳转微信授权页面  code.php

    include "conf.php"; 
    // 微信端授权登录---生成二维码 $code_url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$re_url&response_type=code&scope=$scope&state=$state#wechat_redirect";
    include 'phpqrcode.php'; // 官网下载地址 https://sourceforge.net/projects/phpqrcode/files/
    $QR=time()'.png'; // 二维码图片名称 防止缓存
    $errorLevel = "L"; //定义纠错级别
    $size = "4"; //定义生成内容
    QRcode
    ::png($code_url, $QR, $errorLevel, $size, 2); // 执行生成图片
    echo '<img src="'.$QR.'">'; //输出二维码

    注意:二维码生成目录必须有创建写入文件权限

    edirect_uri 是 授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理 

    4、也可是使用用户微信端打开连接 (与 第3 步 执行方式不同)code.php

     include "conf.php";
    //https://mp.weixin.qq.com/cgi-bin/settingpage?t=setting/function&action=function&token=782251143&lang=zh_CN
    //网页授权域名 域名/wx,不带 http://
    
    $code_url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$re_url&response_type=code&scope=$scope&state=$state#wechat_redirect";
    header("Location:".$code_url);
    exit;

     注意:如果请问code是遇见 code been used, hints: [ req_id: Rwakxa0262th10 ],请刷新文件以及生成的二维码,在访问、测试

    5、通过用户点击同意授权获取用户信息  回调文件(code.php 文件中 $re_url 文件)wx_callback.php

    include "conf.php";  // 引入配置文件
    
    if(isset($_GET['code']) && isset($_GET["state"]))
    {
        if($state!=$_GET["state"])
        {
            exit("state_error");
        }
    
        $code=$_GET['code'];
        $token_url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code";
        $token_resturn=https_get($token_url);
        $token_data=json_decode($token_resturn,true);
    
        //如果请求 access_token 失败
        if(isset($token_data["errcode"]))
        {
            exit($token_data["errmsg"]);
        }
    
        $openid=$token_data["openid"];
        $web_access_token=$token_data["access_token"];
        $refresh_token=$token_data["refresh_token"];
    
        // 验证access_token 是否有效
        $refresh_url="https://api.weixin.qq.com/sns/auth?access_token=$web_access_token&openid=$openid";
        $refresh_info=https_get($refresh_url);
        $refresh_info=json_decode($refresh_info,true);
        // 如果access_token 过期
        if($refresh_info["errcode"]!==0)
        {
            //  刷新 access_token
            $refresh_access_token="https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=$appid&grant_type=refresh_token&refresh_token=$refresh_token";
            $refresh_resturn=https_get($refresh_access_token);
            $refresh_data=json_decode($refresh_resturn,true);
            // 如果刷新获取失败
            if(isset($refresh_data["errcode"]))
            {
                exit($refresh_data["errmsg"]);
            }
            // 如果成功再次赋值
            $web_access_token=$refresh_data["access_token"];
            $refresh_token=$refresh_data["refresh_token"];
        }
    
        // 拉取用户信息
        $user_url="https://api.weixin.qq.com/sns/userinfo?access_token=$web_access_token&openid=$openid&lang=zh_CN";
        $user_info=https_get($user_url);
        $user_info=json_decode($user_info,true);
        // 如果获取用户信息失败
        if(isset($user_info["errcode"]))
        {
            exit($user_info["errmsg"]);
        }
    
        /*$v=var_export($user_info,TRUE); // 获取用户信息写入数据库 测试
        file_put_contents("callback.txt",$v);*/
    }

     注意:如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE; 如果服务不支持 redirect_uri/ 这个种访问请问另外配置

    6、 tp3项目的nginx 服务器配置示例:

        #/模块名/控制器名/方法名
    location /Home/Wx/User/ { rewrite ^/Home/Wx/User/?(.*)$ /index.php?m=Home&c=Wx&a=User&$1 last; #去除回调文件后面的 / break; }

    注意: 微信端打开的页面如果文件中存在错误,只显示无法显示、打开网页;没有错误提示,try cathc 捕获不到错误。

  • 相关阅读:
    kindeditor编辑器上传图片
    asp.net mvc SelectList使用
    网站网页中加入各种分享按钮功能 百度分享
    asp.net mvc 多文件上传
    复习java web之jsp入门_El表达式_JSTL标签库
    jdbc 日期处理问题
    myeclispe 一直运行debug问题
    【BZOJ3425】Poi2013 Polarization 猜结论+DP
    【BZOJ2699】更新 动态规划
    【BZOJ3626】[LNOI2014]LCA 离线+树链剖分+线段树
  • 原文地址:https://www.cnblogs.com/xuey/p/9346643.html
Copyright © 2011-2022 走看看