实现小程序码扫码登录之uniapp小程序部分

实现微信扫码登录功能是非常普遍的需求,不过微信扫码登录是要交钱的,加上我们项目正好有开发小程序的打算,所以采用小程序码跳转小程序来进行微信授权登录。本篇记录小程序部分的逻辑流程。

小程序码是放在一个pc端的系统上,小程序使用的是uniapp的vite+vue3框架,一开始我直接用的HBuilder创建的uniapp项目,但是有太多局限性,包括很多插件都无法安装使用,后面就改用vue-cli搭建,网上很多教程,在此不赘述。语法我习惯用setup语法糖和组合式API,会和选项式的写法有一些区别。

1.在登录页实现正常登录流程

可能有些项目登录采用的是弹窗形式,这里建议登录单独起一个页面,会方便扫码直接跳转。现在的微信已经不允许获取用户信息了,所以我采用getPhoneNumber和login进行授权登录:

//登录按钮
<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">微信用户快捷登录</button>


const state = reactive({
    loginFrom: {
      phonecode: '',
      loginCode: '',
      scene: ''
    }
})

const getPhoneNumber = (e) => {
    if (e.detail.errMsg === "getPhoneNumber:ok") {
      // 用户选择允许时存储电话code
      state.loginFrom.phonecode = e.detail.code
      uni.login({
        "provider": "weixin",
        "onlyAuthorize": true, // 微信登录仅请求授权认证
        success: (event) => {
          if (event.errMsg === "login:ok") {
            //存储微信授权登录返回的code
            state.loginFrom.loginCode = event.code
            //login是后台的登录接口
            login(state.loginFrom).then((res) => {
              // 保存 token
              uni.setStorageSync('token', res.token);
              uni.setStorageSync('user', JSON.stringify(res.user));
              uni.showToast({
                icon: 'success',
                title: '登录成功'
              })
              uni.reLaunch({
                url: '/pages/myaccount/index'
              });
            })
          }
        },
        fail: (err) => {
          // 登录授权失败  
          uni.showToast({
            icon: 'error',
            title: '登录授权失败,' + err.code
          })
        }
      })
    }
  }

2.在onLoad中获取scene参数

scene参数是连接小程序和另外一个平台的重要参数。

import {onLoad} from '@dcloudio/uni-app'

onLoad((option) => {
    //正常登录时没有scene,只有扫小程序码跳转时才有
    if (option.scene) {
      //scene要进行转码,如果拿到的不是纯值,还要用split进行字符串分割
      const s = (decodeURIComponent(option.scene).split("=")).slice(1)
      state.loginFrom.scene = s[0]
    }
})

值得注意的是:scene值最好进行转码

到这里就完成代码部分,然后可以使用开发者工具进行测试,在编译的地方选择二维码编译,然后把另外一个平台的小程序二维码截图保存到本地,用下面的二维码编译选中图片就可以测试了。

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
UniApp中,可以通过uni.scanCode()方法调用微信小程序扫码功能。如果需要自定义扫码页面,可以使用uni.previewImage()方法来显示自己的扫码页面,并在页面中使用uni.scanCode()方法来触发扫码功能。 具体步骤如下: 1. 创建自定义扫码页面。 在页面中使用uni.previewImage()方法来显示图片,可以在图片上覆盖一个按钮或者其他交互元素来触发扫码功能。示例代如下: ``` <template> <view class="container"> <image :src="qrCodeUrl" mode="aspectFill" @tap="scanCode"></image> </view> </template> <script> export default { data() { return { qrCodeUrl: 'xxx' // 扫码页面的图片地址 } }, methods: { scanCode() { uni.scanCode({ success(res) { console.log(res) } }) } } } </script> ``` 2. 在小程序配置文件中设置自定义扫码页面路径。 在微信小程序app.json文件中,可以设置自定义扫码页面的路径。示例代如下: ``` { "pages": [ "pages/index/index", "pages/scan/scan" ], "window": { "navigationBarTitleText": "Demo" }, "tabBar": { "list": [{ "pagePath": "pages/index/index", "text": "首页" }, { "pagePath": "pages/scan/scan", "text": "扫码" }] }, "usingComponents": {} } ``` 3. 调用uni.scanCode()方法触发扫码功能。 在自定义扫码页面中,可以使用uni.scanCode()方法来触发扫码功能。成功扫描到二维后,可以在回调函数中获取二维的内容。示例代如下: ``` uni.scanCode({ success(res) { console.log(res) } }) ``` 以上就是在UniApp中自定义微信小程序扫码页面的步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值