收藏
回答

手机号快速验证组件、查询购买资源包的用量情况接口返回如何兼容免费场景?

场景:

1.我司微信小程序“我的”页面有一个绑定手机号的入口。点击后跳转到授权页面,授权页有一个手机号快速验证组件

2.现在需要在“我的”页面绑定手机号入口处通过服务端调用查询购买资源包用量的接口先判断是否有余额。有的话继续跳转到授权页;没有的话跳到另一个页面

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html手机号快速验证组件

https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/charge/api/charge_get_usage_detail.html(查询购买资源包的使用情况)

遇到的问题:

目前手机号快速验证组件有1000条的免费赠送余量,到2023/08/28开始收费,优先消耗赠送余量,再消耗购买的。理论上通过接口返回的effectiveAll > effectiveUse 就表示有余量。但目前未开始收费调用接口返回 effectiveAll 和 effectiveUse 的值都为0。无法通过effectiveAll > effectiveUse判断。

目前接口返回结果如下:

"errcode": 0,

  "all": "1000",

  "effectiveAll": "0",

  "total": 1,

  "detailList": [{

   "all": "1000",

   "used": "0",

   "source": 1,

   "startTime": 1692979200,

   "spuId": "10000077",

   "pkgId": "",

   "endTime": 4294967295,

   "skuId": "20000093",

   "status": 2

}],

疑问:

  1. 在 2023/08/28开始收费前,如果用户购买流量 effectiveAll 是否会变为购买的值,比如用户购买了1000条,effectiveAll 是否会变为 1000?
  2. 2023/08/28开始收费后,effectiveAll 是否会加上免费赠送的 1000 余量?
  3. total字段为1时是否就表示用户没有主动购买过流量,只有免费的流量?
  4. status 字段为 2 时表示“未生效”这个能不能作为初始免费赠额的标记?


我这边想到退而求其次的解决方法是可以用场景中的第一步中的手机号快速验证组件直接代替绑定手机号的入口,这样直接通过组件返回的错误码(1400001)就可以判断了。

在不改变原有逻辑的情况下,是否能通过调用查询购买资源包用量的接口返回的字段来解决这个问题??


2023/08/28

当前剩余可用的资源余量就是 all - effectiveUse

微信收费功能从28号起逐步覆盖

最后一次编辑于  2023-08-28
回答关注问题邀请回答
收藏

2 个回答

  • Ray
    Ray
    2023-08-19

    1. 判断 effectiveAll 和 effectiveUse:如果 effectiveAll > effectiveUse,那么表示有余量。如果 effectiveAll 和 effectiveUse 都为 0,那么可能是还在免费期,也可能是没有购买过资源包。这时你可以查看 detailList 中的 source 字段,如果 source 为 1(体验额度),那么表示还在免费期。


    2. 判断 status 字段:如果 status 为 2(未生效),那么表示资源包还没有开始使用,可能是还在免费期,也可能是购买的资源包还没有开始使用。这时你可以查看 detailList 中的 source 字段,如果 source 为 1(体验额度),那么表示还在免费期。


    3. 判断 total 字段:如果 total 为 1,那么表示只有一个资源包,可能是免费的,也可能是购买的。这时你可以查看 detailList 中的 source 字段,如果 source 为 1(体验额度),那么表示是免费的。


    在 2023/08/28 开始收费前,如果用户购买流量,effectiveAll 应该会变为购买的值。在 2023/08/28 开始收费后,effectiveAll 应该会加上免费赠送的 1000 余量。


    如果你想在不改变原有逻辑的情况下解决这个问题,你可以考虑在服务器端调用查询购买资源包用量的接口,然后根据返回的字段来判断是否有余量。如果有余量,那么继续跳转到授权页;如果没有余量,那么跳转到另一个页面。

    2023-08-19
    有用 2
    回复 14
    • DeletedUser
      DeletedUser
      发表于移动端
      2023-08-19
      再请教两个问题: 1.detailList字段会包含所有的资源包吗?(包括免费的、购买的、过期的) 2.effectoveAll是不是也包含历史所有的免费的、可用的、不可用额度?
      2023-08-19
      回复
    • Ray
      Ray
      2023-08-19回复DeletedUser
      detailList字段会包含所有的资源包,包括免费的、购买的、过期的。这些资源包的状态可以通过status字段来区分,其中status字段的值为1表示资源包正在生效,值为2表示资源包未生效,值为3表示资源包已失效。
      2023-08-19
      回复
    • Ray
      Ray
      2023-08-19回复DeletedUser
      effectiveAll字段表示的是资源总量,包括历史所有的免费的、可用的、不可用的额度。这个字段的值是一个64位的数字,表示资源包的总量。
      2023-08-19
      回复
    • DeletedUser
      DeletedUser
      发表于移动端
      2023-08-19回复Ray
      十分感谢,祝你周末愉快
      2023-08-19
      回复
    • DeletedUser
      DeletedUser
      发表于移动端
      2023-08-19回复Ray
      effectiveAll包含不可用的,那么effectiveUse是不是也包含。不然无法单纯通过effectiveAll 大于 effectiveUse判断是否有余量。比如用户使用完免费额度又重新购买了1000条。这时effectiveAll是2000,effectiveUse是1000。如果用户购买的1000条过期了那么effectiveUse会变成2000吗?如果还是1000那就意味着只能通过遍历detailList里每个资源包来判断是不是有余量了?
      2023-08-19
      回复
    查看更多(9)
  • 一只小白
    一只小白
    2023-11-28

    谢谢楼主的贴子,我当前的需求和你目前的场景差不多

    2023-11-28
    有用
    回复
登录 后发表内容