微信开发(2)OAuth2.0

微信开发(2)OAuth2.0

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

登录你的微信测试号,在“体验接口权限表”中,找到:
这里写图片描述
图片链接
点击“修改”按钮,进入“OAuth2.0网页授权:
微信开发(2)OAuth2.0_第1张图片
图片链接
在“授权回调页面域名”中填写需要获取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)