如何在微信上建立公众号(微信公众号添加菜单栏和网页授权)

关注微信微信官方账号如何获取用户信息以及OpenID与手机号的绑定。

1.登录微信公众平台设置所需菜单,以绑定微信账号为例。





2.网址填写自己的接口地址或跳转地址。

3.后台界面(php仅供参考)



两个红圈的地址是这个接口的地址,这个可以获取用户的openid,下面这个接口是用户的openid和手机号进行绑定。

请参考下面的官方微信文档。

如果用户在微信客户端访问第三方网页,微信官方账号可以通过微信网页授权机制获取用户的基本信息,进而实现业务逻辑。

网页授权回调域名描述

1.微信微信官方账号请求用户网页授权前,开发者需要在公众平台官网“开发-接口权限-网页服务-网页账号-网页授权获取用户基本信息”的配置选项中修改授权回调域名。请注意,这里填写的是域名(是字符串),不是网址,所以请不要添加http://之类的协议头;

2.授权回调域名的配置规范是全域名,比如需要网页授权的域名是www.qq.com,配置后该域名以下的页面、http://www.qq.com/music.html、http://www.qq.com/login.html,可以通过OAuth2.0认证,但是http://pay.qq.com、http://music.qq.com、http://qq.com不能通过OAuth2.0认证

3.如果微信官方账号登录授权给第三方开发者进行管理,则不需要进行任何设置,第三方可以替换微信官方账号实现网页授权。

两种网页授权范围的区别说明

1.以snsapi_base为作用域发起的网页授权用于获取进入页面的用户的openid,并且是静默授权,自动跳转到回调页面。用户感知到的是直接进入回拨页面(往往是业务页面)。

2.以snsapi_userinfo为范围发起的网页授权用于获取用户的基本信息。但这种授权需要用户手动同意,而且既然用户已经同意,授权后就可以获取用户的基本信息,不用担心。

3.用户管理界面中的“获取用户基本信息界面”是指用户只有在与微信官方账号进行消息交互或关注后事件推送后,才能根据用户的OpenID获取用户基本信息。这个接口,包括其他微信接口,都需要用户(即openid)关注微信官方账号,才能调用成功。

关于网页授权access_token和普通access_token的区别

1.微信网页授权是通过OAuth2.0机制实现的。用户对微信官方账号进行授权后,微信官方账号可以获得网页授权独有的接口调用凭证(网页授权access_token),可以通过网页授权access_token进行授权后的接口调用,比如获取用户的基本信息;

2.其他微信接口,普通的access_token调用需要通过基础支持中的“get access_token”接口获取。

关于UnionID机制

1.请注意,获取用户基本信息的网页授权也遵循UnionID机制。即开发者如果需要统一多个微信官方账号中的用户账号,或者微信官方账号与移动应用之间的用户账号,需要先去微信开放平台(open.weixin.qq.com)绑定微信官方账号,才能使用UnionID机制满足上述要求。

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

关于特殊场景下的静音授权

1.如上所述,对于以snsapi_base为范围的网页授权,用户是默默不知情的;

2.对于已经关注微信官方账号的用户来说,如果用户从微信官方账号的会话或者自定义菜单进入这个微信官方账号的网页授权页面,即使范围是snsapi_userinfo,也是静默授权,用户并不知情。

具体来说,网页授权过程分为四个步骤:

1.引导用户进入授权页面同意授权并获取代码。

2.网页授权access_token的交换代码(不同于基本支持中的access_token)

3.如有必要,开发者可以刷新网页授权access_token,避免过期。

4.access_token和openid由网页授权获取用户的基本信息(支持UnionID机制)

目录

步骤1:用户同意授权并获得代码。

第二步:用代码换取网页授权access_token。

3步骤3:刷新访问令牌(如有必要)

第四步:拉取用户信息(作用域应该是snsapi_userinfo)

附件:检查授权证书(access_token)是否有效。


步骤1:用户同意授权并获得代码

在保证微信公众号拥有授权范围(scope参数)权限的前提下(服务号获得高级接口后,默认在scope参数中有snsapi_base和snsapi_userinfo),引导关注者打开如下页面:

https://open.weixin.qq.com/connect/oauth2/authorize? Appid = Appid & redirect _ uri = redirect _ uri & response _ type = code & scope = scope & state = state # we chat _ redirect如果提示“链接无法访问”,请检查参数是否填写错误,以及您是否拥有scope参数对应的授权范围权限。

特别注意:由于授权操作的安全级别较高,在发起授权请求时,微信会对常规强匹配的授权链接进行检查。如果链接的参数顺序错误,授权页面将无法正常访问。

参考链接(请在微信客户端打开此链接体验):

范围是snsapi_base

https://open.weixin.qq.com/connect/oauth2/authorize? appid = wx 520 c15 f 417810387 & redirect _ uri = https://chong . QQ . com/PHP/index . PHP % 3Fd % 3D % 26c % 3D wx adapter % 26m % 3D mobile deal % 26 showwxpaytitle % 3D 1% 26 vb2c tag % 3D 4 _ 2030 _ 5 _ 1194 _ 60 & response _ type = code & scope = SNS API _ base & state = 123 #微信_redirect

范围是snsapi_userinfo

https://open.weixin.qq.com/connect/oauth2/authorize? appid = wxf 0 e 81 C3 bee 622d 60 & redirect _ uri = http://NBA . blue web game . com/oauth _ response . PHP & response _ type = code & scope = snsapi _ userinfo & STATE = STATE # we chat _ redirect

特别注意:跳回redirect_uri,要用https链接保证授权代码的安全性。

参数描述

参数

我一定要吗

解释

应用编号

微信官方账号的唯一标识符。

重定向uri

授权重定向后回调链接的地址,请使用urlEncode处理链接。

响应类型

返回类型,请填写代码。

范围

应用授权范围,snsapi_base(不弹出授权页面,直接跳转,只获取用户openid),snsapi_userinfo(弹出授权页面,可以通过openid获取昵称,性别,位置)。并且,即使用户不关注,只要用户授权,就可以获取信息)。

状态

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

#微信_重定向

直接打开页面或者做302定向的时候一定要带这个参数。

下图显示了当scope等于snsapi_userinfo时的授权页面:



在用户同意授权之后

如果用户同意授权,页面会跳转到redirect_uri/?代码=代码&状态=状态.

代码描述:代码是一个交换access_token的账单。用户授权带上的代码每次都会不一样。密码只能使用一次,5分钟不使用自动失效。

错误返回代码描述如下:

建立公众号

返回代码

解释

10003

redirect_uri域名与后台配置不一致。

10004

此微信官方账号被封禁。

10005

这个微信官方账号没有这些范围的权限。

10006

注意这个测试号。

10009

操作过于频繁,请稍后再试。

10010

范围不能是空

10011

redirect_uri不能是空

10012

Appid不能是空

10013

状态不能是空

10015

微信官方账号未授权第三方平台。请检查授权状态。

10016

不支持微信开放平台的Appid,请使用微信官方账号Appid。


第二步:用代码换取网页授权访问令牌

首先请注意,这里的代码是换来一个特殊的网页授权access_token,和基础支持中的access_token不同(这个access_token是用来调用其他接口的)。微信官方账号可以通过以下接口获取网页授权access_token。如果网页授权的范围是snsapi_base,那么在这一步中,我们得到了网页授权access_token以及openid,snsapi_base风格的网页授权过程到此结束。

特别注意:由于微信官方账号的secret和access_token的安全级别非常高,所以必须只能存储在服务器中,不允许传输到客户端。诸如刷新access_token和通过access_token获取用户信息之类的后续步骤也必须从服务器发起。

请求方法

获取代码后,请求以下链接以获取访问令牌:https://api.weixin.qq.com/sns/oauth2/access_token?. APPID = APPID & SECRET = SECRET & CODE = CODE & grant _ type = authorization _ CODE

参数描述

参数

我一定要吗

解释

应用编号

微信官方账号的唯一标识符。

秘密

微信官方账号的appsecret

密码

填写第一步中获得的代码参数

授权类型

填写授权代码。

退货说明

正确返回的JSON包如下:

{ & # 34;访问令牌& # 34;:"访问令牌& # 34;, & # 34;expires _ in & # 34:7200, & # 34;刷新_令牌& # 34;:"刷新_令牌& # 34;, & # 34;openid & # 34:"OPENID & # 34, & # 34;范围& # 34;:"范围& # 34; } 参数

形容

访问令牌

授权网页界面调用凭证。注意:此access_token与基金会支持的access_token不同。

过期时间

access_token接口调用凭证的超时时间,单位(秒)

刷新_令牌

用户刷新访问令牌

信息

唯一用户标识,请注意,当用户在不关注微信官方账号的情况下访问微信官方账号的网页时,也会生成一个用户和微信官方账号的唯一OpenID。

范围

用户授权的范围,用逗号(,)分隔

如果出错,微信会返回如下JSON包(比如代码无效错误):

{"错误代码& # 34;:40029,"errmsg & # 34:"无效代码& # 34;}

步骤3:刷新access_token(如果需要)

因为access_token有效期短,所以当access_token超时时,可以用refresh_token刷新。refresh_token的有效期为30天。当refresh_token过期时,用户需要重新授权。

请求方法

在第二步中获得刷新令牌后,请求以下链接以获得访问令牌:https://api.weixin.qq.com/sns/oauth2/refresh_token?. APPID = APPID & grant _ type =刷新令牌& refresh _ token =刷新令牌

参数

我一定要吗

解释

应用编号

微信官方账号的唯一标识符。

授权类型

填写为refresh_token

刷新_令牌

填写通过access_token获得的refresh_token参数。

退货说明

正确返回的JSON包如下:

{ & # 34;访问令牌& # 34;:"访问令牌& # 34;, & # 34;expires _ in & # 34:7200, & # 34;刷新_令牌& # 34;:"刷新_令牌& # 34;, & # 34;openid & # 34:"OPENID & # 34, & # 34;范围& # 34;:"范围& # 34; } 参数

形容

访问令牌

授权网页界面调用凭证。注意:此access_token与基金会支持的access_token不同。

过期时间

access_token接口调用凭证的超时时间,单位(秒)

刷新_令牌

用户刷新访问令牌

信息

唯一用户标识

范围

用户授权的范围,用逗号(,)分隔

如果出错,微信会返回如下JSON包(比如代码无效错误):

{"错误代码& # 34;:40029,"errmsg & # 34:"无效代码& # 34;}

第四步:拉取用户信息(作用域为snsapi_userinfo)

如果网页的授权范围是snsapi_userinfo,那么开发者可以通过access_token和openid拉取用户信息。

请求方法

Http:GET(请使用https协议)https://api.weixin.qq.com/sns/userinfo? ACCESS _ TOKEN = ACCESS _ TOKEN & OPENID = OPENID & lang = zh _ CN

参数描述

参数

形容

访问令牌

授权网页界面调用凭证。注意:此access_token与基金会支持的access_token不同。

信息

用户的唯一标识符。

语言

返回国家语言版本,简体中文,繁体中文,英语。

退货说明

正确返回的JSON包如下:

{ "openid": "OPENID", "nickname": NICKNAME, "sex": 1, "province":"PROVINCE", "city":"CITY", "country":"COUNTRY", "headimgurl":"https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46", "privilege":[ "PRIVILEGE1" "PRIVILEGE2" ], "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" }

形容

信息

用户的唯一标识符。

绰号

用户昵称

用户的性别,值1为男性,值2为女性,值0未知。

填写用户配置文件的省份。

城市

由普通用户的个人数据填写的城市

国家

像中国这样的国家是CN

用户头像,最后一个值代表正方形头像的大小(0,46,64,96,132值可选,0代表640*640正方形头像),用户没有头像时此项为空。如果用户更改头像,原头像网址将失效。

特权

用户权限信息,json数组,如微信沃卡用户(中国联通)

珠蚌

该字段只有在用户将微信官方账号绑定到微信开放平台账号后才会出现。

参数{ & # 34;openid & # 34: "OPENID & # 34, & # 34;昵称& # 34;:昵称, & # 34;性& # 34;:1, & # 34;省& # 34;:"省& # 34;, & # 34;城市& # 34;:"城市& # 34;, & # 34;国家& # 34;:"国家& # 34;, & # 34;headimgurl & # 34:"https://thirdwx . qlogo . cn/mmopen/g3monuztnhkdmzicilib x 6 iafqac 56 vxls ufpb 6n 5 wksyvy 0 chqkkiajsgq 1 dzutogvllrhjberqq4 emsv 84 eavhiaiceqxibjxcfhe/46 & # 34;, & # 34;特权& # 34;:[ "特权1 & # 34;"特权2 & # 34;], & # 34;unionid & # 34: "o6 _ bmasdasdsad 6 _ 2s gvt 7 hmzopfl & # 34; } 参数

headimgurl头部模型

如有错误,微信会如下返回JSON包(比如openid无效):

{"错误代码& # 34;:40003,"errmsg & # 34:"无效的openid & # 34}

附件:检查授权证书(access_token)是否有效

请求方法

Http:GET(请使用https协议)https://api.weixin.qq.com/sns/auth?访问令牌=访问令牌&openid=OPENID

参数描述

参数

形容

访问令牌

授权网页界面调用凭证。注意:此access_token与基金会支持的access_token不同。

信息

用户的唯一标识符。

解释正确的JSON返回结果:

{ "错误代码& # 34;:0,"errmsg & # 34:"好& # 34;} 出错时JSON返回示例:

{ "errcode":40003,"errmsg":"invalid openid"}

您可以还会对下面的文章感兴趣

使用微信扫描二维码后

点击右上角发送给好友