我理解的流程是:
第一步:用户在界面中点击授权按钮
随后有三种可能
- 微信绑定号码:用户选择该项后,回调收到code,并记一次扣费
- 使用其他号码:转变为手动录入
- 不允许:关闭界面,扣费
1.3没啥问题,关键是这个2步骤,是在点击授权按钮后才能进行选择,并且小程序代码不感知。
如果小程序业务本身对于openid授权的手机号在远程存储,那只能是在发现当前openid对应的手机号存储过,则将一键授权按钮隐藏,避免二次授权和扣费;
但同时也会导致功能2无法使用,一个openid只能强制使用业务自己存储过的手机号(或者是再额外做一个业务流程让用户切换手机号?)
如果不做openid的判断处理,会导致同一个C端用户,反复点击授权按钮就会不断扣费。
最多只能做到小程序生命周期内的判重,如果用户清理缓存后依然无法防止重复扣费。
明确一个实际场景
如果提前根据openid判断已经授权过手机号,那么是否要使用open-type=getPhoneNumber的按钮呢?;
- 如果用,可能被重复收费。
- 如果不用,就没有“使用其他手机号”的机会
本质问题是getPhoneNumber之后的选择权,开发者无法控制和感知,但这个选择中包含了收费或不收费的可能
小程序有风险用户识别,可以对接一下https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/sec-center/safety-control-capability/getUserRiskRank.html,
然后登陆用用户的openid就行了,手机号算会员的一个属性,第一次注册记录下来就行了,后续不用重复读取。根据openid判断是否已经授权过手机号,授权过就不需要反复记录了,未授权的必要场景读取一次就行
点了手机号才收钱。。。