微信开发(2)OAuth2.0

微信开发(2)OAuth2.0

在微网站中,获取用户资料比如说用户的openID,需要使用到微信的OAuth2.0接口。

登录你的微信测试号,在“体验接口权限表”中,找到:
微信开发(2)OAuth2.0
图片链接
点击“修改”按钮,进入“OAuth2.0网页授权:
微信开发(2)OAuth2.0
图片链接
在“授权回调页面域名”中填写需要获取OAuth2.0接口的页面(或网站)的域名地址,比如:

xxx.sinaapp.com

需要填写完整域名(即包括二级域名xxx.sinaapp.com前面的xxx)。然后点击确认。

使用前面的create.php页面,添加一个测试OAuth2.0的网页URL菜单,菜单的JSON结构如下:

{
"type":"view",
"name":"OAuth2网页授权",
    "url":"https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx1234567890&redirect_uri= openid.php&response_type=code&scope=snsapi_base&state=1#wechat_redirect"
}

JSON数组中的url字段需要按一定格式构造。其中,appid参数为你的公众号的AppID,redirect_uri为需要授权的页面url,这里是http://xxx.sinaapp.com/oauth2/openid.php。注意,这个url中的域名需跟“授权回调页面域名”相一致。
注意,这里使用的scope是snsapi_base方式,只能获得用户的openid。

然后开始编写代码。在上述URL的服务器上新建一个openid.php文件,代码如下:

<?php
// 使用方倍工作室的微信API接口
require_once("../weixin.class.php");
// 填写测试号(或公众号)的AppID
$appid="wx1234567890";
// 填写测试号(或公众号)的AppSecret
$appsecret="abcdefghijklmnopqrst";
// 当腾讯返回code之后,会将code传递给回调页面(即redirect_uri)。
$code = $_GET["code"];
// 实例化一个微信高级API接口对象,注意传入AppID和AppSecret
$weixin = new class_weixin_adv($appid,$appsecret);
// 调用getUserInfo方法,将code传入,以获取用户信息
$userinfo = getUserInfo($code);
// 将用户信息编码为字符串
$jsonstr =json_encode($userinfo);
// 将编码后的用户数据传到另一个页面
$url="display.php?value=" . $jsonstr;
// 跳转到另一个页面
header("location:" . $url);

// getUserInfo函数定义
function getUserInfo($code)
{
    // 从函数外部获取AppID、AppSecret和微信接口对象
    $appid=$GLOBALS[‘appid‘];
    $appsecret=$GLOBALS[‘appsecret‘];
    $weixin=$GLOBALS[‘weixin‘];
    //以code换openid,采用的是snsapi_base方式,这种方式只能获得openid
    $access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code";
    $access_token_json = $weixin->https_request($access_token_url);
    $access_token_array = json_decode($access_token_json, true);
    $openid = $access_token_array[‘openid‘];

    // 获得openid后,再调用微信接口对象的get_user_info方法获取用户信息
$userinfo_array=$weixin->get_user_info($openid);
    return $userinfo_array;
}
?>

再编写一个display.php,当openid.php跳转到display.php是会带上一个value参数,这个参数中包含了用户信息的JSON字串。
你可以中display.php中这样接收value参数:

<?php
    // 获取value字符串
$value=$_GET["value"];
    // 转成数组对象
    $userinfo=json_decode($value, true);
?>

然后,你可以用这个$userinfo干任何事情,比如显示用户的资料,保存到数据库,或者将openid和你的网站用户进行绑定。
这里,我仅仅用HTML代码显示了下用户个人信息。

打开微信,重新关注你的测试号(以便新增加的菜单生效)。进入测试公众号,点击“OAuth2网页授权”菜单按钮,将获取到用户资料,并在display.php中显示出来。

常见问题处理:

1、 redirect _uri 参数错误
有两个原因导致此错误:授权回调页面域名填写不正确,或者回调页面参数redirect_uri填写不正确。比如上面的URL:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx1234567890&redirect_uri= openid.php&response_type=code&scope=snsapi_base&state=1#wechat_redirect
其中我们的redirect_uri是openid.php,当此页面不存在或者路径写错时会提示此错误。最好用绝对路径的写法,即:
redirect_uri= http://xxx.sinaapp.com/wxpay/openid.php

版权声明:本文为博主原创文章,未经博主允许不得转载。

微信开发(2)OAuth2.0

上一篇:微信SDK开发学习第一课


下一篇:我们做微信二次开发的意义