用户信息授权的场景?
场景一:想实现免登,既然是使用支付宝钱包,必然操作用户是支付宝会员,希望用户操作小程序的时候,不再进行二次登录,让用户的体验更好,此时就需要免登功能,即是该用户进来就自动登录成为该小程序的会员。
场景二:只想拿到用户的唯一编号,也不想在小程序界面上出现授权弹框,就能知道是哪个用户,去做对应业务处理。
场景三:希望能拿到更多的支付宝会员信息,如:昵称、头像、性别等,并落库到自己的会员系统里去。
场景四:仅做界面展示,不需要把信息传给后端。
不同场景该如何使用授权的接口或能力呢?
场景一与二的情况下,只需要获得支付宝会员的唯一标识符(user_id)即可,那么用到的支付宝能力有:my.getAuthCode、my.httpRequest、alipay.system.oauth.token,简单的交互流程如下:
值得注意的是scope赋值为auth_base即可,该类型仅能获得user_id。
场景三的情况下,不仅需要获得支付宝会员唯一标识符,还需要获得其他信息(详细),那么用到的支付宝能力有:my.getAuthCode、my.httpRequest、alipay.system.oauth.token、alipay.user.info.share,简单交互流程图如下:
值得注意的是scope需要赋值为auth_user。
场景四的情况下,只需要使用小程序的前端接口my.getAuthUserInfo,即可实现渲染的效果。
大致的流程已经清楚,接下来实操过程中经常会发生以下的一些疑问:
1、不同类型的授权能否一次性授权完成,例如既需要获取会员信息,又需要获取芝麻分?
A:这是支持的。只需要scope赋值的时候如此赋值即可:scopes:['auth_user','auth_zhima']。但是,建议在保证授权权限最小化的情况下,考虑分开授权。
2、code或token无效?
A:官网其实对code、token的作用有做详细的介绍,出现这个错误的原因无非是——
code无效:
已经使用过一次失效了或是超过24小时有效期;
token无效:
scope赋值的信息,与后面调用的接口是不匹配的,例如:scope用的是auth_user,结果后面调用的接口并非alipay.user.info.share,而是芝麻的接口;
token已失效,如:已经刷新了新的token,老token依旧在使用,或是过了令牌有效期等;
3、返回的会员信息没有想要的,例如:手机号、身份证之类的?
A:为了保证用户的隐私,这类敏感信息支付宝是不会开放使用的。那么,业务上确实需要怎么办?建议在小程序的前端界面里,增加需要的信息填写项,交由用户判断是否自行录入。
4、H5的授权里是有要求配置回调地址的,小程序的授权回调地址在哪里配置?
A:不需要配置。小程序的授权回调是通过success的前端回调函数来触发的,只需要在success里编写相应代码即可。
5、审核驳回,原因是首屏授权/强制授权?
A:小程序基于用户体验上的考虑,约束开发者在访问小程序的时候必须先让用户了解这个小程序的服务是什么,干什么用的。之后再在需要授权的地方,调用授权接口,这就是前面提到的授权权限最小化的原则。但是,小程序首页就需要用户登录,且有会员中心功能怎么办?此时建议按照下面的流程来优化授权的代码。
简言之:
第一步:通过静默授权,拿到user_id,把user_id在服务端的会员数据库里查一次,
第二步——情况一:如果user_id存在且拿token能正常调用alipay.user.share.info接口,拿到会员信息那说明授权是有效的,并且把会员数据库里同步更新一下,
第二步——情况二:如果user_id不存在或者user_id对应的token不存在或者token调用alipay.user.info.share接口报错,则说明他需要重新授权,此时不要让用户登录,在用户操作需要授权的页面或按钮时,提示他重新授权即可。
6、有没有不首屏弹框的授权?
A:有的,就是scope为auth_base,称之为用户信息授权。
后续常见问题,敬请期待.....