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 作用是不一樣的,不能混用。
如您在閱讀中發現不足,歡迎留言!!!