网页授权——扫二维码获取openid
网页授权——扫二维码获取openid
最近做微信公众平台开发项目时遇到这样一个功能需求:生成一个特定url的二维码,用户扫描二维码后跳转到这个url指定的页面,并在这个页面获得用户的openid。这个功能主要涉及到两方面的技术:生成二维码,网页授权。
1. 生成二维码:
生成二维码比较简单的方法是直接使用phpqrcode程序包(可在网上下载得到)。
若想获得ThinkPHP支持,需将程序包放在ThinkPHP/Extend/Vendor目录下,让后在程序中引用,代码如下:
vendor("phpqrcode.phpqrcode");
//要生成二维码的数据
$text="扫码后要跳转的页面的url";
//纠错级别, 纠错级别越高,生成图片会越大
//L水平 7%的字码可被修正
//M水平 15%的字码可被修正
//Q水平 25%的字码可被修正
//H水平 30%的字码可被修正
$level = "L";
//图片每个黑点的像素。
$size = "10";
//生成图片 第二个参数:是否保存成文件 如需要保存文件,第二个参数改为文件名即可,如:'qrcode.png'
QRcode::png($text,false,$level,$size);
2. 网页授权:
要获取用户的openid,需要进行网页授权。
首先要到公众平台官网的开发者中心页配置授权回调域名。
将二维码url设置为:
$text="https://open.weixin.qq.com/connect/oauth2/authorize?
appid=公众appid&
redirect_uri=扫码后要跳转的页面url&
response_type=code&
scope=snsapi_base&
state=1#wechat_redirect";
注意:有时候$text内部换行会导致一个错误,就是用户扫码的时候会出现“AppID参数错误”,还有一个问题就是安卓手机扫描页面跳转正常,但是用苹果手机扫描的时候还是会出现“AppID参数错误”,所以应该将$text表示如下:
$appid = 'wx65ab2a8f07b7621c';
$callback = 'http://a.ewm.net.cn/qiduoyun/jingxiaoshan/index.php/Admin/Signature/getsign';
$text="https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $appid . "&redirect_uri=" . urlencode($callback) . "&response_type=code&scope=snsapi_base&state=1#wechat_redirect";
这样就不会出错了,而且支持安卓手机和苹果手机正常扫码。
其中appid是公众号appid,redirect_uri是扫码后要跳转的页面url,response_type指定为code,用于换取access_token(获取用户基本信息的凭据),scope这里指定为snsapi_base,因为只需要获取用户的openid,state可用户传递其他开发者需要的参数,若无可随便填写,#wechat_redirect表示直接在微信中打开页面。
这样用户扫二维码后就会跳转到指定的url,并且传递了参数过来。然后就可以在跳转的页面中获取code,换取access_token,由于获取access_token的同时也获取到了openid,所以如果只需获取用户id,到这一步就已经实现了,代码如下:
$appid = "公众号appid";
$secret = "公众号appsecret";
$code = $_GET["code"];
$get_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code';
$res=file_get_contents($get_token_url);
$json_obj = json_decode($res,true);
$openid = $json_obj['openid'];
$openid即为扫码用户的openid。
关于网页授权获取用户基本信息更详细的知识请参阅公众平台开发文档:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html#
网页授权——扫二维码获取openid相关推荐
- 扫二维码访问网站、网页
生活中时常会有这种情形,扫码登陆,扫码注册,扫码访问某网页等.其实其中的原理就是,这个二维码中包含了你要访问的地址的url,扫码可以解析其中的url从而进行访问. 下面以springboot项目来实现 ...
- Html 5 网页扫二维码 支持手机端 OpenCV JS
开发微网页端或者BS架构的应用系统,有可能遇到支持"扫二维码"的需求,如果是钉钉等平台的内嵌微应用借助于平台App提供的API而获得"扫码"功能支持,而非这类平 ...
- 谷歌浏览器插件,当前网页地址的二维码
经常在pc浏览网站时想要用手机来打开 如果登录了qq和微信直接复制就可以打开了 要是没有登录,而且网站地址很长,那就麻烦了 于是有个想法,如果有个浏览器插件可以直接将当前页的url生成二维码,如何手机 ...
- 医疗检查报告和影像资料,扫二维码就能查看!
去医院看病不容易,尤其是三甲医院,排队挂号.排队看病.排队付费.排队取检查报告--似乎我们每一次去医院,医院给我们的印象就是非常的多人,而且是人挤人. 在排队取检查报告你有没有这样的经历:随身拎着厚厚 ...
- 跨端扫码确认实现Web登录(扫二维码登录)
起初的想法是类似于QQ扫码登录,BILIBILI扫码登录一样,通过手机确认后,在web端重定向完成登录 通过对BILIBILI扫码功能的解析,自己实现了一套类似扫码登录的功能 以下为伪代码,仅供查阅 ...
- QQ 一键加群、扫二维码加群 - 腾讯官方API文档接入
QQ 一键加群.扫二维码加群 - 腾讯官方API文档接入 QQ一键加群功能,腾讯API生成链接和二维码等等 获取地址:腾讯官方API文档接口 使用方法:引入对应的链接即可 这里有生成图片.二维码的功效 ...
- 安卓手机扫二维码从FTP服务器下载apk
安卓手机扫二维码从FTP服务器下载apk Devops平台的APP下载页面: Linux服务器的FTP目录下的apk包: Controller层: /*** getFtpApk:安卓下载FTP上的ap ...
- 【BUUCTF】[安洵杯 2019]吹着贝斯扫二维码
题目链接:[安洵杯 2019]吹着贝斯扫二维码. 下载压缩包解压得到这么一些文件,可以看到一堆未知类型文件和一个flag.zip 老规矩,把这些没有拓展名的文件用010Editor打开,发现都是jpg ...
- 网页前端知识汇总(三)——网页前端利用二维码插件qrcode生成在线二维码
最近几年二维码的广泛应用,方便了很多行业,如支付宝,微信,小程序扫码之类的,这个在二十年前,想都不敢想这么方便,那时候有书刊编码扫一扫都感觉是高科技了,如今,二维码的广泛应用,生活还是方便了不少!这个 ...
最新文章
- Linux 脚本编写基础(二)
- 移动端不利用HTML5和echarts开发一样可以实现大数据展示及炫酷统计系统(产品技术综合)...
- python文件写入字典格式输出_Python把对应格式的csv文件转换成字典类型存储脚本的方法...
- Index of Java
- 代码生成技术--CodeDom VS T4
- 学习和使用web标准的十大理由
- Net4.0---对HTML净化的处理
- linux虚拟机 dev sda2,虛擬機linux下 /dev/sda2 滿了怎么辦,測試用過,真實可行
- 正则表达式30分钟入门教程(转载)
- 终于能在Linux下用firefox使用支付宝了!!!
- 思科路由器 密码设置和恢复
- 移植u-boot到树莓派
- stm32c6t6硬件iic接口的使用--以0.96寸oled为例
- mybatis中大于小于号转义字符
- java毕业设计_基于android的二手书城app的设计与实现
- 阿里云ECS服务器配置全攻略
- IP5306是一款2.1A 充电 2.4 A 放电高集成度移动电源 SOC
- 牛客大回馈,华为云优惠购买与使用心得
- Java解析XML数据(三)——强大的XOM之simple-xml解析
- 前端js打开pdf文件--文件通过浏览器打开,以pdf形式进行预览
热门文章
- pageOffice测试版使用配置说明
- 20201227一周学习总结(CNN)
- 数据分析师的职业规划
- python2.0迅雷下载_Walle|Walle(开源部署工具)下载v2.0.0官方版 - 欧普软件下载
- Android平台一款UI体验好于NumberPicker的自定义控件NumberPickerView
- Hibernate基础(by cju)
- unity3d人脸识别(二),实现摄像头画面实时检测对比,实现刷脸功能
- Hbase2.0版本 Region处于RIT状态
- 欧拉角-万象死锁-理解
- 19.11.30联赛 Problem G. Can LYJ Pass The CET-4?