• uniapp开发微信小程序-用户授权登录和获取手机号码


     小程序开放文档

    uniapp开发的小程序配置,找到manifest.json,填入正确的小程序appId;

    hbuilderx>运行>运行到小程序模拟器(安装开发者工具),编译完成之后会直接在微信开发者工具内打开;

     登录流程解析:

    1. 判断用户是否登录,如果未登录需重新授权,已登录直接跳转进入小程序;
    2. uni.getUserProfile 弹出微信授权窗口,获取用户信息;
    3. uni.login登录成功获取code,传给后端;
    4. 创建getPhoneNumber按钮,用户允许后(需要用户操作),获取code,传给后端;

     核心代码:

    1、判断用户是否登录

    1. onLoad() {
    2. // #ifdef MP-WEIXIN
    3. const token = this.$Storage.getToken()
    4. console.log('token===========', token)
    5. if(!token) {
    6. this.wechatLogin() // 登录授权
    7. } else {
    8. uni.switchTab({
    9. url: '/pages/home/index'
    10. });
    11. }
    12. // #endif
    13. },

     2、授权登录弹窗,获取用户信息

    1. wechatLogin() {
    2. uni.showModal({
    3. title: '授权登录',
    4. content: '是否授权登录微信小程序?',
    5. success: () => {
    6. // 1、uni.getUserProfile 获取用户信息
    7. uni.getUserProfile({
    8. desc: '登录后可同步数据',
    9. lang: 'zh_CN',
    10. success: (infoRes) => {
    11. console.log('用户信息-----------', infoRes)
    12. this.userInfo = infoRes.userInfo;
    13. // 2、uni.login 获取code
    14. uni.login({
    15. provider: 'weixin',
    16. success: async (loginRes) => {
    17. console.log('获取code-----------', loginRes)
    18. this.sessionId = await this.$apis.authLoginWechat({code: loginRes.code})
    19. this.showPhone = true
    20. },
    21. fail: function(err) {
    22. }
    23. });
    24. },
    25. fail: function(err) {
    26. }
    27. });
    28. }
    29. })
    30. }

     3、创建getPhoneNumber按钮,获取手机号码

    1. <!-- #ifdef MP-WEIXIN -->
    2. <view class="popup-class" v-if="showPhone">
    3. <view class="get-phone">
    4. <view class="p2">申请获取您绑定的手机号</view>
    5. <button
    6. class="phone-button"
    7. open-type="getPhoneNumber"
    8. @getphonenumber="getPhoneNumber">
    9. 确 认
    10. </button>
    11. </view>
    12. </view>
    13. <!-- #endif -->

     4、调用getPhoneNumber,获取code,传给后端

    1. // 3、调用getPhoneNumber
    2. async getPhoneNumber(e) {
    3. console.log('获取手机号码======code:', e.detail.code)
    4. // 注意:如果获取不到code 确认下开发者工具调试基础库版本是否为 2.21.2 及以上
    5. let params = {
    6. code: e.detail.code,
    7. nickName: this.userInfo.nickName,
    8. avatarUrl: this.userInfo.avatarUrl,
    9. sessionId: this.sessionId
    10. }
    11. let token = await this.$apis.getWechat(params)
    12. this.$Storage.setToken(token)
    13. uni.switchTab({
    14. url: '/pages/home/index'
    15. });
    16. },

     

     注:getPhoneNumber 返回的 code 与 wx.login 返回的 code 作用是不一样的,不能混用。

    附:控制台信息

    其他问题:

    1、小程序编译时,控制台可能会有些报错导致编译失败,例如渲染层错误、websocket的错误、 WXML 文件编译错误等等,可能是文件路径有问题,或者切换下调试基础库重新编译即可;

    2、小程序上传时,要提前做好分包,组件要按需引入,图片和音频之类的尽量放到服务器上,编译的时候代码要压缩,否则都会导致上传失败,解决办法都有教程,照做即可;

    3、小程序真机调试时,遇到关闭调试模式无法发出请求的情况,在小程序后台-开发-开发设置-服务器域名,正确配置https域名即可;

     以上就是对小程序的部分总结,希望以上分享能帮助到大家。

  • 相关阅读:
    机器人制作开源方案 | 智能快递付件机器人
    辅助驾驶功能开发-功能规范篇(16)-2-领航辅助系统NAP-智能避让
    客快物流大数据项目(七十二):Impala sql 语法
    java毕业设计网上零食进销存源码+lw文档+mybatis+系统+mysql数据库+调试
    单商户商城系统功能拆解35—分销应用—分销概览
    RK3399驱动开发 | 14 - AP6255 SDIO WiFi 调试(基于linux5.4.32内核)
    Kosmos-2: 在多模态大语言模型中引入基准和指代能力
    <数据集>腐烂水果识别数据集<目标检测>
    java计算机毕业设计家乡旅游文化推广网站MyBatis+系统+LW文档+源码+调试部署
    B站运营,B站作品如何获得更多曝光?
  • 原文地址:https://blog.csdn.net/lq099526/article/details/127633560