微信小程序中OCR身份证识别流程

电玩女神 2022-12-10 01:16 1293阅读 0赞

申请权限

登录微信小程序开发平台

设置 -> 第三方设置 -> 插件管理

在这里插入图片描述

点击添加,搜索OCR添加即可,如下图所示
在这里插入图片描述

点击详情可以看到插件的开发文档

文档传送门

这里值得注意的是要从开放平台购买微信 OCR 识别

在这里插入图片描述
不购买直接调用识别接口会报错 101003,官方文档并没有解释101003是因为没有购买。

这里购买每天一百次,一年以内都是免费的

代码

如果是原生微信小程序的写法,直接按照开发文档引入即可

OCR.idcard为例

因为 uni-app 中并没有可以支持微信小程序 OCR 功能的插件,所以我们为了适配直接在 uni-app 里面使用微信原生的 api 方法

根据官方文档,我们将步骤分为三步走

  1. 获取accessToken
  2. 选择本地图片(或者选择已经上传成功图片的网络地址)
  3. 调用接口进行识别

获取accesstoken 需要 appId 和 secret ,这两个参数在小程序开放平台均可查看

直接上代码

  1. // 获取accessToken
  2. getAccessToken() {
  3. return new Promise((resolve, reject) => {
  4. uni.request({
  5. url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=*****&secret=***',
  6. }).then(response => {
  7. // 这里的返回结果是经过我们自己封装的,请根据自己的实际情况返回
  8. if(response[1].statusCode === 200) {
  9. resolve(response[1].data.access_token)
  10. } else {
  11. reject(error)
  12. }
  13. }).catch(error => {
  14. reject(error)
  15. })
  16. })
  17. }
  18. // OCR证件识别 - 仅用于微信小程序
  19. async identifyIDcard() {
  20. const accessToken = await this.getAccessToken()
  21. console.log(accessToken)
  22. // 这里使用的是uni,但并不影响,改成wx也可行,不比纠结
  23. uni.chooseMedia({
  24. count: 1,
  25. sourceType: ['album', 'camera'],
  26. success(res) {
  27. console.log(res.tempFiles[0].tempFilePath)
  28. // 这里亲测了使用上传文件的临时缓存地址不可辨别!!!
  29. // 请使用上传成功后的网络地址或将图片作为 FormData 直接上传
  30. uni.request({
  31. url: 'https://api.weixin.qq.com/cv/ocr/idcard?type=photo&img_url=' + encodeURIComponent('https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2582405855,2667866727&fm=26&gp=0.jpg') + '&access_token=' + accessToken,
  32. method: 'POST',
  33. success: function(response) {
  34. console.log(response)
  35. if(response.statusCode === 200 && response.data.errcode === 0) {
  36. wx.showToast({
  37. title: response.data.name + '识别成功'
  38. })
  39. } else {
  40. wx.showToast({
  41. title: response.data.errmsg
  42. })
  43. }
  44. },
  45. fail: function(error) {
  46. wx.showToast({
  47. title: error
  48. })
  49. }
  50. })
  51. }
  52. })
  53. }

我从网上随便找了一张示例图:

在这里插入图片描述

到此,我们需要的就可以了

值得注意的是,虽然我写了 chooseImage ,但其实是没有用到的

我们看一下执行结果

在这里插入图片描述
识别成功!

切记:101003的错误原因是因为没有申请免费试用权限

直接使用封装好的按钮

此种方法只能使用在线扫描,无法使用在线地址

逻辑为:扫描成功后上传服务器

其余申请权限都一样,JS方法不需要写

分别在app.json和page.json中添加使用的模块

  1. "usingComponents": {
  2. "ocr-navigator": "plugin://ocr-plugin/ocr-navigator"
  3. }

然后在wxml中写入:

  1. <!-- 直接调用按钮,无需自己写方法 -->
  2. <ocr-navigator bind:onSuccess="success" certificateType="idCard" :opposite="false">
  3. <button type="primary" class="mainBtn">拍摄身份证头像面</button>
  4. </ocr-navigator>

在这里插入图片描述

样式如上,可以自行修改

我们真机调试一下

这是调用识别成功之后的返回身份信息

在这里插入图片描述

识别成功之后我们就可以将正确的证照图片上传到服务器上

发表评论

表情:
评论列表 (有 0 条评论,1293人围观)

还没有评论,来说两句吧...

相关阅读