1、手机号快速验证组件
手机号快速验证组件 旨在帮助开发者向用户发起手机号申请,并且必须经过用户同意后,开发者才可获得由平台验证后的手机号,进而为用户提供相应服务。
该能力与手机号实时验证组件的区别为:
- 手机号快速验证组件,平台会对号码进行验证,但不保证是实时验证;
- 手机号实时验证组件,在每次请求时,平台均会对用户选择的手机号进行实时验证。
2、拉起授权
定义一个按钮,open-type=“getPhoneNumber”,用户点击之后会拉起手机号授权组件,当用户点击并同意之后,通过 bindgetphonenumber 事件获取回调信息。
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
Page({getPhoneNumber (e) {console.log(e.detail.code) // 动态令牌console.log(e.detail.errMsg) // 回调信息(成功失败都会返回)console.log(e.detail.errno) // 错误码(失败时返回)}
})
3、通过code换取手机号
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import com.alibaba.fastjson2.JSONObject;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@Slf4j
@Tag(name = "WxMaUserController", description = "用户相关")
@RequiredArgsConstructor
@RestController
@RequestMapping("ma/user")
public class WxMaUserController {private final WxMaService wxMaService;@Operation(summary = "获取手机信息")@PostMapping("getUserPhone")public String getUserPhone(@RequestBody JSONObject jsonObject) throws WxErrorException {// 解密手机信息WxMaPhoneNumberInfo phoneNoInfo = wxMaService.getUserService().getPhoneNumber(jsonObject.getString("code"));return phoneNoInfo.toString();}
}
返回得到:
{"errcode":0,"errmsg":"ok","phone_info": {"phoneNumber":"xxxxxx","purePhoneNumber": "xxxxxx","countryCode": 86,"watermark": {"timestamp": 1637744274,"appid": "xxxx"}}
}
phoneNumber 为用户绑定的手机号(国外手机号会有区号),purePhoneNumber 为没有区号的手机号。
注意:
- 每个code有效期为5分钟,且只能消费一次。
- getPhoneNumber 返回的 code 与 wx.login 返回的 code 作用是不一样的,不能混用。
如您在阅读中发现不足,欢迎留言!!!