欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-29 14:08:17
...

接口文档: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拉取用户信息,然后创建账号。