tp5生成微信小程序带参二维码

本文介绍了一个用于生成微信小程序二维码的PHP类。该类通过调用微信API接口,根据提供的小程序ID和品牌信息生成二维码,并将二维码图片存储在七牛云中。文章详细展示了如何使用该类实现二维码生成的过程。
class Wechatqrcode extends Controller
{
	//调用接口查看是否存在二维码
    public function GenerateCodeImg(Request $request)
    {
        $param = $request->param();

        if( !isset($param['id']) || empty($param['id']) ) return return_msg('210','参数');
        if( !isset($param['brand']) || empty($param['brand']) ) return return_msg('210','参数');

        $PhotoLikesTask = model('PhotoLikesTask');
        $codeimg = $PhotoLikesTask->where('id',$param['id'])->value('qrcode');
		
		//存在直接输出二维码存放在七牛云空间的路径
        if( !empty($codeimg) ){
            return return_msg('200','二维码已经存在',$data['info'] = 'https://'.config('qiniu')['domain'].'/'.$codeimg);
        }

        $token = json_decode($this->curl_get(),true);
        //获取凭证出错
        if( empty($token['access_token']) ){
            return false;
        }

        $url = 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$token['access_token'];

        $data = json_encode([
            'width'=>400,
//            'auto_color'=>false,
            'scene'=>$param['id'].'*'.$param['brand'],
            'page'=> 'pages/c-profile/activity/goDowning/goDownding',
        ]);
        $header = [
            'Content-type: application/json;charset=utf-8',
            'Content-Length:' . strlen($data)
        ];
        $result = self::httpPost($url, $data, '', $header);
        if (!$result){
            return return_msg('400','获取文件流失败');
        }
        //生成转化为base64文件流
//        $base64String = 'data:image/png' . ';base64,' . base64_encode($result);
//        return $base64String;
        $name = $param['id'].rand(1111,9999);
        $key = $this->QiniuUpload($name,$result);
        if( !is_string($key) ) return $key;

        $res = $PhotoLikesTask->where('id',$param['id'])->update(['qrcode'=>$key]);

        return $res === 1 ? return_msg('200','成功','https://'.config('qiniu')['domain'].'/'.$key) : return_msg('400','失败');
    }

    //php get请求网络的方法
    function curl_get(&$httpCode = 0) {
        $appid = config('wechat')['appid'];
        //小程序秘钥
        $secret =  config('wechat')['appSecret'];
        $url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        //不做证书校验,部署在linux环境下请改为true
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
        $file_contents = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        return $file_contents;
    }

    public static function httpPost($url, $post_data, $cookieDir = '', $header = []) {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HEADER, false);
        if ($header) curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 0);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_REFERER, $url);
        curl_setopt($curl, CURLOPT_TIMEOUT, 120);
        if ($cookieDir) curl_setopt($curl, CURLOPT_COOKIEJAR, $cookieDir);
        $UserAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36';
        curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);
        $data = curl_exec($curl);
        return $data;
    }

    function QiniuUpload($name,$result)
    {
    	// 七牛鉴权账号
        $accessKey = config("qiniu")['accessKey'];
        $secretKey = config("qiniu")['secretKey'];

        $key = md5($name.time()).'.png';

        // 构建鉴权对象
        $auth = new Auth($accessKey, $secretKey);
        // 要上传的空间
        $bucket = config("qiniu")['bucket'];
        $token = $auth->uploadToken($bucket);
        $uploadMgr = new UploadManager();
        list($ret, $err) = $uploadMgr->put($token, $key, $result);
        if ($err !== null) {
            return return_msg('400',$err);
        }

        return $key;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值