问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

利用微信小程序扫码授权

发布网友 发布时间:2024-09-18 12:01

我来回答

1个回答

热心网友 时间:2024-09-28 02:26

title:利用微信小程序扫码授权date:2022-05-1311:09:09cover:https://static.nnnnzs.cn/bing/20220513.pngtags:

技术微信小程序扫码授权背景

想要使用微信扫码登录自己的网址,通过授权快速获取用户的昵称,头像功能由于没有企业认证账号,故只能通过微信小程序实现,

体验地址

https://api.nnnnzs.cn/screen-demo.html?env=release

源码

https://github.com/NNNNzs/wechat-screen-tools

原理

利用微信小程序的动态创建场景码接口(https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html),创建短token的信息存储在服务端,而不需要大量信息存储在二维码里,实现授权

流程

客户端在请求图片,服务生成token,注册到认证服务

前端根据token,获取带场景值的二维码图片,并轮训该token状态

使用微信扫码,根据token获取应用信息并展示,在小程序授权登录,获取openid,nickname,avatorImg等信息

确认允许登录后,发送confirm请求,发送userInfo值

网络获取到该token对应的用户信息

流程图核心接口接口传参返回值说明getToken-token获取tokengetImgByTokentoken图片的arrayBuffer获取小程序码getInfoByTokentokenuserInfo获取用户信息statustoken-1|0|1-1表示为扫码,0表示已扫码未授权,1表示已经授权confirmnickName、openid,头像等-小程序的允许授权时确认的接口踩坑点scene长度为最大32字符,利用nodejs的uuid.v4生成的值超过32位

解决方案

uuid.v4().replace(/-/g,"").toUpperCase();生成二维码时,如果没有指定page字段可能会在页面里获取不到场景值(scene)

解决方案指定page:"pages/index/index"

getwxacodeunlimit接口成功直接返回buffer错误返回的是json,在axios中需要根据response的contentType来判断成功还是失败

解决方案

router.get("/getImgByToken",async(req,res)=>{const{access_token,expires_in}=awaitwechat.getAccessToken();constua=req.headers["user-agent"];consttoken=req.query.token;constenv=req.query.env;//env区分release发行版本trial体验版develop开发版//https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.htmlaxios({url:"https://api.weixin.qq.com/wxa/getwxacodeunlimit",method:"post",params:{access_token:access_token,},responseType:"arraybuffer",data:{scene:token,env_version:env||"trial",check_path:false,page:"pages/index/index",},}).then((response)=>{constisSuccess=response.headers["content-type"].includes("image");if(!isSuccess){console.log(response.data.toString("utf-8"));}else{res.type("png").send(response.data);}});});无论是wx.getUserProfile还是wx.getUserInfo无法静默获取userInfo,都需要授权弹窗登录,不过可以缓存信息

解决方案扫码进入之后onLoad就弹窗,并且存储场景值,允许拒绝授权之后再次

开发的时候场景值每次提交代码生成预览版本比较麻烦

解决方案在微信小程序开发工具里面添加条件编译,通过二维码编辑

原文:https://juejin.cn/post/7100066878797643789

热心网友 时间:2024-09-28 02:19

title:利用微信小程序扫码授权date:2022-05-1311:09:09cover:https://static.nnnnzs.cn/bing/20220513.pngtags:

技术微信小程序扫码授权背景

想要使用微信扫码登录自己的网址,通过授权快速获取用户的昵称,头像功能由于没有企业认证账号,故只能通过微信小程序实现,

体验地址

https://api.nnnnzs.cn/screen-demo.html?env=release

源码

https://github.com/NNNNzs/wechat-screen-tools

原理

利用微信小程序的动态创建场景码接口(https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html),创建短token的信息存储在服务端,而不需要大量信息存储在二维码里,实现授权

流程

客户端在请求图片,服务生成token,注册到认证服务

前端根据token,获取带场景值的二维码图片,并轮训该token状态

使用微信扫码,根据token获取应用信息并展示,在小程序授权登录,获取openid,nickname,avatorImg等信息

确认允许登录后,发送confirm请求,发送userInfo值

网络获取到该token对应的用户信息

流程图核心接口接口传参返回值说明getToken-token获取tokengetImgByTokentoken图片的arrayBuffer获取小程序码getInfoByTokentokenuserInfo获取用户信息statustoken-1|0|1-1表示为扫码,0表示已扫码未授权,1表示已经授权confirmnickName、openid,头像等-小程序的允许授权时确认的接口踩坑点scene长度为最大32字符,利用nodejs的uuid.v4生成的值超过32位

解决方案

uuid.v4().replace(/-/g,"").toUpperCase();生成二维码时,如果没有指定page字段可能会在页面里获取不到场景值(scene)

解决方案指定page:"pages/index/index"

getwxacodeunlimit接口成功直接返回buffer错误返回的是json,在axios中需要根据response的contentType来判断成功还是失败

解决方案

router.get("/getImgByToken",async(req,res)=>{const{access_token,expires_in}=awaitwechat.getAccessToken();constua=req.headers["user-agent"];consttoken=req.query.token;constenv=req.query.env;//env区分release发行版本trial体验版develop开发版//https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.htmlaxios({url:"https://api.weixin.qq.com/wxa/getwxacodeunlimit",method:"post",params:{access_token:access_token,},responseType:"arraybuffer",data:{scene:token,env_version:env||"trial",check_path:false,page:"pages/index/index",},}).then((response)=>{constisSuccess=response.headers["content-type"].includes("image");if(!isSuccess){console.log(response.data.toString("utf-8"));}else{res.type("png").send(response.data);}});});无论是wx.getUserProfile还是wx.getUserInfo无法静默获取userInfo,都需要授权弹窗登录,不过可以缓存信息

解决方案扫码进入之后onLoad就弹窗,并且存储场景值,允许拒绝授权之后再次

开发的时候场景值每次提交代码生成预览版本比较麻烦

解决方案在微信小程序开发工具里面添加条件编译,通过二维码编辑

原文:https://juejin.cn/post/7100066878797643789
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
炒股怎么买进卖出? 办一个餐饮的营业执照要多少钱 上海贷款平台有哪些 上海有什么网贷 Intel 赛扬D325 2.53G与多大频率的内存匹配 Intel 赛扬D 352(散)重要参数 CPU Intel 赛扬D 326 这个东西怎么看的? Intel 赛扬D 326(散)重要参数 Intel 赛扬D 325(盒)重要参数 Intel 赛扬D 325(盒)Intel 赛扬D 325(盒)详细参数 微信小程序扫码连接蓝牙控制设备 乳腺结节微创手术的缺点 乳腺微创和开刀哪个好 乳腺结节手术可以做微创手术吗 乳房结节微创手术的弊端 奈飞注册流程和费用 奈飞会员怎么买便宜 有什么好用的在线看电视剧或者电影的网站啊! ipadpro12.9看奈飞好用吗 湿热可以拔火罐吗 抓火罐能除身体湿气吗 体内湿热可以拔火罐吗 湿热重可以拔火罐吗 从拔罐颜色了解湿热 电脑打开word就死机是什么原因? word打开时死机怎么办? 在阿荣旗开一家板栗酥能行吗 我想在东北,开个板栗酥能行吗 偏头痛很难受,可以吃速效救心丸吗 煎牛肉前怎样调味? 煎牛肉的调料怎么调? 北京到拉萨是在北京西站坐火车吗 北京西站到西藏坐火车需要多少个小时? 梦到给别人捉虱子弄死是什么意思 快递一把贝斯,发什么快递一般比较靠谱 请问北京赛诺贝斯市场咨询公司情况好不好?通过他们的面试了! 从山东德州到安徽芜湖邮费 淘宝店贝斯服饰太垃圾了,卖烂货退货不退钱的,第一次碰到! ...然后被放到锅里了 请问是什么意思呢 有什么预示 求解 梦见儿子被大象踩吐血了 迪士尼公主漫画图片Q版 产品二间是什么意思 《梦幻迪士尼》梦幻迪斯尼是什么类型的游戏嗯 玩具测评丨Disney迪士尼魔发奇缘公主小屋 很严重的事不想让家人知道怎么发朋友圈 如何在微信中设置朋友圈黑名单? 温州哪里酒吧消费低点的,小酒吧之类的 百威麦霸英雄汇冠军居然是温州队?评委怎么这么偏心啊,明显的是成都队的... 描写小雪时节古诗词句 自我体检包括哪些内容 什么时候可以拿到学位证书?