使用 apifm-wxapi 开发微信小程序之用户信息/实名认证

前言

本教程是基于 “apifm-wxapi” 模块,教你快速实现小程序开发,所以你可能需要先了解以下知识点:

《创建 HelloWorld 项目》
《使用 “apifm-wxapi” 快速开发小程序》
《免费注册开通后台,获得专属域名》

本案例中,部分功能,需要用户登录后才能操作,也就是说需要 token 授权,请先了解:

《微信小程序登录获取openid及三方token》

功能介绍

本例带大家小程序快速实现以下5个功能:

  1. 读取当前登录用户的用户资料: 基础信息、扩展信息、实名信息等;
  2. 读取当前登录用户的 openid、unionid;
  3. 修改用户资料:所在省市、昵称、头像、扩展属性;
  4. 实名认证:填写正确的姓名、身份证号码进行快速认证;
  5. 退出登录

启用模块

登录 “第一步” 注册的后台,左侧菜单 --> 工厂设置 --> 模块管理

找到并启用下述模块:

  1. 实名认证

实名认证需要通过公安接口进行校验姓名和身份证号码是否匹配,所以务必要先启用模块,否则会提示模块未开启

实名认证接口为收费接口,你需要在启用模块的地方充值接口调用次数后方可使用实名认证功能

apifm-wxapi 方法说明

获取用户信息

WXAPI.userDetail(token)

base 数据存放了用户的基础信息;

idcard 数据存放了用户的实名认证信息[如果用户有通过实名认证的话]

ext 数据存放了用户的扩展属性

获取用户id、openid、unionid

WXAPI.userWxinfo(token)

获取当前登录用户的用户id、openid、unionid

修改用户资料

WXAPI.modifyUserInfo(Object object)

实名认证

WXAPI.idcardCheck(token, name, idCardNo)

身份证实名认证方法,校验姓名和身份证号码是否匹配

name 为真实姓名;idCardNo 为身份证号码

退出登录

WXAPI.loginout(token)

退出后,当前token将立刻失效

小程序开发

效果截图

13379300-08a882df057766a6.png
用户中心
13379300-4f5a5834180af37a.png
实名认证
13379300-71beca7cad2686c5.png
编辑用户资料

小程序代码

读取用户资料 / 修改资料

<view class="page">
  <view class="page__bd">
    <form bindsubmit="bindSave" report-submit="true">
      <view class="weui-cells weui-cells_after-title">
        <view class="weui-cell">
          <view class="weui-cell__hd">
            <view class="weui-label">省份</view>
          </view>
          <view class="weui-cell__bd">
            <input name="province" value="{{ userInfo.base.province }}" class="weui-input" placeholder="请输入所在省份" />
          </view>
        </view>
        <view class="weui-cell">
          <view class="weui-cell__hd">
            <view class="weui-label">城市</view>
          </view>
          <view class="weui-cell__bd">
            <input name="city" value="{{ userInfo.base.city }}" class="weui-input" placeholder="请输入所在城市" />
          </view>
        </view>
        <view class="weui-cell">
          <view class="weui-cell__hd">
            <view class="weui-label">昵称</view>
          </view>
          <view class="weui-cell__bd">
            <input name="nick" value="{{ userInfo.base.nick }}" class="weui-input" placeholder="请输入你的昵称" />
          </view>
        </view>
      </view>
      <view class="weui-cells__tips">思考题: 尝试实现上传(更换)头像</view>
      <view class="weui-cells weui-cells_after-title">
        <view class="weui-cell">
          <view class="weui-cell__hd">
            <view class="weui-label">学校</view>
          </view>
          <view class="weui-cell__bd">
            <input name="school" value="{{ userInfo.ext['学校'] }}" class="weui-input" placeholder="请输入你就读的大学" />
          </view>
        </view>
        <view class="weui-cell">
          <view class="weui-cell__hd">
            <view class="weui-label">年龄</view>
          </view>
          <view class="weui-cell__bd">
            <input name="age" value="{{ userInfo.ext['年龄'] }}" class="weui-input" placeholder="请输入你的芳龄" />
          </view>
        </view>
        <view class="weui-cell">
          <view class="weui-cell__hd">
            <view class="weui-label">微信号</view>
          </view>
          <view class="weui-cell__bd">
            <input name="wx" value="{{ userInfo.ext['微信号'] }}" class="weui-input" placeholder="请输入你的微信号码" />
          </view>
        </view>
      </view>
      <view class="weui-cells__tips">以上为用户的扩展属性,要多少加多少</view>

      <view class="weui-btn-area">
        <button class="weui-btn" type="primary" formType="submit">编辑</button>
      </view>
    </form>
  </view>
</view>
const WXAPI = require('apifm-wxapi')

Page({
  data: {
    userInfo: undefined
  },
  onLoad: function (options) {

  },
  onShow: function () {
    const loginToken = wx.getStorageSync('loginToken')
    if (!loginToken) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      })
      this.goRegist()
      return
    }
    WXAPI.userDetail(loginToken.token).then(res => {
      console.log(res)
      if(res.code == 0){
        this.setData({
          userInfo: res.data
        })
      }
    })
  },
  goRegist() {
    wx.navigateTo({
      url: '/pages/auth/index'
    })
  },
  bindSave(e) {
    const loginToken = wx.getStorageSync('loginToken')
    if (!loginToken) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      })
      this.goRegist()
      return
    }
    const province = e.detail.value.province;
    const city = e.detail.value.city;
    const nick = e.detail.value.nick;

    const extJsonStr = {}
    extJsonStr['学校'] = e.detail.value.school
    extJsonStr['年龄'] = e.detail.value.age
    extJsonStr['微信号'] = e.detail.value.wx

    WXAPI.modifyUserInfo({
      token: loginToken.token,
      province,
      city,
      nick,
      extJsonStr: JSON.stringify(extJsonStr)
    }).then(res => {
      console.log(res)
      if (res.code == 0) {
        wx.showToast({
          title: '修改成功',
          icon: 'success'
        })
      } else {
        wx.showToast({
          title: res.msg,
          icon: 'none'
        })
      }
    })
  },
})

实名认证

<view class="page">
  <view class="page__bd">
    <form bindsubmit="bindSave" report-submit="true">
      <view class="weui-cells weui-cells_after-title">
        <view class="weui-cell ">
          <view class="weui-cell__hd">
            <view class="weui-label">姓名</view>
          </view>
          <view class="weui-cell__bd">
            <input name="name" class="weui-input" placeholder="请输入真实姓名" />
          </view>
        </view>
        <view class="weui-cell ">
          <view class="weui-cell__hd">
            <view class="weui-label">身份证</view>
          </view>
          <view class="weui-cell__bd">
            <input name="idCardNo" class="weui-input" placeholder="请输入身份证号码" />
          </view>
        </view>
      </view>
      <view class="weui-btn-area">
        <button class="weui-btn" type="primary" formType="submit">实名认证</button>
      </view>
    </form>
  </view>
</view>
const WXAPI = require('apifm-wxapi')

Page({
  data: {

  },
  onLoad: function (options) {

  },
  onShow: function () {

  },
  goRegist() {
    wx.navigateTo({
      url: '/pages/auth/index'
    })
  },
  bindSave(e) {
    const loginToken = wx.getStorageSync('loginToken')
    if (!loginToken) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      })
      this.goRegist()
      return
    }
    const name = e.detail.value.name;
    const idCardNo = e.detail.value.idCardNo;
    if (!name || !idCardNo) {
      wx.showToast({
        title: '信息未填写',
        icon: 'none'
      })
      return
    }
    WXAPI.idcardCheck(loginToken.token, name, idCardNo).then(res => {
      console.log(res)
      if (res.code == 0) {
        wx.showToast({
          title: '认证通过',
          icon: 'success'
        })
      } else {
        wx.showToast({
          title: res.msg,
          icon: 'none'
        })
      }
    })
  },
})

获取openid / unionid

<button type="primary" bindtap="openid">获取openid / unionid</button>
openid(){
    const loginToken = wx.getStorageSync('loginToken')
    if (!loginToken) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      })
      return
    }
    WXAPI.userWxinfo(loginToken.token).then(res => {
      console.log(res)
      wx.showToast({
        title: '查看控制台',
        icon: 'success'
      })
    })
  }

退出登录

<button type="warn" bindtap="loginout">退出</button>
loginout(){
    const loginToken = wx.getStorageSync('loginToken')
    if (loginToken) {
      WXAPI.loginout(loginToken.token).then(res => {
        if (res.code == 0) {
          wx.showToast({
            title: '退出成功',
            icon: 'success'
          })
          wx.clearStorage()
        } else {
          wx.showToast({
            title: res.msg,
            icon: 'none'
          })
        }
      })
    } else {
      wx.showToast({
        title: '退出成功',
        icon: 'success'
      })
    }
  }

关于更加详细的参数使用,以及更加高级的进阶使用方法,可以参考api接口文档说明:

《api接口文档》

关于 apifm-wxapi 更多的使用方法:

《apifm-wxapi使用说明》

本案例Demo代码下载:

《apifm-wxapi使用Demo程序》

期待你的进步!
感谢!

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

api工厂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值