php微信开发之批量生成带参数的二维码


Posted in PHP onJune 26, 2016

带参数的二维码对于渠道营销推广来说是很有用的,可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送,可喜的是微信开通了这个接口,那下面就来研究一下吧。
 具体接口说明请参见,微信公众平台开发者文档(http://mp.weixin.qq.com/wiki/18/28fc21e7ed87bec960651f0ce873ef8a.html) ,我这里就直接上代码。
 演示图:

 php微信开发之批量生成带参数的二维码

由于带参数二维码生成是有限的,所有我是按编号生成的,下次生成的时候直接累加。
另外带设置有备注,方便以后统计。

public function createewm(){
     if(IS_POST){
       $access_token=checkAccessToken($this->token); //获取access_token
       $json_url='https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token='.$access_token;
        
       $action_name=$this->_post('action_name');  //生成类型(临时、永久)
       $create_num=$this->_post('create_num');   //生成数量
 
       //数据库里查询最后生成一个编号
       $now_secne_id=M('erweima')->where(array('token'=>$this->token))->order('scene_id desc')->getField('scene_id');
 
       //新生成在最后一个编辑上加1
       $start_secne_id=intval($now_secne_id)+1;
       $end_secne_id=intval($now_secne_id)+intval($create_num);
       $n=0;
       for($i=$start_secne_id;$i<=$end_secne_id;$i++){
         $curl_data='';
         if($action_name=='QR_SCENE'){
           //临时 post的json数据
           $curl_data='{"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": '.$i.'}}}';
        }
         
         if($action_name=='QR_LIMIT_SCENE'){
          //永久 post的json数据
           $curl_data='{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": '.$i.'}}}';
         } 
         $json_info=json_decode($this->api_notice_increment($json_url,$curl_data),true); 
 
         //这里代表生成成功,记录数据以便插入到数据库,方便以后统计查找
         if($json_info['errcode']!=40013){ 
           $data[$n]['token']=$this->token;
           $data[$n]['tiket']=$json_info['ticket'];
           $data[$n]['url']=$json_info['url'];
           $data[$n]['scene_id']=$i;
           $data[$n]['expire_seconds']=$json_info['expire_seconds'];
           $data[$n]['action_name']=$action_name;
           $data[$n]['remark']='';
           $data[$n]['createtime']=time();
           $n++;
         }else{
           $this->error('操作失败');
         }
       }
      if(count($data)>0){
         $res= M('erweima')->addAll($data);//插入数据
         if($res){
          $this->success('添加成功');
         }else{
          $this->error('操作失败');
         }
       }else{
         $this->error('操作失败');
       } 
     } 
  }
function api_notice_increment($url, $data){
    $ch = curl_init();
    $header = "Accept-Charset: utf-8";
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $tmpInfo = curl_exec($ch);
    if (curl_errno($ch)) {
      //curl_close( $ch )
      return $ch;
    }else{
      //curl_close( $ch ) 
      return $tmpInfo;
    }
    curl_close( $ch ) ;
  }

很简单,基本够用了,喜欢就拿走

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
操作Oracle的php类
Oct 09 PHP
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
Sep 01 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
Dec 29 PHP
查找php配置文件php.ini所在路径的二种方法
May 26 PHP
linux下安装php的memcached客户端
Aug 03 PHP
PHP文件上传判断file是否己选择上传文件的方法
Nov 10 PHP
php绘制圆形的方法
Jan 24 PHP
php微信开发之上传临时素材
Jun 24 PHP
用PHP的socket实现客户端到服务端的通信实例详解
Feb 04 PHP
thinkPHP5.0框架模块设计详解
Mar 18 PHP
php 可变函数使用小结
Jun 12 PHP
laravel批量生成假数据的方法
Oct 09 PHP
php日期操作技巧小结
Jun 25 #PHP
php项目开发中用到的快速排序算法分析
Jun 25 #PHP
php函数传值的引用传递注意事项分析
Jun 25 #PHP
php好代码风格的阶段性总结
Jun 25 #PHP
php编译安装php-amq扩展简明教程
Jun 25 #PHP
将PHP的session数据存储到数据库中的代码实例
Jun 24 #PHP
php自动载入类用法实例分析
Jun 24 #PHP
You might like
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
javascript Xml增删改查(IE下)操作实现代码
2009/01/30 Javascript
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
Jquery同辈元素选中/未选中效果的实例代码
2013/08/01 Javascript
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
JS.getTextContent(element,preformatted)使用介绍
2013/09/21 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
jQuery+CSS3实现点赞功能
2017/03/13 Javascript
JAVA中截取字符串substring用法详解
2017/04/14 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
uni-app微信小程序登录授权的实现
2020/05/22 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
Windows下使Python2.x版本的解释器与3.x共存的方法
2015/10/25 Python
python设计模式大全
2016/06/27 Python
一些常用的Python爬虫技巧汇总
2016/09/28 Python
Python根据欧拉角求旋转矩阵的实例
2019/01/28 Python
Pandas统计重复的列里面的值方法
2019/01/30 Python
django如何通过类视图使用装饰器
2019/07/24 Python
Python3列表List入门知识附实例
2020/02/09 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
浅谈keras使用中val_acc和acc值不同步的思考
2020/06/18 Python
Django如何实现防止XSS攻击
2020/10/13 Python
PyTorch预训练Bert模型的示例
2020/11/17 Python
广州某公司软件工程师面试题
2014/12/22 面试题
岗位竞聘书范文
2014/03/31 职场文书
《大海那边》教学反思
2014/04/09 职场文书
合作与交流自我评价
2015/03/09 职场文书
就业推荐表院系意见
2015/06/05 职场文书
写作技巧:如何撰写商业计划书
2019/08/08 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2022/07/07 Java/Android