在本次踩坑系列(1)中,你已经成功获取到了微信的昵称和头像。
现在问题来了。你要把微信用户存入自己的数据库。主码是什么?
用昵称?太多重复了。用头像url?长的逆天!且用户头像是可以换的!
所以你去查官方文档,发现一个词,openid。这个是唯一的。
兴奋过后,你就该进坑了。因为openid不open,想要拿到手还真不容易。

1、window.wx.login

使用标准的授权代码。注意,这里和之前获取昵称相比区别在于:
1、使用window.wx.login登录。注意这个登录其实目的只有1个:获取code。这个code将用于后续与腾旭服务器的的对话。
2、使用window.wx.getSetting确定用户已经主动授权。如果没有,则是之前教程(1)讲过的弹出按钮。如果授权了,则可以获取到昵称了,然后进行后续的操作。
3、注意getSetting返回的res结构里的iv、signature、encryptedData,后续都要送到。
4、window.wx.createUserInfoButton创建了一个全屏大小的按钮。为什么要这样呢?因为微信要求这个授权必须是用户主动点击按钮发起。因此,你在设计UI的时候要注意,加载第一个界面的时候就要执行TestLogin,然后再设计一个“登录”按钮,用户点击这个按钮的时候,其实点击的是createUserInfoButton这个全屏按钮,开始授权了!
注意所有请求都是异步的。成功后调用回调函数进行后续处理。

   TestLogin() {let sysInfo = window.wx.getSystemInfoSync();let width = sysInfo.screenWidth;//获取微信界面大小let height = sysInfo.screenHeight;window.wx.login({success: (res) => {if (res.code) {//console.log("res.code=====", res.code);myglobal.wx.code = res.code;//向服务端传递code用于获取微信小游戏的用户唯一标识window.wx.getSetting({success(res) {console.log(res.authSetting);if (res.authSetting["scope.userInfo"]) {console.log("用户已授权");window.wx.getUserInfo({success(res) {//console.log("res ======" + JSON.stringify(res));myglobal.wx.session = res;//此时可进行登录操作                                        myglobal.loginNode.emit('wx_login_ready')}});} else {console.log("用户未授权");let button = window.wx.createUserInfoButton({type: 'text',text: '',style: {left: 0,top: 0,width: width,height: height,backgroundColor: '#00000000',//最后两位为透明度color: '#ffffff',fontSize: 20,textAlign: "center",lineHeight: height,}});button.onTap((res) => {if (res.userInfo) {console.log("用户授权:", res);myglobal.wx.userInfo = res.userInfo;//此时可进行登录操作myglobal.loginNode.emit('wx_login_ready')button.destroy();} else {console.log("用户拒绝授权:", res);}});                              }}})} else {//if (res.code) console.log('登录失败!' + res.errMsg)}},});//window.wx.login},

2、auth.code2Session

现在你拿到code了。下一步是调用 auth.code2Session 接口,换取 用户唯一标识 OpenID和会话密钥 session_key。
官网文档只有一句话:
GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
意思就是让你自己去填空构造一个get请求,成功后就把OpenID和session_key给你。
主要填写这3个地方:
APPID、SECRET:在公众号开发者平台可以获取到。
JSCODE:就是前面拿到的code。
官方要求是让服务器来完成验证。因此正确的做法是自己再做一个服务器,小游戏客户端把code发送给服务器,让服务器发送get请求。
我这里是使用node做服务器,代码大致如下:

exports.getWXOpenID = function(data, cb){var wxUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=" + defines.appid + "&secret=" + defines.secret + "&js_code=" + data.code + "&grant_type=authorization_code";console.log(wxUrl)request(wxUrl, (err, res, body)=>{if (!err && res.statusCode == 200) {console.log(err + ': ' + JSON.stringify(body));body = JSON.parse(body)var session_key = body.session_keyvar openid      = body.openidcb(openid)}else{cb(null)}})
}

服务器get请求

服务器用node来写的话如下:

const request = require('request')
const defines = require("./defines.js")
exports.getWXOpenID = function(data, cb){var wxUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=" + defines.appid + "&secret=" + defines.secret + "&js_code=" + data.code + "&grant_type=authorization_code";console.log(wxUrl)request(wxUrl, (err, res, body)=>{if (!err && res.statusCode == 200) {console.log(err + ': ' + JSON.stringify(body));body = JSON.parse(body)var session_key = body.session_keyvar openid      = body.openidcb(openid)}else{cb(null)}})
}

这样,终于获取到了openID了!

Creator+微信小游戏:(3)微信openID获取(https、wss问题)相关推荐

  1. CocosCreator微信小游戏接入微信登录获取微信名、头像、经纬度等信息

    前言 微信小游戏接入微信登录还是很简单的,不像原生平台开发,还需要提供appid,appsecret等信息,并有一系列的和微信平台的交互,才能最终授权成功. 下面TS代码演示了,老的接入流程. exp ...

  2. 微信小游戏和微信小程序的区别与共同

    微信小游戏 小游戏的运行环境在 iOS 上是 JavaScriptCore,在 Android 上是 V8,都是没有 BOM 和 DOM 的运行环境,没有全局的 document 和 window 对 ...

  3. 微信小游戏关系链能不能获取到服务器,关系链互动数据

    # 关系链互动数据 在开放 关系链数据能力 的基础上,小游戏新增 互动型托管数据 ,提供关系链互动能力,用于实现小游戏内微信好友互动(点赞,送礼物等)的功能. 关系链互动数据能力支持: 好友间互赠 5 ...

  4. 微信小游戏egret.getDefinitionByName不能获取类的实例

    前言:熟悉MVC框架的小伙伴都知道,在创建界面的时候一般使用egret.getDefinitionByName()来获取到类,从而可以实例化出一个界面类. 今天遇到一个问题:在本地调试好的项目,上到微 ...

  5. CocosCreator | 微信小游戏排行榜 微信开放域

    更多笔记和源码请关注:[微信公众号] CocosCreator笔记 演示 技术摘要 主域工程 微信授权 创建子域节点 向子域发送消息 子域工程 读写用户云托管数据 接收主域发送的消息 构建运行 实现 ...

  6. Unity微信小游戏使用微信云开发记录

    最近项目上架微信小游戏,首先使用了微信官方sdk转成微信小游戏,官方地址如下: https://github.com/wechat-miniprogram/minigame-unity-webgl-t ...

  7. 【微信小游戏】微信对战小游戏知识储备

    一.前提 在微信小游戏异常火爆的前提下,开发个小游戏才是正事,而不是玩个小游戏才是正事! 废话不多说,步入今天的正题,在慢慢成熟起来的小游戏生态中我们的小游戏如果只是单机+排行的组合,难免显得小游戏单 ...

  8. 如何使用 Unity制作微信小游戏,微信小游戏制作方案 最新完整详细教程来袭【持续更新】

    前言 Unity实战篇 | Unity制作微信小游戏,最新详细教程来袭[持续更新] 一.方案特点 二.技术原理 三.转换案例 四.安装与使用方法 4.1 查阅推荐的引擎版本,安装时选择WebGL组件 ...

  9. 微信小程序模板发送,openid获取,以及api.weixin.qq.com不在合法域名内解决方法

    主要内容在标题三,老手可直接跳到标题三. 本文主要解决个人开发者模板消息发送的问题(没有服务器,不能操作服务器的情况) 针对api.weinxin.qq.com不在以下合法域名列表内的问题提出的解决方 ...

  10. creator打包微信小游戏笔记

    异步执行 js是单线程的,分为同步任务和异步任务,同一个时刻只能去处理一个任务 有一个任务执行栈,同步任务都放到同步栈里面,异步任务执行有结果了,会放到异步栈 任务执行栈会从同步栈里取任务执行,当所有 ...

最新文章

  1. mongodb主从设置,capped collections等常用命令集合
  2. Python面试必备—分布式爬虫scrapy+redis解析
  3. android8.0更新手机,安卓微信8.0.6正式更新:可发1G大文件、表情互动等多项更新!...
  4. Android进度条函数,Android实用笔记——使用ProgressBar实现进度条
  5. quickpcb添加pcb库_南京阿勒勾电子 quickpcb2005详细步骤教程
  6. python idle是什么_下载下来的IDLE是个什么鬼
  7. 一个远程线程注入的类
  8. TLQ的安装路径不存在或不正确
  9. vue动态创建三级导航
  10. Flutter InkWell Ink组件
  11. 在Unity3D中使用泛型(上)
  12. P3224 [HNOI2012]永无乡 FHQ-Treap 启发式合并
  13. Spring Boot 起步依赖
  14. 机器视觉引导定位系统,工业视觉定位检测
  15. newman执行测试_Postman+Newman执行自动化测试
  16. 520表白文案来了[联络易]
  17. 驱动LSM6DS3TR-C实现高效运动检测与数据采集(4)----上报匿名上位机实现可视化
  18. web自动化之trigger()常用鼠标操作事件
  19. 第6周学习笔记未完成
  20. 第31届南京地区研究生通信年会录用论文集

热门文章

  1. 对于接口得容错性测试
  2. python填充excel单元格颜色_openpyxl给excel填充颜色
  3. 上线三年却很“鸡肋”的微信声音锁究竟做错了什么?
  4. ElasticSearch学习总结2(基础查询)
  5. 魏俊妮《全面培训系统建设与培训管理实务》课程大纲
  6. ubuntu 18.04 + SVO2.0
  7. 汽车零部件智能工厂MES生产进度管理系统
  8. 【C语言】求方程式 ax^2+bx+c=0 的根, 分别考虑: 1、有两个不等的实根 2、有两个相等的实根
  9. 80端口为什么要备案_Nginx只允许域名访问网站,禁止使用IP 访问80,443端口
  10. 中国石油天然气行业供需格局及消费需求前景调查报告2021年版