• 微信公众账号开发之微信登陆Oauth授权-第一篇


    我曾经在2012年的时候开始研究微信,那时微信的版本还是处于1.0,当时给朋友帮忙做一个基于微信端的web应用,官方的文档是相当少的,百度搜索出来的东西基本也没有多少实用价值,不过是在官网的基础上作了很少一些改动,就傲骄的发上去说是原创。目前的微信文档已经完善了很多,不过就我个人而言,仍过于有些宽泛,应该详细的地方未做补充,甚至是官方的SDK都有问题(其中有一个微信支付模块下的单词拼错了),给开发者带来不少困扰。

    趁着现在手上的事情不多,我打算做一期微信的开发专栏,把每个步骤都尽可能的记录下来,当然,有不足的地方请大家纠正。

    第一篇:微信登陆Oauth授权

    开发者首先要在公众号中配置好授权域名

    1.登陆公众号管理后台

    点击接口权限,找到右边栏里的 网页授权获取用户基本信息 点击 修改输入需要授权的域名信息,域名前缀不需要输入http或https

    2.查看公众号APPID

    点击左侧的基本配置,找到右边的APPID项,截图如下:

    3.获取网站回调code

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

    链接中的APPID对应公众号中的APPID,REDIRECT_URL对应授权后回调的域名,这个域名必须和配置的网页回调域名一致,微信会有强制正则校验

    SCOPE有snsapi_base和snsapi_userinfo两种类型,snsapi_base获取用户基本信息

    4.通过code换取授权的access_token

    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

    微信授权中有两个access_token,一个全局token,可用来获取用户详细信息、发送文字、图片等,这个获取到的access_token是临时网页授权token

    正确返回的JSON格式如下:

    {
       "access_token":"ACCESS_TOKEN",
       "expires_in":7200,
       "refresh_token":"REFRESH_TOKEN",
       "openid":"OPENID",
       "scope":"SCOPE",
       "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
    }
    

    返回参数的详细介绍参考官方文档:

    http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html

    PHP示例文档

    <?php
    $act = !empty($_REQUEST['act']) ? $_REQUEST['act'] : 'oauth';
    $appid = 'XXX';
    $secret = "XXX";
    if($act=='oauth'){
    
    $redirect_uri ='http%3a%2f%2fwww.XXX.com%2froute.php%3fact%3dcallback';
    if(!empty($_REQUEST['redirect_uri']))
    {
    	$redirect_uri.=urlencode('&redirect_uri='.$_REQUEST['redirect_uri']);
    }
    
    $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.$redirect_uri.'&response_type=code&scope=snsapi_userinfo&state=123&connect_redirect=1#wechat_redirect';
    header('location:'.$url);
    }
    else{
    	$code = $_GET["code"];
            $redirect_uri = $_GET['redirect_uri'];
    	$get_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code';
    	$json_obj = json_decode(file_get_contents($get_token_url));
    	if(isset($json_obj->errcode))
    	{
    		die('error');
    	}
    	$openid = $json_obj->openid;
    	if(!empty($redirect_uri))
    		{
    		  $symbol =preg_match('/.*((.php)|/)$/',$redirect_uri) ? '?' : '&';
    		  $url =$redirect_uri.$symbol.'openid='.$openid;
    		 
    		 header('location:'.$url);
    		  die();
    		}
    	header('location:https://www.XXX.com/mobile/index.php?source=weixin&openid='.$openid);
    }	
    

    
    
    
    
    
  • 相关阅读:
    推荐大家使用的CSS书写规范、顺序
    只能输入数字的文本框
    js和jQuery 获取屏幕高度、宽度
    jquery插件开发规范
    ie下使用firebug
    equals和==的使用
    引用数据类型的赋值
    数组工具Arrays的基本使用
    冒泡排序
    使用数组对杨辉三角练习
  • 原文地址:https://www.cnblogs.com/yzp12sina/p/5393485.html
Copyright © 2020-2023  润新知