欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

微信网页授权(OAuth2.0) PHP 源码简单实现

程序员文章站 2024-02-28 10:08:46
提要:    1. 建议对oauth2.0协议做一个学习。    2. 微信官方文档和微信官网工具要得到充分利用。  比较简单,直接帖源...

提要: 
  1. 建议对oauth2.0协议做一个学习。 
  2. 微信官方文档和微信官网工具要得到充分利用。 
比较简单,直接帖源代码了。其中“xxxxxxxxxx”部分,是需要依据自己环境做替换的

/**
  * oauth2.0微信授权登录实现
  *
  * @author zzy
  * @文件名:getwxuserinfo.php
  */

 // 回调地址
 $url = urlencode("http://www.xxxxxxxxx.com/getwxuserinfo.php");
 // 公众号的id和secret
 $appid = 'xxxxxxxxx';
 $appsecret = 'xxxxxxxxx';
 session_start();

 
 // 获取code码,用于和微信服务器申请token。 注:依据oauth2.0要求,此处授权登录需要用户端操作
 if(!isset($_get['code']) && !isset($_session['code'])){
  echo 
  '<a href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx6c11a252ff1d00c4
  &redirect_uri='.$url.'&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect">
  <font style="font-size:30">授权</font></a>';
  
  exit;
 }
 
 // 依据code码去获取openid和access_token,自己的后台服务器直接向微信服务器申请即可
 if (isset($_get['code']) && !isset($_session['token'])){
  $_session['code'] = $_get['code'];
  
  $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid.
   "&secret=".$appsecret."&code=".$_get['code']."&grant_type=authorization_code";
  $res = https_request($url);
  $res=(json_decode($res, true));
  $_session['token'] = $res;
 }
 
 print_r($_session);
 
 // 依据申请到的access_token和openid,申请userinfo信息。
 if (isset($_session['token']['access_token'])){
  $url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$_session['token']['access_token']."&openid=".$_session['token']['openid']."&lang=zh_cn";
  echo $url;
  $res = https_request($url);
  $res = json_decode($res, true);
  
  $_session['userinfo'] = $res;

 }
 
 print_r($_session);

 // curl函数简单封装
 function https_request($url, $data = null)
 {
  $curl = curl_init();
  curl_setopt($curl, curlopt_url, $url);
  curl_setopt($curl, curlopt_ssl_verifypeer, false);
  curl_setopt($curl, curlopt_ssl_verifyhost, false);
  if (!empty($data)){
   curl_setopt($curl, curlopt_post, 1);
   curl_setopt($curl, curlopt_postfields, $data);
  }
  curl_setopt($curl, curlopt_returntransfer, 1);
  $output = curl_exec($curl);
  curl_close($curl);
  return $output;
 } 

得到正确结果如下:

array
(
 [code] => 041gzi4l0tvghg10n75l05fq4l0gzi42
 [token] => array
  (
   [access_token] => two6w5qmpztzibu3fph2k4edc5bllp4sgeqkc4nbztj-zti-ctzj1srrnl1qgcf2lb1-6o3n7kh2bcxl5bxtqqjegk1cq12l8czf40r9xva
   [expires_in] => 7200
   [refresh_token] => iz3olcrkqpbojvssh2bokva09sjvsp1c8ltm7mvxxpfqxsbvi_wovmzhjqaszwlma7taggsg3mijmahjl7jrjhdquf1jkbhd6gndnltxq0u
   [openid] => ota_xwq4r_5niovmshq
   [scope] => snsapi_userinfo
  )

 [userinfo] => array
  (
   [openid] => ota_xwq4r_5niovmshqq
   [nickname] => 野狐
   [sex] => 1
   [language] => zh_cn
   [city] => 杭州
   [province] => 浙江
   [country] => 中国
   [headimgurl] => http://wx.qlogo.cn/mmopen/piajxsqbraelwee7rhrt2ibnkc1menu04wiawrw9fkupbbgognrmbynnoeuxicgxoetw5vqqbtrs4fzdxnvawsz6gq/0
   [privilege] => array
    (
    )

  )

)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。