<?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
); i
f (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
);
}
}