微信内网页开发 - 授权登录

接口文档:http://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html

一、开发者需要先到公众平台官网中的开发者中心页配置授权回调域名,也就是授权链接里面的redirect_url指向的服务器域名。

比如你的REDIRECT_URI是 http://www.iteye.com/cgi-bin/wechat.pl ,那么回调域名就是 www.iteye.com

二、举例:公众号底部设置一个菜单:登录, 它的链接可以如下:

1、静默授权(不需要用户手动点击同意)SCOPE是snsapi_base,只能获取用户的openid

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=http://www.iteye.com/cgi-bin/wechat.pl&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect

2、SCOPE是snsapi_userinfo,用来获取用户的基本信息的。但需要用户手动同意(无须关注),就可在授权后获取该用户的基本信息。

三、如果用户同意授权,微信服务器将重定向到redirect_uri,也就是http://www.iteye.com/cgi-bin/wechat.pl/?code=CODE&state=STATE,也就是将code返回给服务端的CGI脚本,脚本就可以获取openid(用户基本信息)

if ($cgi->param('code')) {

my $code = $cgi->param('code');

my $state = $cgi->param('state');

my $wechat = GetOpenidToken($code, $state);

my $openid = $wechat->{openid};

my $token = $wechat->{access_token};

my $unionid = $wechat->{unionid};

write_log("code=$code, openid=$openid, token=$token, unionid=$unionid\nstate=".$state."\n");

 

$redirect_url = "http://xxxx/test.html?openid=$openid&state=".$state;

print $cgi->redirect($redirect_url);

}

sub GetOpenidToken {

my $code = $_[0];

my $state = $_[1];

//通过code换取网页授权access_token

my $url =  "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$APPID."&secret=".$SECRET."&code=".$code."&grant_type=authorization_code"; 

my $json = JSON->new();

my $ua = LWP::UserAgent->new();

#runging curl,get this json respons

my $req = HTTP::Request->new('POST', $url); 

my $response = $ua->request($req);

 

//如果网页授权作用域为snsapi_userinfo,则可以通过access_token和openid拉取用户信息了。

my $url2 =  "https://api.weixin.qq.com/sns/userinfo?access_token=".$ACCESS_TOKEN."&openid=".$OPENID."&lang=zh_CN";

}

关于state

重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节。

服务端获得用户信息后可以根据 不同的state值 来跳转到不同的H5页面

关于UnionID机制

1、请注意,网页授权获取用户基本信息也遵循UnionID机制。即如果开发者有在多个公众号,或在公众号(H5应用)、移动APP应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。

2、UnionID机制的作用说明:如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为同一用户,对同一个微信开放平台下的不同应用(移动应用、网站应用和公众帐号),unionid是相同的。

 关于移动APP授权登录

       现在大多数移动APP都支持通过微信直接登录应用,无需注册账号,那么服务端一般就会通过获取用户的微信信息(unionid, 微信昵称,头像,性别等)来创建用户账号。

       流程一般是:APP前端调用微信提供的SDK授权登录,获得用户的access_token,openid然后传给服务端,服务端通过access_token和openid拉取用户信息,然后创建账号。

猜你喜欢

转载自lzqustc.iteye.com/blog/2364782