微信公众号开发流程记录(用户授权与自定义分享)

一、网页授权:

微信文档:关于网页授权access_token和普通access_token的区别

(1)微信网页授权是通过OAuth2.0机制实现的,在用户授权给公众号后,公众号可以获取到一个网页授权特有的接口调用凭证(网页授权access_token),通过网页授权access_token可以进行授权后接口调用,如获取用户基本信息;

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

 

1、先在公众号里配置好授权域名。

“开发 - 接口权限 - 网页服务 -  网页授权 获取用户基本信息”的配置选项中,修改授权回调域名。

微信公众号开发流程记录(用户授权与自定义分享)_第1张图片


2、前端向微信发送特定格式的请求:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

让用户同意授权,获取code。这个请求里有appid、redirect_uri、response_type、scope、state参数,其中,redirect_uri就是真正要访问的后端接口。

同意授权后,微信会重定向到后端接口,并加上code和state参数。

code说明 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。

(scope参数有两个值:snsapi_base不弹出授权页面直接跳转,只能获取openid;snsapi_userinfo会弹出授权页面,可通过openid拿到用户基本信息。)

微信文档:关于网页授权的两种scope的区别说明

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

(2)以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注公众号,就可在授权后获取该用户的基本信息。


3、后端接口获取到code参数,向微信发送另一特定请求:

获取网页授权access_token、openid等授权信息,再进行自己的业务。(此处的网页授权access_token与基础支持中的access_token不同。)

注意后端接口需要有code和state入参,state可用于传自己的参数,也可空着,但必须有。

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

参数说明

参数 是否必须 说明
appid 公众号的唯一标识
secret 公众号的appsecret
code 填写第一步获取的code参数
grant_type 填写为authorization_code

返回说明

正确时返回的JSON数据包如下:

{ "access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE" }
参数 描述
access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
scope 用户授权的作用域,使用逗号(,)分隔

错误时微信会返回JSON数据包如下(示例为Code无效错误):

{"errcode":40029,"errmsg":"invalid code"}


4、后端若要进一步查询用户基本信息,还需向微信发送另一特定格式请求。(需scope为 snsapi_userinfo)

GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

 

二、获取分享配置:

1、先在公众号里配置好JS安全域名,和网页授权第一步在同一个位置配置。


2、获取基础支持access_token,缓存好,注意在公众号里配置IP白名单!!

微信公众号开发流程记录(用户授权与自定义分享)_第2张图片

https请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

参数说明:

参数 是否必须 说明
grant_type 获取access_token填写client_credential
appid 第三方用户唯一凭证
secret 第三方用户唯一凭证密钥,即appsecret

正常情况微信返回下述JSON数据包:

{"access_token":"ACCESS_TOKEN","expires_in":7200}
access_token 获取到的凭证
expires_in 凭证有效时间,单位:秒

错误时微信会返回错误码等JSON信息:

{"errcode":40013,"errmsg":"invalid appid"}

返回码说明:

返回码 说明
-1 系统繁忙,此时请开发者稍候再试
0 请求成功
40001 AppSecret错误或者AppSecret不属于这个公众号,请开发者确认AppSecret的正确性
40002 请确保grant_type字段值为client_credential
40164 调用接口的IP地址不在白名单中,请在接口IP白名单中进行设置。(小程序及小游戏调用不要求IP地址在白名单内。)

 

3、用access_token获取jsapi_ticket,缓存好。

微信文档:jsapi_ticket是公众号用于调用微信JS接口的临时票据,正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。

https请求方式: GET
https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

成功返回如下JSON:

{
"errcode":0,
"errmsg":"ok",
"ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
"expires_in":7200
}

4、使用SHA1加密算法生成签名signature=sha1(string1),string1字为 jsapi_ticket=...&noncestr=...×tamp=...&url=...键值对形式,这4个参数是按字段名的ASCII码从小到大排序,均为小写,noncestr是后端自己随机生成的字符串,url不转义,不包含#及后面的部分。

(注意返回给前端的config中,包括:appid、timestamp、nonceStr、signature,noncestr的key一定要写成nonceStr,前端传进接口的url要encode,在后端decode后再计算签名)

你可能感兴趣的:(work)