thinkphp生成小程序码

在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;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值