生成小程序二维码(二进制数据流转图片存储上传七牛)

公司项目小程序分享海报需要太阳码、基于这一点去看了下小程序码文档
文档提供了三个方法,可根据项目场景选择适合的。

一. 小程序码

1、生成小程序码的前提需要拿到 access_token
官方给的接口:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;

2、 生成小程序码:POST https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN

通过上面的方法会直接返回图片二进制内容,但是前端如果需要处理成海报那就不太友好了,所以需要后端处理一下,最好返回一个静态资源地址。
下面具体说一下怎么处理这个二进制图片,下面封装的代码我也会贴出来。

二. 处理二进制

1、二进制转base64
/* 二进制转图片image/png*/
    //$contents 二进制图片   $mime  'image/jpeg'
    public  function data_uri($contents, $mime)
    {
        $base64 = base64_encode($contents);
        return 'data:' . $mime . ';base64,' . $base64;
    }
2、上传七牛云(二进制文件生成本地文件:base64Upload,由本地上传到七牛云)
 public  function base64ToOss($base64){
        $result = $this->base64Upload($base64);
        if ($result['code'] != 200) {
            return ['code' => $result['code'], 'msg' => $result['msg']];
        }
        $fileResult  = &$result['data'];
        $filePath    = '/upload/image/' . $fileResult['name'];
//        $filePath =  $fileResult['path'] . $fileResult['name'];
        $ossFileName = implode('/', ['upload/image', $fileResult['name']]);
        try {
            //上传七牛
             $arr = $this->uploadQiniu($ossFileName,$filePath);
        } catch (\Exception $e) {
            return ['code' => 400, 'msg' => $e->getMessage()];
        } finally {
            unlink('.'.$filePath);
        }
        return ['code' => 200, 'info' => $arr];
    }

下面是生成本地文件的方法

public  function base64Upload($base64, $path = '')
    {
//        dd($base64);;
        $data = explode(',', $base64);
        unset($base64);
        if (count($data) !== 2) {
            return ['code' => 400, 'msg' => '文件格式错误'];
        }
        if (preg_match('/^(data:\s*image\/(\w+);base64)/', $data[0], $result)) {
            $type = $result[2];
            if (!in_array($type, array('jpeg', 'jpg', 'gif', 'bmp', 'png'))) {
                return ['code' => 400, 'msg' => '文件格式不在允许范围内'];
            }
            $image_name = md5(uniqid()) . '.' . $result[2];
            $image_path = "./upload/image/";
            $image_file = $image_path . $image_name;
            if (!file_exists($image_path)) {
                mkdir($image_path, 777, true);
            }
            //服务器文件存储路径
                if (file_put_contents($image_file, base64_decode($data[1])) == true)  {
                    return ['code' => 200, 'msg' => '成功', 'data' => ['name' => $image_name, 'path' => $image_path]];
                } else {
                    return ['code' => 400, 'msg' => '文件保存失败'];
                }
        }
        return ['code' => 400, 'msg' => '文件格式错误'];
    }

以及传七牛的方法
前提是你需要先运行:

composer require zgldh/qiniu-laravel-storage
public function uploadQiniu( $img,  $filename)
    {
        $disk = QiniuStorage::disk('qiniu'); //使用七牛云上传
        $res = $disk->put($filename, file_get_contents($img));//上传
        \Log::info('二维码 七牛上传', [$res]);
        $filepath = env('QINIU_DOMAIN', 'http://qiniu-photo.jinshouping.com') .$filename;
        return $filepath;
    }

以上就是拿到小程序太阳码生成静态地址的方法。多多交流。

本作品采用《CC 协议》,转载必须注明作者和本文链接
满腹经纶,才能江山如画。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!