首页 > 编程语言 >小程序扫码登录网页应用

小程序扫码登录网页应用

时间:2023-03-12 20:36:32浏览次数:48  
标签:扫码 网页 登录 nil 程序 scene appid string

详细实现方式以及代码下载请前往 https://www.passerma.com/article/85

一、整体实现思路

  1. 前端调用接口生成带唯一scene参数的小程序码,并定时器获取该参数登录状态
  2. 用户扫描小程序码跳转到小程序界面,同时后台将用户openid与唯一scene参数关联
  3. 小程序界面弹出登录确认按钮,用户确认登录,查询数据库是否存在该openid用户,有则直接将唯一scene参数设置为可登录状态,前端获取状态后直接进行登录。如果没有改用户,则直接新建一个用户,同时让用户完善个人信息,然后再将唯一scene参数设置为可登录状态,前端获取状态后直接进行登录

二、核心步骤代码

1. 生成带唯一scene参数的小程序码

由于生成小程序码为微信服务端接口,因此该接口需要后台实现

1) 获取微信AccessToken

前往微信小程序开放平台,选择开发管理,进入开发设置,复制AppID以及AppSecret
调用获取接口调用凭据接口getAccessToken

func GetWechatAccessToken() (errHas error) {
    appid := conf.GetConf("appid")
    secret := conf.GetConf("secret")
    url := fmt.Sprintf("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", appid, secret)
    resp, err := restgo.NewHttpBuilder().Send(restgo.GET, url)
    if err != nil {
        return errors.New("获取AccessToken失败")
    }
    return nil
}

2) 生成带参数的小程序码

调用获取不限制的小程序码接口getUnlimitedQRCode
后台生成唯一scene,同时将生成的小程序码数据一起返回前端记录

func GetWechatCode(GUID string) (data []byte, err error) {
    resp, err := restgo.NewHttpBuilder().Payload(map[string]interface{}{
        "scene": GUID,
        "page":  "pages/center/index",
    }).Send(restgo.POST, "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+access_token)
    if err != nil {
        return nil, errors.New("小程序码生成失败")
    }
    var res map[string]string
    resp.BodyUnmarshal(&res)
    if res["errmsg"] != "" {
        return nil, errors.New("小程序码生成失败")
    }
    return resp.Body(), nil
}

该接口返回的是小程序码的base64,前端显示需要拼接data:image/png;base64,
WX20230312-193436.png
小程序获取唯一scene


function onl oad (query) {
  // scene 需要使用 decodeURIComponent 才能获取到生成二维码时传入的 scene
  const scene = decodeURIComponent(query.scene)
}


2. 将openid与scene进行绑定

扫码之后小程序使用wx.login接口获得临时登录凭证code后传到开发者服务器调用登录接口code2Session获取openid

func GetWechatcode2Session(js_code string) (data map[string]string, err error) {
    appid := conf.GetConf("appid")
    secret := conf.GetConf("secret")
    url := fmt.Sprintf("https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code", appid, secret, js_code)
    resp, err := restgo.NewHttpBuilder().Send(restgo.GET, url)
    if err != nil {
        return nil, errors.New("获取用户信息失败")
    }
    res := map[string]string{}
    resp.BodyUnmarshal(&res)
    return res, nil
}

然后将openid与scene进行绑定

3. 小程序弹出登录弹窗

点击弹窗的登录按钮,查询用户信息,后台将scene对应的状态改为登录成功
前端轮询到scene状态改变,状态是扫码确认成功,进行登录
详细实现方式以及代码下载请前往 https://www.passerma.com/article/85

标签:扫码,网页,登录,nil,程序,scene,appid,string
From: https://www.cnblogs.com/passerma/p/17208986.html

相关文章

  • 学习ASP.NET Core Blazor编程系列二十八——JWT登录(3)
    学习ASP.NETCoreBlazor编程系列文章之目录学习ASP.NETCoreBlazor编程系列一——综述学习ASP.NETCoreBlazor编程系列二——第一个Blazor应用程序(上)学习A......
  • centos登录用户前的提示信息
    环境介绍由于我经常使用eve-ng模拟器,一下子拉很多台centos测试机出来。挨个点进去ipadd查看ip很麻烦。所以就写了个脚本,直接vnc界面就可以看到服务器的一些信息。当然你也......
  • ssh登录提示每次不一样
    环境介绍有一天有一哥们,菜鸟发现了一个环境,里边每次ssh登录和每次打开终端都会输出不同的提示语。就感觉挺有意思。那个软件是fortune-zh。但是这个软件呢只能在ubuntu上装......
  • 路飞:腾讯云短信开发、短信验证码接口、短信登录接口、短信注册接口
    目录一、腾讯云短信开发1.1SDK安装操作流程1.2发送短信1.3封装发送短信功能二、短信验证码接口三、短信登录接口3.1视图类4.2序列化类四、短信注册接口4.1路由4.2视图......
  • jupyter notebook网页形式打开
    一、打开AnacondaPrompt,通过输入condainstalljupyternotebook来安装jupyter模块  二、切换到想要开发代码的目录,输入命令jupyter-notebook.exe ......
  • 自适应与响应式网页设计
    现代网站需要在每个屏幕上都具有良好的外观和功能。这不完全是新闻快报,因为网页设计师多年来一直被告知这一点。但是实现它的方法不止一种,例如自适应设计和响应式设计,我们......
  • 如何实现一个类似 Apple 网站的短信验证码登录组件 All In One
    如何实现一个类似Apple网站的短信验证码登录组件AllInOne支持短信,复制粘贴自动填充支持自动聚焦,自动校验输入完成,支持自动发起确认请求(无需手动点击确认按钮)......
  • 深入理解CSS Grid网页布局,并通过示例来演示如何使用
    使用CSSGrid布局是一种现代的设计方式,它能够让我们更加灵活地布局网页内容。在这篇技术博客中,我们将深入理解CSSGrid布局,并通过示例代码来演示如何使用它。什么是CSSGrid......
  • 谷歌浏览器插件实现拦截处理网页内容
    公司市面上有一套产品,且学校有对应教学教材,学校偶尔会用来做实操比赛,由于比赛系统是在产品外层包了一层壳(iframe嵌入产品)来实现实操,内部产品直接使用的线上正式版,产品经常......
  • Git配置ssh登录远程仓库
    一、在客户端生成密钥#-t指定密钥类型#-f指定生成密钥的文件名#-C注释,一般是填写用户名ssh-keygen-trsa-C"xxx"-fC:\Users\Administrator\.ssh\test二、......