文章目录

  • 一、前言
  • 二、登录微信开放平台,申请网页应用
  • 三、抓取授权二维码原理
  • 四、测试
  • 五、核心代码
  • 六、补充:如何知道用户扫码成功

一、前言

Unity发布PC平台,如果在PC平台想要使用微信登录,需要在微信开放平台申请网页应用,然后使用浏览器访问登录页,获取到二维码,通过手机扫码登录。
这里就涉及到一个问题:浏览器。
方案一:自己做一个迷你浏览器(可以参见我这篇文章:https://blog.csdn.net/linxinfa/article/details/109030199);
方案二:直接通过UnityWebRequest访问页面并解析出二维码链接,通过RawImage直接显示在UI上。
本篇文章我介绍方案二的做法。

二、登录微信开放平台,申请网页应用

首先,你需要先在微信开放平台申请网页应用,这样才能有对应的应用参数,用于调用API

三、抓取授权二维码原理

根据官方文旦,构造授权链接
https://open.weixin.qq.com/connect/qrconnect?appid=wxbdc5610cc59c1631&redirect_uri=https%3A%2F%2Fpassport.yhd.com%2Fwechat%2Fcallback.do&response_type=code&scope=snsapi_login&state=3d6be0a4035d839573b04816624a415e#wechat_redirect
其中各个参数根据你申请的应用参数而定。
执行https请求,可以抓取到网页源码,解析出wrp_code节点的src的值,比如这里是:
/connect/qrcode/021XYI6c566IXqbR

然后,就可以构造出二维码的url了,就是前面拼接上域名https://open.weixin.qq.com/,即
https://open.weixin.qq.com/connect/qrcode/021XYI6c566IXqbR
然后在Unity中,我们就可用通过UnityWebRequest类加载出二维码的Texture了,直接在UI上显示出来。

四、测试

五、核心代码

using System;
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
using System.Text.RegularExpressions;
using UnityEngine.UI;public class Main : MonoBehaviour
{public RawImage qrcodeImg;void Start(){StartCoroutine(SendRequest());}/// <summary>/// 开启一个协程,发送请求/// </summary>/// <returns></returns>IEnumerator SendRequest(){string url = @"https://open.weixin.qq.com/connect/qrconnect?appid=wxbdc5610cc59c1631&redirect_uri=https%3A%2F%2Fpassport.yhd.com%2Fwechat%2Fcallback.do&response_type=code&scope=snsapi_login&state=3d6be0a4035d839573b04816624a415e#wechat_redirect";UnityWebRequest uwr = UnityWebRequest.Get(url);yield return uwr.SendWebRequest();                               if (uwr.isHttpError || uwr.isNetworkError)                       {Debug.Log(uwr.error); }else {string htmlStr = uwr.downloadHandler.text;//Debug.Log(htmlStr);//使用正则表达式匹配搜索qrcode图片string pattern = "img class=\"qrcode lightBorder\" src=\"(\\S*)\"";Regex rgx = new Regex(pattern);Match m = rgx.Match(htmlStr);if(null != m){//二维码的链接string qrcodeUrl = "https://open.weixin.qq.com" + m.Groups[1].Value;//获取二维码图片UnityWebRequest qrcodeUwr = UnityWebRequest.Get(qrcodeUrl);yield return qrcodeUwr.SendWebRequest();if (qrcodeUwr.isHttpError || qrcodeUwr.isNetworkError){Debug.Log(qrcodeUwr.error);}else{//二维码的二进制流var qrcodeBytes = qrcodeUwr.downloadHandler.data;//转换成Texture,给RawImage显示Texture2D tex2D = new Texture2D(256, 256);tex2D.LoadImage(qrcodeBytes);qrcodeImg.texture = tex2D;}}}}
}

六、补充:如何知道用户扫码成功

答:上面访问登录页的https链接:https://open.weixin.qq.com/connect/qrconnect,会带一个redirect_uri参数,用户允许授权后,将会重定向到redirect_uri的网址上,并且带上codestate参数,若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数。
游戏开发者需自行部署一个web服务器,并提供访问链接作为redirect_uri,当redirect_uri被访问时,web服务器通知游戏服务器,游戏服务端再通过通信协议告知游戏客户端扫码结果。
注意,游戏服务端怎么知道这个回调应该通知哪个客户端呢?就是通过state来判断的,最开始游戏客户端应该先请求游戏服务端,让游戏服务端生成一个state,然后游戏客户端再去访问登录页链接https://open.weixin.qq.com/connect/qrconnect,这样回调redirect_uri时,游戏服务端就可以通过这个state知道是哪个游戏客户端发起的扫码授权了。

Unity发布PC平台,接入微信开放平台网页应用,扫码登录不拉起浏览器直接显示二维码在UI上相关推荐

  1. Android应用接入微信开放平台

    接入微信开放平台基本步骤 注册微信开发者账号 创建应用,获得AppID和AppSecret 填写应用信息,如包名和应用签名 下载范例代码 注意事项 要确保填写在微信开放平台的应用信息中AppID+包名 ...

  2. 微信公众平台与微信开放平台的区别、服务号、订阅号、企业微信的区别

    微信公众平台 vs 微信开放平台 微信公众平台是介绍公众号相关的内容,比如服务号.订阅号.企业微信,所以叫微信公众平台:公众平台也是公众号的管理端,可以编辑推送文章,通常是公众号的运营.开发登录: 微 ...

  3. 微信内置浏览器动态生成二维码并长按识别

    现如今围绕微信生态相关开发已经非常常见,本期带来如何通过 qrcode.js 实现微信内置浏览器动态生成二维码并能够长按识别 以及 通过 html2canvas 生成图片并长按保存 说几个知识点 微信 ...

  4. Jenkins配置自动打包app发布蒲公英显示二维码

    Jenkins配置自动打包app发布蒲公英显示二维码 搞了一周,终于弄好了,下面就是见证奇迹的时刻. 1.下载Jenkins,去官网点这里选择Windows版本: 2.下载完是个zip解压 安装 一路 ...

  5. 手把手教你接入微信开放平台,实现网站拉起微信账号登录,从0开始详细记录

    一点自述: [ 劝退篇:个人还是算了吧,看看流程就成,因为微信不给个人开放,可参考其中原因,下面都有截图 ] 我也是参考各种文章,避过.爬过各种坑才慢慢走过来.  首先,很多人找不到微信开放平台(即网 ...

  6. 成为腾讯开发者——如何使用QQ开放平台和微信开放平台

    最近的项目有这样一个需求,需要分享链接到QQ和微信中,这样iOS中应该怎样实现呢.方法也许有很多,但是我选择的是使用第三方API来实现这个功能--ShareSDK.这就需要我们先去申请成为QQ开发者和 ...

  7. 无广告托管应用,免费的应用分发平台,提供下载次数等数据统计,Android、ios应用合并,一个二维码搞定

    前言 省去自建服务器的麻烦,并且提供了下载次数等数据统计,可以随时查看历史版本,一个二维码搞定Android和ios,扫码时可根据机型自动识别,给开发者提供很大便利,不仅免费而且操作非常的简单. 1. ...

  8. 微信扫码支付功能(1)---通过谷歌二维码工具生成付款码

    生成付款二维码 一.微信网站扫码支付介绍 1.扫码支付文档 微信开发官方文档:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5 ...

  9. 微信扫描二维码跳转到小程序配置 获取二维码内容

    小程序开发 -> 开发管理 -> 开发设置 -> 扫普通链接二维码打开小程序 添加跳转规则,可配置项如下图 协议类型和选择大小写没啥好说的,前缀占用规则选择占用重点讲以下几条 二维码 ...

最新文章

  1. Java Day02-1
  2. 在ubuntu 11.10 64位 上安装adobe flash player
  3. C# 去重处理字符大小写
  4. springcloud 整合 gateway_从Spring Cloud到Kubernetes的微服务迁移实践
  5. UDK编辑器 49条小提示(转)
  6. 40.leetcode17_letter_combinations_of_a_phone_number
  7. 判断客户端是否安装FlashPlayer及版本
  8. 51单片机带闹钟c语言程序,51单片机定时闹钟程序(带按键)
  9. 开关量模块——一对多无线传输
  10. 在MAC上如何隐藏文件夹以及查看隐藏文件
  11. 深入理解 Java 中的转义符: \u000a\u0022
  12. 蓝桥杯0027 通信密码
  13. 电路分析第二章 二端口网络
  14. 佳能R3、佳能R5和佳能R6的区别
  15. 如何在Outlook 2019/Office 365中运行VBA脚本邮件规则
  16. gdal加入ecw支持(暂未解决)
  17. 极速实时荧光定量PCR仪助力科研检测
  18. 二维数组模拟酒店订房系统
  19. 小蜜蜂采集器 怎么用
  20. Excel之复制除了某几行之外的所有行(非专业人士,自用的土方法)

热门文章

  1. 【阿里云云计算工程师 ACP 认证】02、弹性块存储 EBS
  2. 校园网跑腿小程序源码
  3. 双系统Linux(Ubuntu20.04)深度学习安装+cuda驱动+cuda+anaconda
  4. 全国快递物流 API 实现快递单号自动识别的原理解析
  5. 对计算机等级考试成绩有异议能申请复查吗?怎么申请?
  6. 无人零售出海,进军还是溃逃?
  7. c语言产生20-100随机数,生成20个1-100不重复的随机数
  8. 题解:洛谷P1706全排列问题
  9. VS 快速把竖列的数组数据转为横列
  10. M1芯片Mac 安装git