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 相关文章推荐
台湾中原大学php教程孙仲岳主讲
Jan 07 PHP
DedeCMS dede_channeltype表字段注释
Apr 07 PHP
PHP 通过Socket收发十六进制数据的实现代码
Aug 16 PHP
ThinkPHP调用百度翻译类实现在线翻译
Jun 26 PHP
PHP获取时间排除周六、周日的两个方法
Jun 30 PHP
php中header跳转使用include包含解决参数丢失问题
May 08 PHP
php简单实现多维数组排序的方法
Sep 30 PHP
PHP 文件上传后端处理实用技巧方法
Jan 06 PHP
php实现留言板功能(代码详解)
Mar 28 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 PHP
PHP让数组中有相同值的组成新的数组实例
Dec 31 PHP
laravel 如何实现引入自己的函数或类库
Oct 15 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
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
validator验证控件使用代码
2010/11/23 Javascript
a标签的href和onclick 的事件的区别介绍
2013/07/26 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
JS弹出可拖拽可关闭的div层完整实例
2015/02/13 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
Web安全测试之XSS实例讲解
2016/08/15 Javascript
AngularJS表达式讲解及示例代码
2016/08/16 Javascript
bootstrap表格分页实例讲解
2016/12/30 Javascript
Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法
2017/09/20 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
Vue父组件监听子组件生命周期
2020/09/03 Javascript
从零学Python之入门(二)基本数据类型
2014/05/25 Python
仅用50行代码实现一个Python编写的计算器的教程
2015/04/17 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
python logging日志模块的详解
2017/10/29 Python
python中format()函数的简单使用教程
2018/03/14 Python
Tensorflow实现卷积神经网络的详细代码
2018/05/24 Python
Python查看微信撤回消息代码
2018/06/07 Python
django配置app中的静态文件步骤
2020/03/27 Python
python小程序基于Jupyter实现天气查询的方法
2020/03/27 Python
Python日志logging模块功能与用法详解
2020/04/09 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
Python+PyQt5+MySQL实现天气管理系统
2020/06/16 Python
德国知名健康零食网上商店:Seeberger
2017/07/27 全球购物
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
与C++相比,Java中的数组有什么不同
2014/03/25 面试题
八年级数学教学反思
2014/01/31 职场文书
初中生操行评语大全
2014/04/24 职场文书
青年志愿者活动总结
2014/04/26 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
vue 自定义组件添加原生事件
2022/04/21 Vue.js