在做微信小程序开发时,根据应用的需要,可能会要求获得用户不同的信息和硬件设备不同的使用权限。前者比如:用户标识、头像、昵称、姓别、地址、手机号码等,后者包括:地理位置、手机相册、摄像头等。根据小程序现有的规则,除“用户标识、头像、昵称、姓别”等信息之外,均需要用户授权后才能使用。而且用户的授权界面的唤醒又分为两种方式,一是可以用代码唤醒,另一种则必须使用指定类型的按钮组件,用户点击该按钮才能唤醒。

本文主要介绍如何简单有效地获取用户的唯一标识,获取唯一标识后,应用程序就可以区别用户。简单来说,只要用户打开小程序,则即可以确定用户身份(无需登陆一说)。

主要步骤如下:

1、使用 wx.login({}) 获取临时会话的 code

2、使用 wx.request({}) 向开发者服务器(用户自己服务器,非微信服务器)传入第1步中获得的code,在开发都服务器中向微信服务器指定的API地址发送请求,进而返回所需信息。

>>开发者服务器向微信服务器发送带code的请求代码如下:

public async System.Threading.Tasks.Task GetOpenIdAsync(string p_code)        {

Dictionary V_DirResult = new Dictionary();

string GetUrl = string.Format("https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code", _AppId, _AppSecret, p_code);

//该地址为微信服务器指定获得openid的地址。

string GetResultStr = null;

using (HttpClient V_Client = new HttpClient())

{

GetResultStr = await V_Client.GetStringAsync(GetUrl);

}

XcxServer.MOpenIdInfo OpenIdInfo = new XcxServer.MOpenIdInfo();

if (!GetResultStr.Contains("openid"))

{

OpenIdInfo.errcode = "-2";

OpenIdInfo.errmsg = "请求失败" + GetResultStr;

}

else

{

OpenIdInfo = JsonConvert.DeserializeObject(GetResultStr);

}

return OpenIdInfo;

}

>>第1、2步的代码可封装如下:

const zmkGetOpenId = () => {

let loginCodePromise =  new Promise((resolve, reject)=> {

// 登录

wx.login({

success: res => {

if (res.code) {

//console.log('登录成功,Code=',res.code)

resolve(res.code);

} else {

//console.log('登录失败!' + res.errMsg)

reject();  }  } }) });

return loginCodePromise.then((tCode) => {

let paramData = {

tempCode: tCode

}

// 发送 res.code 到后台换取 openId, sessionKey, unionId

return new Promise((resolve, reject) => {

wx.request({  url: 'http://localhost:5000/getuseropenid', //开发者服务器地址。

method: method,

data: updata,

header: { 'content-type': 'application/json', },

success(res) {resolve(res)},

fail(res) { reject(res) }})

})

})

}

>>调用封装的代码

Page({

data: {  userOpenId:null  },

onLoad: function () {

zmkGetOpenId().then((res) => {

userOpenId=res.data.openid;

console.log(app.globalData.userOpenId)

})

},

})

代码中使用了Promise 语法,使逻辑变得清晰。后续将刊登如何最专业地获取用户信息或硬件设备的其他权限,欢迎大家关注。

唯一标识 微信小程序_微信小程序获取用户唯一标识(不用授权)相关推荐

  1. 微信小程序开发——点击按钮获取用户授权没反应或反应很慢的解决方法

    微信小程序开发--点击按钮获取用户授权没反应或反应很慢的解决方法 参考文章: (1)微信小程序开发--点击按钮获取用户授权没反应或反应很慢的解决方法 (2)https://www.cnblogs.co ...

  2. 如何微信链接自定义_微信链接自定义

    微信在分享第三方网站是不显示缩略图和描述的,如下图所示 微信链接自定义_微信链接自定义 要解决这个问题必须调用微信JS-SDK接口,下面讲一下如何调用接口. 第一部分 准备步骤 注册微信公众号. 通过 ...

  3. uniappH5+springboot微信授权登录获取用户数据(非静默授权)

    uniappH5+springboot微信授权登录获取用户数据(非静默授权) 微信网页授权开发文档 准备工作 微信公众号appid和appSecret及配置相关的ip白名单 配置网页授权域名,具体操作 ...

  4. 【微信小程序】登录功能实现及讲解(获取用户唯一标识)

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 正文: 功能:登录实现并获取到用户唯一标识 官方文档地址:可以先看完我的文章再看官方地址 实现步骤:1.调用微 ...

  5. 微信小程序获取用户唯一标识openid的若干个坑

    今天需要获取微信小程序用户唯一标识openid.一开始发现了前端是无法发起请求获取openid的,需要前端获取code后,把code传给后端,由后端获取,再把openid返回给前端.后端也是我一个人搞 ...

  6. 微信小程序获取用户唯一标识OpenID

    最近想重新熟悉一下微信小程序的开发,所以整理了一下上年毕设的作品-蔚园园子,一个关于校园的综合服务平台. 软件开发第一步大都绕不开登录,微信小程序的登录的话,又稍微麻烦一些.其实微信提供的文档,里面有 ...

  7. 小程序获取用户唯一id php_微信小程序配合PHP获取用户OpenID标识

    小程序中的openid具有很多作用,不再展开赘述.考虑到云函数能直接获取用户的openid,推荐小程序访问量不大的用户使用云函数直接获取, 本篇文章只简单阐述一下,小程序配合后端来获取用户的openi ...

  8. 小程序 微信统计表格_微信小程序登录机制

    " 不是0,也不是1,有0也有1 " 总有一个瞬间,你想记录当下的一些事情,所以有了这篇文章,不会口吐芬芳,我直接开门了,但愿能让你见山. 1. 背景 21 届的校园招聘已经打响了 ...

  9. input ios问题 小程序_微信小程序开发常见问题汇总

    原标题:微信小程序开发常见问题汇总 1.域名必须是https 非https的域名不被微信小程序允许. 2.input组件placeholder字体颜色 卸载placeholder-class里面的co ...

最新文章

  1. Thymeleaf页面三元运算符
  2. ICCV 2019 | SPM:单阶段人体姿态估计解决方案
  3. REDHAT6.3 udev 配置 存储器磁盘
  4. 设计模式3—行为型模式
  5. 网络(10)-HTTPS证书申请及配置
  6. Silverlight+WCF 新手实例 象棋 棋子定位与象棋类(四)
  7. 03-30 兼容性测试
  8. BootStrap modal() 如何根据返回的HTML宽度自动调整宽度?
  9. doors dxl 遍历object 查找
  10. noi题库1.1~1.6答案
  11. 联想摄像头无法一直运行
  12. python输入的光标变成了横线_光标变成下划线
  13. 对某在线教育平台用户使用RFM模型按价值分类
  14. 微信小程序 手写签名_你竟然还不知道在微信上就可以手写签名、签文件了~
  15. springboot+nodejs+vue教师备课系统网站
  16. 程序员找不到合适工作的原因总结
  17. 快速解读Nor Flash Datasheet
  18. KMS11激活Window系列
  19. 前端最有成就感一—-封装
  20. 从你的全世界路过- 告白气球

热门文章

  1. 【复习】原生Js实现文件上传
  2. 小白 vue-cli 项目打包
  3. 你必须懂也可以懂的微服务系列三:服务调用
  4. Hadoop Yarn配置多队列的容量调度器案例
  5. (提示)ubuntu16.04通过sealos安装k8s,需要重新部署apply一下calico组件
  6. Docker中运行Springboot jar时的变量传递
  7. Scala分支控制 if-else 注意事项
  8. storm的基本概念
  9. Hadoop大数据--Mapreduce编程规范及入门示例
  10. Centos7安装tengine-2.3.2版本