- 微信小程序获取openID及unionID
公众号openID和小程序openID说明 为了识别用户,每个用户针对每个公众号或小程序等应用会产生一个安全的OpenID 在小程序中,openID是小程序的普通用户的一个唯一的标识,只针对当前的小程序有效同理在公众号中openID是公众号的普通用户的一个唯一的标识,只针对当前的公众号有效冷知识:公众号包含服务号和订阅号。我们常开发的是服务号 同一个微信用户在小程序和公众号上的openid是不同的 UnionID 机制说明 微信的unionid机制说明: 如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。简而言之,unionid是用来说明多个应用下用户身份一致性的问题。相比较而言,由于在同一个应用下每个用户的openid是唯一的,因此openid也是也可以用来标记用户身份,但是仅限于在同一个应用中。对于不同的应用,每个用户的openid是不一样的,要想在不同应用间识别用户的唯一性只可以用unionid。下面来举一个例子来说明,例如: 小耿开发者账号下有公众号A和小程序B,对于访问公众号A和小程序B的用户小龙有openidA与openidB(openidA!=openidB),openidA在公众号A应用中是唯一的,可以说明小龙的身份;openidB在小程序B中是唯一的,也可以说明小龙的身份。假如,我们现在要确定公众号A的用户小龙与小程序B的用户小龙是否为同一个用户小龙,我们根据openid能确定吗?很显然,不可以。此时用户的unionid就可以解决这个问题,即unionid是用来确定不同应用下用户的唯一性。如何获取? 公众号获取openID 参考文档:(建议放到后端处理)https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html http://note.youdao.com/noteshare?id=c391f6f88ae92c485b95f386309079b2&sub=0A4A104759AE4D5992457DC02E9FC194 小程序获取openID 1、需要在微信小程序调用登录开放接口 wx.login() 获取用户登陆凭证code。 wx.login()接口说明: https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html2、向服务器发送请求,并将code一起发送过去。 3、接下来,在服务端调用auth.code2Session接口 接口说明 :https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html4、接口返回openid UnionID获取途径 公众号获取unionID 可以直接通过 openID 获取到该用户 UnionID(建议放到后端处理) https://developers.weixin.qq.com/doc/offiaccount/User_Management/Get_users_basic_information_UnionID.html#UinonId 小程序获取unionID 微信官方给出的途径: 绑定了开发者帐号的小程序,可以通过以下途径获取 UnionID。 1、如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过 wx.login + code2Session 获取到该用户 UnionID,无须用户再次授权。(以前是调用接口 wx.getUserInfo,或通过button获取:<button type='primary' open-type="getUserInfo">授权登录</button>,从解密数据中获取 UnionID。2021年4月13日以后就不支持这种方法了。相关文档:https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801)2、如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过 wx.login + code2Session 获取到该用户 UnionID ,无须用户再次授权。3、用户在小程序(暂不支持小游戏)中支付完成后,开发者可以直接通过getPaidUnionId接口获取该用户的 UnionID,无需用户授权。注意:本接口仅在用户支付完成后的5分钟内有效,请开发者妥善处理。4、小程序端调用云函数时,如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号,可在云函数中通过 cloud.getWXContext 获取 UnionID。5、小程序端调用云函数时,如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用,也可在云函数中通过 cloud.getWXContext 获取 UnionID。 在项目中采取下列方法来获取unionid第一种方法举例: 通过wx.login获取用户的code,因为获取openid和unionid需要用code然后就是通过微信的auth.code2Session获取我们最终想要的微信小程序中调用wx.login()获取到code,将code传给后端由后端直接调用接口: https://api.weixin.qq.com/sns/jscode2session?appid=自己的appid&secret=密钥&js_code=${code}&grant_type=authorization_code 获取openid和unionid、session_key onLoad: function (options) { this.wxLogin() }, wxLogin () { wx.login({ success: (res) => { //用户的code let userCode = rest.code console.log('wx.login==>',res) // 该流程放到后端处理=== // https://api.weixin.qq.com 不是合法域名,正式环境无法访问 ============= wx.request({ // 自行补上自己的 APPID 和 SECRET url:`https://api.weixin.qq.com/sns/jscode2session?appid=自己的appid&secret=密钥&js_code=${userCode}&grant_type=authorization_code`, success: res => { // 获取到用户的 openid console.log("用户的openid:" + res.data.openid); console.log("用户的unionid:" + res.data.unionid); console.log("用户的session_key:" + res.session_key); } }); } }) } tips:获取unionid的话是需要微信开放平台绑定小程序的,不然是不可能获取到的 查找 APPID 和 SECRET 微信公众平台->开发->开发管理->开发设置 auth.code2Session 比较简单,大家可以自行查看 link 参考文章: openid: https://developers.weixin.qq.com/community/develop/article/doc/000c80906b4210625f3bde3775bc13 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html unionid: https://www.jianshu.com/p/46efa68d9033 https://www.jianshu.com/p/03810ae56c4f
2021-04-06 - h5页面跳转到公众号文章,再返回h5页面时,浏览器头部变成了公众号的链接,h5设置的title不显示
h5页面 [图片] 跳转到公众号文章 [图片] 从公众号文章再返回到h5页面 [图片]
2020-11-03 - iOS 密码类型的input输入后失焦再输入,内容会被清空
- 当前 Bug 的表现(可附上截图) iOS 密码类型的input输入后失焦再输入,内容会被清空 [图片] - 预期表现 应该接着上一次输入的内容继续添加上去 - 复现路径 - 提供一个最简复现 Demo
2019-03-04 - 微信小程序如何一键发布??小程序CI工具 miniprogram-ci
https://herrylo.github.io/front/ 微信小程序官方维护的CI工具!!方便快捷,解放双手。微信小程序官方CI工具 miniprogram-ci文档 最近公司同事在接入弄微信小程序的CI工具,实现一键发布,我也跟着学习了一波,哈哈哈!!了解到使用方法之后,赶紧把自己的小程序也加上了这个功能,也算是自己玩玩。 小程序CI接入很方便,依赖node环境,安装好CI包之后就可以使用了。先看看下面这段上传示例代码: [代码]// 可以参考我的个人项目代码:https://github.com/HerryLo/wxSapp/blob/master/config/upload.wx.js const ci = require('miniprogram-ci') ;(async () => { const project = new ci.Project({ appid: 'wxsomeappid', type: 'miniProgram', projectPath: 'the/project/path', privateKeyPath: 'the/path/to/privatekey', ignores: ['node_modules/**/*'], }) const uploadResult = await ci.upload({ project, version: '1.1.1', desc: 'hello', setting: { es6: true, }, onProgressUpdate: console.log, }) console.log(uploadResult) })() [代码] 依赖微信小程序官方维护的[代码]miniprogram-ci[代码]包,安装了node后,install就可以使用了。 初始化[代码]ci.Project[代码]时,需要提供[代码]appid[代码]、项目的类型[代码]type[代码]、项目路径[代码]projectPath[代码]、私钥[代码]privateKeyPath[代码]、 排除的规则[代码]ignores[代码],6个参数; 其中私钥[代码]privateKeyPath[代码],是在 [代码]微信小程序后台-开发-开发设置-小程序代码上传[代码]获取私钥。 至于[代码]ci.upload[代码]字面理解就可以,上传小程序代码,当然也需要配置参数。参数不在这里过多介绍,要看参数,直接看文档吧!!微信小程序官方CI工具 文档 miniprogram-ci功能 上面只是展示上传功能,其实它还有其他功能,下面是[代码]miniprogram-ci[代码] 目前可以提供功能: [代码]1. 上传代码,对应小程序开发者工具的上传 2. 预览代码,对应小程序开发者工具的预览 3. 构建 npm,对应小程序开发者工具的: 菜单-工具-构建npm 4. 代理,配置 miniprogram-ci 的网络请求代理方式 5. 支持获取最近上传版本的 sourceMap 6. 支持 node 脚本调用方式和 命令行 调用方式 [代码] 以上就是微信小程序[代码]miniprogram-ci[代码]具备的功能,相信可以满足大多数人的需求。提醒⏰:记住别忘记配置IP白名单!!,不然上传会报错。 废话不多说,赶快来解放你的双手吧!! 附上我自己的微信小程序CI的代码,希望可以帮助到你。 代码地址:https://github.com/HerryLo/wxSapp 其实还可以有很多玩法,比如配合Jenkins、gitlab、github Action都是可以的,喜欢的可以自己研究哦!不过欢迎交流👏👏 ps: 微信公众号:Yopai,有兴趣的可以关注,每周不定期更新。不断分享,不断进步
2023-06-18