https://blog.csdn.net/qq_22823581/article/details/80248555

<?php
namespace app\api\model;
set_time_limit(30); class WxQrcode{
//构造方法
static $qrcode_url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?";
static $token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&";
static $qrcode_get_url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?"; //生成二维码
public function getEwm($fqid,$type = 1){
$appid = '你的appid';
$secret = '你的secret';
$ACCESS_TOKEN = $this->getToken($appid,$secret);
$url = $this->getQrcodeurl($ACCESS_TOKEN,$fqid,$type);
save_log('测试保存的路径'.$url.'fid'.$fqid);
return $this->DownLoadQr($url,time());
} protected function getQrcodeurl($ACCESS_TOKEN,$fqid,$type = 1){
$url = self::$qrcode_url.'access_token='.$ACCESS_TOKEN;
if($type == 1){
//生成永久二维码
$qrcode= '{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_str": '.$fqid.'}}}';
}else{
//生成临时二维码
$qrcode = '{"expire_seconds": 604800, "action_name": "QR_STR_SCENE", "action_info": {"scene": {"scene_str": '.$fqid.'}}}';
}
$result = $this->http_post_data($url,$qrcode);
$oo = json_decode($result[1]);
if (empty($oo->ticket)){
return false;
}
if(!$oo->ticket){
$this->ErrorLogger('getQrcodeurl falied. Error Info: getQrcodeurl get failed');
exit();
}
$url = self::$qrcode_get_url.'ticket='.$oo->ticket.'';
return $url;
} protected function getToken($appid,$secret){
$ACCESS_TOKEN = file_get_contents(self::$token_url."appid=$appid&secret=$secret");
$ACCESS_TOKEN = json_decode($ACCESS_TOKEN);
$ACCESS_TOKEN = $ACCESS_TOKEN->access_token;
return $ACCESS_TOKEN;
} protected function http_post_data($url, $data_string) { $ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json; charset=utf-8',
'Content-Length: ' . strlen($data_string))
);
ob_start();
curl_exec($ch);
if (curl_errno($ch)) {
$this->ErrorLogger('curl falied. Error Info: '.curl_error($ch));
}
$return_content = ob_get_contents();
ob_end_clean();
$return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
return array($return_code, $return_content);
} //下载二维码到服务器
protected function DownLoadQr($url,$filestring){
if($url == ""){
return false;
}
$filename = $filestring.rand(0,99999999999).'.jpg';
ob_start();
readfile($url);
$img=ob_get_contents();
ob_end_clean();
$size=strlen($img);
$fp2=fopen('static/qrcode/'.$filename,"a");
if(fwrite($fp2,$img) === false){
$this->ErrorLogger('dolwload image falied. Error Info: 无法写入图片');
exit();
}
fclose($fp2);
return 'static/qrcode/'.$filename;
} //错误日志
private function ErrorLogger($errMsg){
$logger = fopen('log.txt', 'a+');
fwrite($logger, date('Y-m-d H:i:s')." Error Info : ".$errMsg."\r\n");
fclose($logger);
} }

  

php微信生成微信公众号二维码扫描进入公众号带参数的更多相关文章

  1. Ios二维码扫描(系统自带的二维码扫描)

    Ios二维码扫描 这里给大家介绍的时如何使用系统自带的二维码扫描方法和一些简单的动画! 操作步骤: 1).首先你需要搭建UI界面如图:下图我用了俩个imageview和一个label 2).你需要在你 ...

  2. 官网app下载更换成微信公众号二维码 测试

    微信现在很火啊.公司官网原先提供的ios和andriod的app下载链接要求切换成微信公众号二维码.简单的替换,大家都说不需要测试直接上线.还是测了下. 1 验证所有与下载相关的信息都已去除. 包括下 ...

  3. 在next主题添加微信公众号二维码

    在侧边栏添加微信公众号二维码 首先,当然是准备一张微信公众号二维码.有两种添加方式,添加到侧边栏或者添加到推文的结尾处.我的next主题是7.x版本的,使用的主题是Gemini,设置的侧栏显示方式是一 ...

  4. 微信小程序条码、二维码生成模块

    代码地址如下:http://www.demodashi.com/demo/13994.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...

  5. 实现手机扫描二维码页面登录,类似web微信-第二篇,关于二维码的自动生成

    转自:http://www.cnblogs.com/fengyun99/p/3541251.html 接上一章,我们已经基本把业务逻辑分析清楚了 下面我们第一步,实现二维码的web动态生成. 页面的二 ...

  6. (用微信扫的静态链接二维码)微信native支付模式官方提供的demo文件中的几个bug修正

    native支付模式一demo(用微信扫的静态链接二维码)BUG修复,一共4个BUG 1.native_call_qrcode.php这个文件中的代码无法生存native支付的短地址2.WxPayPu ...

  7. 微信二维码扫描下载APK

    前几天给客户制作的app需要上线,生成二维码扫描进行下载,把生成好的apk挂在服务器端,将地址复制下来,通过草料二维码(http://cli.im/)生成一个二维码 也许你会看到有个app的选项,为什 ...

  8. Weixin 之 微信二维码扫描下载 Apk

    制作的手机 app 需要上线,生成二维码扫描进行下载,把生成好的apk挂在服务器端,将地址复制下来,通过草料二维码(http://cli.im/)生成一个二维码. 在更多中,你会看到有个app的选项, ...

  9. Android仿微信二维码扫描

    转载:http://blog.csdn.net/xiaanming/article/details/10163203 了解二维码这个东西还是从微信中,当时微信推出二维码扫描功能,自己感觉挺新颖的,从一 ...

随机推荐

  1. jQuery根据元素值或元素下标来删除一个数组元素及数组对象方法列表

    在前提不知道b在这个数组的下标,删除b这个元素  var arrList = ['a','b','c','d'];         arrList.splice(jQuery.inArray('b', ...

  2. Less 结合 nth-child 选择器循环生成样式

    问题描述: 实现头像的堆叠效果 从第二个头像开始,每个头像都会盖住前一个头像上,遮盖的宽度为 30px 实现叠加的方式有很多,比如给每个头像添加 translateX 属性,或者使用负值 margin ...

  3. 学linux,从Ubuntu开始

    1.安装过程出现0x00000000指令引用的0x00000000内存该内存不能为written 如果你安装的是inux系统 需要在设置-->系统--> 处理器--启用PAE支持我的就是这 ...

  4. HTML5中的input type为file控件限制上传文件类型及扩展

    简单介绍 input file控件限制上传文件类型如下:1.文件类型中间用,分开:2.html和htm这样的要写成两个: 3实例: <input type="file" na ...

  5. django请求和响应

    本文转载自https://blog.csdn.net/xiaogeldx/article/details/88096341 HttpRequest对象 服务器接收到http协议的请求后,会根据报文创建 ...

  6. js-new、object.create、bind的模拟实现【转载备忘】

    //创建Person构造函数,参数为name,age function Person(name,age){ this.name = name; this.age = age; } function _ ...

  7. 如何制作微信动态表情包 GIF制作工具哪个好

    表情包已经成为我们生活聊天中必不可少的一部分,但是如何制作微信动态表情包呢?自己制作的表情包更加独有个性,今天小编带大家看一波原创表情包的制作方法吧! 使用工具:电脑 操作方法: 1.首先在手机上也是 ...

  8. Vue的href动态拼接绑定

    <div id="appp"> <table> <tr v-for="item in sites"> <td> ...

  9. mysql之数据备份与恢复

    本文内容: 复制文件法 利用mysqldump 利用select into outfile 其它(列举但不介绍) 首发日期:2018-04-19 有些时候,在备份之前要先做flush tables , ...

  10. 使用Visual Studio Team Services持续集成(四)——使用构建运行测试

    使用Visual Studio Team Services持续集成(四)--使用构建运行测试 使用构建来运行测试来验证集成是一个很好的实践. MyHealth.API.IntegrationTests ...