网页授权——扫二维码获取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相关推荐

  1. 扫二维码访问网站、网页

    生活中时常会有这种情形,扫码登陆,扫码注册,扫码访问某网页等.其实其中的原理就是,这个二维码中包含了你要访问的地址的url,扫码可以解析其中的url从而进行访问. 下面以springboot项目来实现 ...

  2. Html 5 网页扫二维码 支持手机端 OpenCV JS

    开发微网页端或者BS架构的应用系统,有可能遇到支持"扫二维码"的需求,如果是钉钉等平台的内嵌微应用借助于平台App提供的API而获得"扫码"功能支持,而非这类平 ...

  3. 谷歌浏览器插件,当前网页地址的二维码

    经常在pc浏览网站时想要用手机来打开 如果登录了qq和微信直接复制就可以打开了 要是没有登录,而且网站地址很长,那就麻烦了 于是有个想法,如果有个浏览器插件可以直接将当前页的url生成二维码,如何手机 ...

  4. 医疗检查报告和影像资料,扫二维码就能查看!

    去医院看病不容易,尤其是三甲医院,排队挂号.排队看病.排队付费.排队取检查报告--似乎我们每一次去医院,医院给我们的印象就是非常的多人,而且是人挤人. 在排队取检查报告你有没有这样的经历:随身拎着厚厚 ...

  5. 跨端扫码确认实现Web登录(扫二维码登录)

    起初的想法是类似于QQ扫码登录,BILIBILI扫码登录一样,通过手机确认后,在web端重定向完成登录 通过对BILIBILI扫码功能的解析,自己实现了一套类似扫码登录的功能 以下为伪代码,仅供查阅 ...

  6. QQ 一键加群、扫二维码加群 - 腾讯官方API文档接入

    QQ 一键加群.扫二维码加群 - 腾讯官方API文档接入 QQ一键加群功能,腾讯API生成链接和二维码等等 获取地址:腾讯官方API文档接口 使用方法:引入对应的链接即可 这里有生成图片.二维码的功效 ...

  7. 安卓手机扫二维码从FTP服务器下载apk

    安卓手机扫二维码从FTP服务器下载apk Devops平台的APP下载页面: Linux服务器的FTP目录下的apk包: Controller层: /*** getFtpApk:安卓下载FTP上的ap ...

  8. 【BUUCTF】[安洵杯 2019]吹着贝斯扫二维码

    题目链接:[安洵杯 2019]吹着贝斯扫二维码. 下载压缩包解压得到这么一些文件,可以看到一堆未知类型文件和一个flag.zip 老规矩,把这些没有拓展名的文件用010Editor打开,发现都是jpg ...

  9. 网页前端知识汇总(三)——网页前端利用二维码插件qrcode生成在线二维码

    最近几年二维码的广泛应用,方便了很多行业,如支付宝,微信,小程序扫码之类的,这个在二十年前,想都不敢想这么方便,那时候有书刊编码扫一扫都感觉是高科技了,如今,二维码的广泛应用,生活还是方便了不少!这个 ...

最新文章

  1. 自定义数字格式字符串输出示例
  2. 并发编程-10线程安全策略之不可变对象
  3. 从编程角度看32位和64位
  4. [LOJ#2270][BZOJ4912][SDOI2017]天才黑客
  5. android获取3g或wifi流量信息,Android代碼----android獲取3G或wifi流量信息
  6. Linux学习笔记010---CentOS7下安装FTP服务
  7. 方格图片轮换JS特效
  8. 十大OpenGL教程
  9. [转]计算机类核心期刊投稿的一些资料汇总
  10. KUKA机器人使用PLC外部自动运行配置使用方法
  11. php中rand函数怎么用,php rand函数用法是什么
  12. 寒假宅喵java学习
  13. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛) 题解
  14. Vue 组件封装之 ScrollView 上拉加载更多
  15. 精读《Excel JS API》
  16. ncae的c语言编程高阶怎么考,NCAE考试科目.doc
  17. Markdown高级(使用教程)持续整理
  18. android侧滑抽屉滑动状态,android SlidingDrawer滑动抽屉
  19. 创龙基于TI AM335x ARM Cortex-A8 CPU,主频高达1GHz开发板CAN总线接口、RTC座
  20. 彻底搞懂Python中的zip()

热门文章

  1. 基于51单片机烟雾浓度检测超限报警Proteus仿真
  2. 【学习笔记】Python二级考试04 turtle库的使用
  3. 搭建Vue3开发微信小程序
  4. 陕西省中考所用计算机型号,2017中考语文(陕西)总复习知识清单二陕西省使用的教材中的常用字词.doc...
  5. 1000卡路里计算器_Excel卡路里计数器
  6. 使用PHP来操作Cassandra
  7. cocos creator | 添加组件没有用户脚本解决办法
  8. 网络异常:Failed to start LSB: Bring up/down networking
  9. [月报] 掘金翻译计划月报 — 2018 年 12 月
  10. 亚马逊CTO:未来十年的三大风向标