官方文档:获取小程序码
以下是代码,直接可以用
<?php
namespace app\logic;
/**
* 图片二维码接口整合
*/
class qrcodeLogic
{
protected $wxAppID;
protected $wxAppSecret;
protected $wxAccessTokenUrl;
function __construct(){
$this->wxAppID = config('wx.app_id');
$this->wxAppSecret = config('wx.app_secret');
$this->wxAccessTokenUrl = sprintf(config('wx.access_token_url'),$this->wxAppID,$this->wxAppSecret);
}
// 获取二维码小程序
public function createQrcode($type = 'qrcode')
{
$path = input('path');
$scene = input('scene');
$result=curl_get($this->wxAccessTokenUrl);
//json_decode字符串变数组
$wxResult = json_decode($result,true);
if(empty($wxResult)){
return SuccessOrNot(false,200,[],['err'=>'获取access_token异常']);
}
if($type == 'qrcode'){
$url = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=".$wxResult['access_token'];
}else{
$url = "https://api.weixin.qq.com/wxa/getwxacode?access_token=".$wxResult['access_token'];
}
$data = array(
'path' => $path."?".$scene,
'width' => 200
);
$data = json_encode($data);
$options = array(
'http' => array(
'header' => "Content-Type: application/json\r\n",
'method' => 'POST',
'content' => $data
)
);
$context = stream_context_create($options);
if($type == "bgqrcode"){
$imageData = file_get_contents($url, false, $context);
$pathName = md5($path.$scene) ;
$this->mergeQrcode($imageData,"upload/qr/{$type}/",$pathName.'.jpg') ;
return SuccessOrNot(true,200,request()->domain()."/upload/qr/{$type}/{$pathName}.jpg");
}else{
$imageData = file_get_contents($url, false, $context);
$pathName = md5($path.$scene) ;
file_put_contents("upload/qr/{$type}/{$pathName}.jpg", $imageData);
return SuccessOrNot(true,200,request()->domain()."/upload/qr/{$type}/{$pathName}.jpg");
}
}
// 将背景图和生成的小程序码合成
public function mergeQrcode($qrcodeImg,$savePath,$saveName)
{
$bgImg = imagecreatefromstring(file_get_contents('upload/qr/img/bgimg.png'));
$qrcodeImg = imagecreatefromstring($qrcodeImg);
$qrcodeImg = imagescale($qrcodeImg, 140, 140);
$bgImgWidth = imagesx($bgImg);
$bgImgHeight = imagesy($bgImg);
$qrcodeImgWidth = imagesx($qrcodeImg);
$qrcodeImgHeight = imagesy($qrcodeImg);
$qrcodeImgX = 90;
$qrcodeImgY = abs(212 - $bgImgHeight);
imagecopymerge($bgImg, $qrcodeImg, $qrcodeImgX, $qrcodeImgY, 0, 0, $qrcodeImgWidth, $qrcodeImgHeight, 100);
if(!is_dir($savePath)){
mkdir($savePath,0777,true);
}
imagejpeg($bgImg,$savePath.$saveName);
imagedestroy($bgImg);
imagedestroy($qrcodeImg);
return $savePath.$saveName;
}
}