公司專案小程式分享海報需要太陽碼、基於這一點去看了下小程式碼文件。
文件提供了三個方法,可根據專案場景選擇適合的。
一. 小程式碼
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 協議》,轉載必須註明作者和本文連結