微信公众号/服务号登录
微信内部网页授权
第一步:请求CODE
https://open./connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
第二步:通过code获取access_token
https://api./sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
第三步:通过access_token调用接口
微信小程序登录
1调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。
2调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key。
移动应用微信登录
移动应用微信登录也是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。
移动应用终端本地拉起微信应用
移动应用扫码登录
其中开发者移动应用终端在本地拉起微信应用的步骤如下
第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;通过code参数加上AppID和AppSecret等,通过API换取access_token;通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
微信第三方平台授权
步骤1:第三方平台方获取预授权码(pre_auth_code)
预授权码是第三方平台方实现授权托管的必备信息,可以通过本文第3部分获取。
步骤2:引入用户进入授权页
第三方平台方可以在自己的网站中放置“微信公众号授权”或者“小程序授权”的入口,或生成授权链接放置在移动网页中,引导公众号和小程序管理员进入授权页。
方式一:授权注册页面扫码授权
授权页网址为:
https://mp./cgi-bin/componentloginpage?component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx&auth_type=xxx。
参数 是否必填 参数说明
component_appid 是 第三方平台方appid
pre_auth_code 是 预授权码
redirect_uri 是 回调URI
auth_type 否 要授权的帐号类型, 1则商户扫码后,手机端仅展示公众号、2表示仅展示小程序,3表示公众号和小程序都展示。如果为未制定,则默认小程序和公众号都展示。第三方平台开发者可以使用本字段来控制授权的帐号类型。
biz_appid 否 指定授权唯一的小程序或公众号
方式二:点击移动端链接快速授权
第三方平台方可以生成授权链接,将链接通过移动端直接发给授权管理员,管理员确认后即授权成功。
授权链接为:
https://mp./safe/bindcomponent?action=bindcomponent&auth_type=3&no_scan=1&component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx&auth_type=xxx&biz_appid=xxxx#wechat_redirect
参数 是否必填 参数说明
component_appid 是 第三方平台方appid
pre_auth_code 是 预授权码
redirect_uri 是 回调URI
auth_type 是 要授权的帐号类型:1则商户点击链接后,手机端仅展示公众号、2表示仅展示小程序,3表示公众号和小程序都展示。如果为未指定,则默认小程序和公众号都展示。第三方平台开发者可以使用本字段来控制授权的帐号类型。
biz_appid 否 指定授权唯一的小程序或公众号
注:auth_type、biz_appid两个字段互斥。
步骤3:用户确认并同意登录授权给第三方平台方
用户进入第三方平台授权页后,需要确认并同意将自己的公众号或小程序授权给第三方平台方,完成授权流程。
步骤4:授权后回调URI,得到授权码(authorization_code)和过期时间
授权流程完成后,授权页会自动跳转进入回调URI,并在URL参数中返回授权码和过期时间(redirect_url?auth_code=xxx&expires_in=600)
步骤5:利用授权码调用公众号或小程序的相关API
企业微信登录
获取access_token是调用企业微信API接口的第一步,相当于创建了一个登录凭证,其它的业务API接口,都需要依赖于access_token来鉴权调用者身份。
请求方式: GET(HTTPS)
请求地址: https://qyapi./cgi-bin/gettoken?corpid=ID&corpsecret=SECRET
因此开发者,在使用业务接口前,要明确access_token的颁发来源,使用正确的access_token。
而如果企业需要在打开的网页里面携带用户的身份信息,需要构造如下的链接来获取code参数
https://open./connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
然后再用下面该接口根据code获取成员信息
https://qyapi./cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE
通过OAuth2.0验证接口获取成员身份会有一定的时间开销。对于频繁获取成员身份的场景,建议采用如下方案:
1、企业应用中的URL链接直接填写企业自己的页面地址
2、成员操作跳转到步骤1的企业页面时,企业后台校验是否有标识成员身份的cookie(sessionID/token)信息,此cookie(sessionID/token)由企业生成
3、如果没有匹配的cookie,则重定向到OAuth验证链接,获取成员的身份信息后,由企业后台植入标识成员身份的cookie(sessionID/token)信息
4、根据cookie(sessionID/token)获取成员身份后,再进入相应的页面
UnionID 机制说明
如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。