在common中封装curl函数,直接可以在类中使用,无需引入
if (!function_exists('api_notice_increment')) {
function api_notice_increment($url,$data)
{
$curl = curl_init();
$a = strlen($data);
$header = array("Content-Type: application/json; charset=utf-8","Content-Length: $a");
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl,CURLOPT_POST,1);
curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
}
生成小程序码,并存入数据库,返回地址
// 微信官方:通过该接口生成的小程序码,永久有效,有数量限制,
$durl = 'https://api.weixin.qq.com/wxa/getwxacode?access_token='.$token;
$data = '';
switch ($type) {
case 1:
$data = ["path"=>"pages/index/testDetail?id=".$id];
break;
case 2:
$data = ["path"=>"pages/index/consultDetail?id=".$id];
break;
case 3:
$data = ["path"=>"works/join/index"];
break;
}
$post_data = json_encode($data,true);
// 这里返回的不是二进制,而是base64位的,但是官方文档说是返回二进制,很奇怪
$qrcode = api_notice_increment($durl, $post_data);
$image ="data:image/jpeg;base64,".base64_encode( $qrcode );
$imageName = "25220_".date("His",time())."_".rand(1111,9999).'.png';
if (strstr($image,",")){
$image = explode(',',$image);
$image = $image[1];
}
$path = "uploads/knj/".date("Ymd",time());
if (!is_dir($path)){ //判断目录是否存在 不存在就创建
mkdir($path,0777,true); //创建文件,并赋予权限
}
$imageSrc= $path."/". $imageName;
$r = file_put_contents(ROOT_PATH ."public/".$imageSrc, base64_decode($image));
if (!$r) {
$this->error('生成二维码文件失败');
}else{
$code_model->setCode('/'.$imageSrc, $type, $id);
$this->success('', ['url'=> cdnurl('/'.$imageSrc, true)]);
}
获取服务器地址,拼接完整的图片,在返回地址时使用到
if (!function_exists('cdnurl')) {
/**
* 获取上传资源的CDN的地址
* @param string $url 资源相对地址
* @param boolean $domain 是否显示域名 或者直接传入域名
* @return string
*/
function cdnurl($url, $domain = false)
{
$regex = "/^((?:[a-z]+:)?\/\/|data:image\/)(.*)/i";
$cdnurl = \think\Config::get('upload.cdnurl');
$url = preg_match($regex, $url) || ($cdnurl && stripos($url, $cdnurl) === 0) ? $url : $cdnurl . $url;
if ($domain && !preg_match($regex, $url)) {
$domain = is_bool($domain) ? request()->domain() : $domain;
$url = $domain . $url;
}
return $url;
}
}