前一段时间小编的公司接手了一个微信分销的项目,该项目中有一个推广二维码的功能:分销商可以生成自己的二维码,当其他用户首次扫描的时候会自动成为该分销商的下级。这个过程中最主要的就是利用微信的生成二维码接口生成一个永久的二维码。今天,我就结合自己开发中遇到的问题,和大家一块学习一下微信的二维码生成接口的使用。主要分为两部分:理论知识学习、代码编写实践

理论知识学习

在开始工作之前我们先来了解一下微信的二维码。

微信目前有2种类型的二维码:

1、临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量。临时二维码主要用于帐号绑定等不要求二维码永久             保存的业务场景
      2、永久二维码,是无过期时间的,但数量较少(目前为最多10万个)。永久二维码主要用于适用于帐号绑定、用户来源统计等场景。

获取带参数的二维码的过程包括两步,首先创建二维码ticket,然后凭借ticket到指定URL换取二维码。

一、创建二维码ticket

每次创建二维码ticket需要提供一个开发者自行设定的参数(scene_id),在这里我只介绍永久二维码创建二维码ticket过程。

http请求方式: POST

URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN

POST数据格式:json

POST数据例子:{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}}

参数说明

参数 说明
expire_seconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。
action_name 二维码类型,QR_SCENE为临时,QR_LIMIT_SCENE为永久,QR_LIMIT_STR_SCENE为永久的字符串参数值
action_info 二维码详细信息
scene_id 场景值ID,临时二维码时为32位非0整型,永久二维码时最大值为100000(目前参数只支持1--100000)
scene_str 场景值ID(字符串形式的ID),字符串类型,长度限制为1到64,仅永久二维码支持此字段 

正确的Json返回结果:

{"ticket":"gQH47joAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL2taZ2Z3TVRtNzJXV1Brb3ZhYmJJAAIEZ23sUwMEmm

3sUw==","expire_seconds":60,"url":"http:\/\/weixin.qq.com\/q\/kZgfwMTm72WWPkovabbI"}

二、通过ticket换取二维码

获取二维码ticket后,开发者可用ticket换取二维码图片。请注意,本接口无须登录态即可调用。

请求说明

HTTP GET请求(请使用https协议)https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET提醒:TICKET记得进行UrlEncode

返回说明

ticket正确情况下,http 返回码是200,是一张图片,可以直接展示或者下载。

代码编写实践

经过前面的理论知识学习,相信大家已经对微信生成二维码接口有了一些了解,Ok,接下来我们就编写代码测试一下。
一、获取ticket
                                $action_name="QR_LIMIT_SCENE";$json_arr = array('action_name'=>$action_name,'action_info'=>array('scene'=>array('scene_id'=>$scene_id)));$data = json_encode($json_arr);$this -> access_token($db);$ret = $db->getRow("SELECT `access_token` FROM `wxch_config`");$access_token = $ret['access_token'];if(strlen($access_token) >= 64) {$url = 'https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token='.$access_token;$ch = curl_init();curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");curl_setopt($ch, CURLOPT_TIMEOUT, 1);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);curl_setopt($ch, CURLOPT_URL, $url);if (defined('CURLOPT_IPRESOLVE') && defined('CURL_IPRESOLVE_V4')) {curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);}curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);$res_json= curl_exec ($ch);curl_close ($ch);$json = json_decode($res_json);$ticket = $json->ticket;// 9-15$json = json_decode($res_json);}$ticket = $json->ticket;

相信做过微信开发的朋友对我在上面贴出的代码会有疑惑:为何不把微信请求封装成一个方法。Ok,能提出这个问题,说明你已经对面向对象的封装有了一定的了解。小编刚开始也确实是把微信请求封装成了一个方法,无奈这个方法不太稳定,放弃之前的思路。

二、根据ticket获取二维码图片
             if($ticket){$ticket_url = urlencode($ticket);$ticket_url = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket='.$ticket_url;$imageinfo=$this -> downloadimageformweixin($ticket_url);$time = time();    $url=$_SERVER['HTTP_HOST'];          $path = '../images/qrcode/'.$time.'.jpg';$surl="http://".$url.'/images/qrcode/'.$time.'.jpg';$local_file=fopen($path,'a');if(false !==$local_file){if(false !==fwrite($local_file,$imageinfo)){fclose($local_file);//将生成的二维码图片的地址放到数据库中                      }}}

在上面的代码中,我把获取到的二维码下载下来之后有保存到了数据库中,这是项目需要,因人而异。

Ok,理论+知识学习完毕,不知道你学会了吗?

二维码在线调试工具

微信推广二维码接口使用总结相关推荐

  1. 微信支付之01------获取订单微信支付二维码的接口------Java实现

    [ 前言:以前写过一个获取微信二维码支付的接口,发现最近公司新开的项目会经常用到,现在我又翻出代码看了一遍,觉得还是把整个代码流程记下来的好 ] 借鉴博客: 他这篇博客写得不错,挺全的:https:/ ...

  2. 微信扫描二维码在内置浏览器打不开文件的下载链接怎么办?哪些api接口可以解决...

    有哪些api接口可以实现微信扫描二维码在内置浏览器打开文件的下载链接? 经常看到贴吧上有人吐槽微信的检测系统太严格了,动不动就拦截第三方链接.怎么才能解决,怎么才能避免等等一系列的问题.因为平时我也会 ...

  3. [微信开发] - 用户获取推广二维码

    通过生成带参二维码,将用户的openid获取的同时做为参数,生成后,另一个用户扫码该二维码,系统可以获取到新用户openid的同时,也能标识着是哪个用户被扫码了. 更多的图 通过上图可以看到,当A君关 ...

  4. thinkphp5+php微信公众号二维码扫码关注推广二维码事件实现

    thinkphp5微信公众号二维码扫码关注推广二维码事件实现, 给出实现的全部方法: 获取二维码,让微信公众号跳转到以下代码的code方法即可,用户点击二维码后,通过二维码获取关注用户信息及二维码推广 ...

  5. 微信小程序订单生成支付二维码接口 code

    手机的小程序订单是直接拉起支付界面的,有些朋友需要生成支付二维码 这边就需要去调用微信的支付二维码接口了 需要的参数是 session_id, timeStamp, nonceStr, package ...

  6. 微信官方提供的生成二维码接口得到的是当前公众号的二维码

    转自:http://blog.csdn.net/phil_jing/article/details/53910083 微信官方提供的生成二维码接口得到的是当前公众号的二维码,官方文档 目前有2种类型的 ...

  7. PHP微信公众平台开发高级篇—生成二维码接口

    一.说明 1.这里讲解生成二维码接口(临时二维码和永久二维码) 2.这里给出简单的实现代码,不做详细说明 3.可以参考开发手册: https://mp.weixin.qq.com/wiki?t=res ...

  8. 微信官方提供的生成二维码接口得到的是当前公众号的二维码。

    一定说明,这种方法我还没有测试,如果有疑问欢迎在评论区域讨论. .................... ................... 谢谢. 微信官方提供的生成二维码接口得到的是当前公众号 ...

  9. 微信小程序获取二维码接口整理,.Net Core后台获取小程序二维码

    2019独角兽企业重金招聘Python工程师标准>>> 一.关于二维码接口说明 参考:https://my.oschina.net/tianma3798/blog/1811307 获 ...

最新文章

  1. C/C++中extern关键字详解
  2. 如何解决ORA-00054资源正忙,要求指定NOWAIT?
  3. 我知道乐观锁,但是我的确不知道CAS啊,到底什么是CAS
  4. 公布自己的pods到CocoaPods trunk 及问题记录
  5. NOIP模拟赛10 题解
  6. apache camel_Apache Camel –从头开始开发应用程序(第1部分/第2部分)
  7. java 使用json-lib 对象,String,json互转
  8. java stream intermediateterminal方法
  9. 理解iOS 8中的Self Sizing Cells和Dynamic Type
  10. 让你的手机不输kindle的3款epub阅读器
  11. 病毒木马查杀实战第022篇:txt病毒研究
  12. 17个能帮你节省时间的开发工具!(值得收藏)
  13. BeautyGAN论文翻译
  14. gridlayout计算器java_java新手编写亲戚计算器求助
  15. 制作天气接口API服务器【1.天气模块】
  16. mysql备份用户权限【转】
  17. 58同城陈小华:互联网新浪潮就是O2O
  18. @ControllerAdvice 用法
  19. java 按钮 事件_Java给按钮添加事件
  20. 3. 计算圆周长和面积

热门文章

  1. 盘点最近 火火火 的 7 个 GitHub 项目
  2. codeblocks无法找到编译器问题的三个原因
  3. BRAF蛋白F595S G615R突变的影响
  4. 什么是MTU值,如何设置最快最好?
  5. ubuntu20.04安装百度网盘
  6. stm32—酒精传感器的初步使用
  7. 微信小程序获取地理位置信息
  8. 罗技G603鼠标欧姆龙D2FC-F-7N微动开关拆解修复双击问题要点解析
  9. 北京邮电计算机相关知识,2019北京邮电大学计算机专业考研经验分享
  10. (73)Wangdao.com第十二天_JavaScript consol 对象与控制台