后端获取的小程序码,转换成base64,返回给前端,前端转换成临时地址,再写入到canvas海报中
后台的
php
public function getCreateQrCode() {
$orderid = $this->request->post('orderid');
$page = $this->request->post('page');
$params = [
'appid' => Config::get('ask.wxappid'),
'secret' => Config::get('ask.wxappsecret'),
'grant_type' => 'client_credential'
];
//获取微信调用凭据
$get_access_token = Http::sendRequest("https://api.weixin.qq.com/cgi-bin/token", $params, 'GET');
if(isset($get_access_token['msg'])){
$access_arr = json_decode($get_access_token['msg'],true);
$access_token = $access_arr['access_token'];
}else{
$this->error('微信授权失败!');
}
$minicode = [
'scene' => $orderid,
'page' => $page,
'width' => 600,
'env_version' => 'trial'
];
$json = json_encode($minicode); //数组加密
$url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=".$access_token;
$getwxacodeunlimit = Http::sendRequest($url, $json, 'POST');
// 'data:image/png;base64,' . 不添加前缀,前端需要转换为二进制
$img_base64 = base64_encode($getwxacodeunlimit['msg']);//转化base64
$this->success('获取成功',$img_base64);
// $response = $this->app->app_code->getUnlimit('id'.$orderid, [
// 'page' => $page,
// 'width' => 600,
// ]);
// $img = $response->getBody()->getContents();//获取图片二进制流
// $img_base64 = 'data:image/png;base64,' .base64_encode($img);//转化base64
// $this->success('获取成功',$img_base64);
}
前台
javascript
// 调用
const base64Image = 'data:image/png;base64,/9j/4AAQSkZJRgA...'; // 替换为实际的base64图片数据
this.base64ToTempFilePath(base64Image , function(tempFilePath) {
// console.log('转换成功,临时地址为:', tempFilePath)
that.orderqrpath = tempFilePath // 会在canvas中调用
}, function() {
console.log('转换失败')
})
// 将base64图片转换为临时地址
base64ToTempFilePath(base64Data, success, fail) {
const fs = uni.getFileSystemManager()
const fileName = 'temp_image_' + Date.now() + '.png' // 自定义文件名,可根据需要修改
const filePath = uni.env.USER_DATA_PATH + '/' + fileName
const buffer = uni.base64ToArrayBuffer(base64Data)
fs.writeFile({
filePath,
data: buffer,
encoding: 'binary',
success() {
success && success(filePath)
},
fail() {
fail && fail()
}
})
},