微信开发(2)OAuth2.0

来源:互联网 发布:mac 最近使用字体 编辑:程序博客网 时间:2024/05/16 01:06

微信开发(2)OAuth2.0

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

登录你的微信测试号,在“体验接口权限表”中,找到:
这里写图片描述
图片链接
点击“修改”按钮,进入“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

0 0
原创粉丝点击