在做项目时候研究了好久希望大家都能用到嘻嘻!!!
1.首先封装二维码生成函数
//生成二维码
public function getQrcode(){
$access_token = (new WeiXin)->AccessToken();
$scene='扫码传过去的参数';
$url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={$access_token}";
$qrcode = '{"action_name":"QR_LIMIT_STR_SCENE","action_info":{"scene": {"scene_str":"'.$scene.'"}}}';
$result = $this->https_request($url,$qrcode);
$jsoninfo = json_decode($result,true);
$ticket = $jsoninfo['ticket'];
$url2 = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=$ticket";
return $url2;
}
// 发送接口请求
private function https_request($url,$data = null){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
2.再封装一个生成LOGO的函数
//生成二维码图片
private function createcode($qrcodeurl){
$createcode=Yii::$app->params['imgUploadUrl'].'/store/code/'.$storeIdImg;
if(!is_dir($codeurl)) mkdir($codeurl,0777,true);
file_put_contents($createcode, file_get_contents($qrcodeurl));
return $createcode;
}
//生成logo图片
private function createlogo(){
$createlogo=Yii::$app->params['imgUploadUrl'].'/store/logo/'.$logoIdImg;
$store_door_img=Yii::$app->session->get('store')['store_door_img'];
$store_logo=Yii::$app->session->get('store')['store_logo'];
if($store_door_img){
$logo=Yii::$app->params['imgUrl'].$store_door_img;
}elseif($store_logo){
$logo=Yii::$app->params['imgUrl'].$store_logo;
}else{
$logo=Yii::$app->params['imgUrl'].'/logo.png';
}
if(!is_dir($logourl)) mkdir($logourl,0777,true);
file_put_contents($createlogo, file_get_contents($logo));
$createlogo=Yii::$app->params['imgUrl'].'/store/logo/'.$logoIdImg;
return $createlogo;
}
3.通过函数合成logo
public function actionMyqrcode(){
//生成logo
$logo=$this->createlogo();
$a=Yii::$app->params['imgUrl'].'/store/code/'.Yii::$app->session['store']['store_id'].'.png';
if(@file_get_contents($a)){
$codelogo=$this->createlogocode($a,$logo);
return $this->renderPartial('myqrcode',['logo'=>$logo,'code'=>$codelogo]);
}
//生成微信二维码
$qrcodeurl = $this->getQrcode();
$QR=$this->createcode($qrcodeurl);
//生成中间带logo的二维码
$codelogo=$this->createlogocode($QR,$logo);
return $this->renderPartial('myqrcode',['logo'=>$logo,'code'=>$codelogo]);
}
//生成中间带logo的二维码
private function createlogocode($QR,$logo){
$storeUrl = Yii::$app->params['imgUploadUrl'].'/store/';
$codeurl = $storeUrl.'storecode/';
$storeIdImg = Yii::$app->session['store']['store_id'].'.png';
$createcode=Yii::$app->params['imgUploadUrl'].'/store/storecode/'.$storeIdImg;
$bcornerUpload=Yii::$app->params['imgUploadUrl'].'/store/corner.png';
$bcorner=Yii::$app->params['imgUrl'].'/store/corner.png';
if(!is_dir($codeurl)) mkdir($codeurl,0777,true);
$QR = imagecreatefromstring(file_get_contents($QR));
$logo = imagecreatefromstring(file_get_contents($logo));
$QR_width = imagesx($QR);
$QR_height = imagesy($QR);
if(!@file_get_contents($bcorner)){
file_put_contents($bcornerUpload,file_get_contents('".$_SERVER['SERVER_NAME']."/images/corner.png'));
}
//圆角图片
$corner = imagecreatefromstring(file_get_contents($bcorner));
$corner_width = imagesx($corner);
$corner_height = imagesy($corner);
//计算圆角图片的宽高及相对于二维码的摆放位置,将圆角图片拷贝到二维码中央
$corner_qr_height = $corner_qr_width = $QR_width/5;
$from_width = ($QR_width-$corner_qr_width)/2;
imagecopyresampled($QR, $corner, $from_width, $from_width, 0, 0, $corner_qr_width, $corner_qr_height, $corner_width, $corner_height);
$logo_width = imagesx($logo);
$logo_height = imagesy($logo);
$logo_qr_height = $logo_qr_width = $QR_width/5 - 6;
$from_width = ($QR_width-$logo_qr_width)/2;
imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
imagepng($QR,$createcode);
return Yii::$app->params['imgUrl'].'/store/storecode/'.$storeIdImg;
}