微信小程序云开发 生成带参小程序码流程
本文实例为大家分享了小程序生成带参小程序码的具体步骤,供大家参考,具体内容如下
生成带参小程序码流程
1、小程序端上传生成二维码所需的参数到云函数
2、云函数使用appid和appsecret请求access_token
3、云函数使用access_token+小程序端上传的参数生成二维码
4、云函数将生成的二维码返回到小程序端(或者存到数据库返回fileID,小程序端用fileID进行获取,后续生成先在数据库查找,数据库没有再执行生成操作,防止重复生成小程序码文件)
小程序端上传小程序码所需的参数
wx.cloud.callFunction({
name:'getImage',//云函数名称
data:{//小程序码所需的参数
page:"pages/xxxx/xxxx",
id:id,
},
complete:res=>{
console.log('callFunctiontestresult:',res)
this.setData({//获取返回的小程序码
xcxCodeImageData:res.result,
})
}
})
云函数用appid和appsecret请求access_token
创建云函数getImage,并在对应云函数目录中导入request、request-promise、axios框架(用于数据请求),
npminstall--saverequest//request框架 npminstall--saverequest-promise//request框架promise风格 npminstall--saveaxios//数据请求框架,可将返回的数据类型设置为流`stream` #备注:install可以简写为i;save作用是将这个库添加到package.json里面
云函数文件中导入框架
constcloud=require('wx-server-sdk')
constaxios=require('axios')
varrp=require('request-promise');
constfs=require('fs');
varstream=require('stream');
#不需要全部导入,根据实际下面实际使用情况酌情导入
请求获取access_token
//request框架promise风格
rp('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=secret=appSecret'
.then(function(resultValue){
console.log("请求success:")
console.log(JSON.parse(resultValue))
})
.catch(function(err){});
});
//Nodejs原生写法
consthttp=require("https")
consturl="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=secret=appSecret"
http.get(url,(res)=>{
varresultValue=""
res.on("data",(data)=>{
resultValue+=data
})
res.on("end",()=>{
console.log(resultValue)
})
}).on("error",(e)=>{
console.log(`获取数据失败:${e.message}`)
})
获取小程序码
varoptions={
method:'POST',
url:'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='+access_token',
body:{
page:"pages/xxx/xxx
scene:"id=xxx"
},
json:true
};
rp(options)
.then(function(parsedBody){
console.log(parsedBody)//小程序码图片数据
})
.catch(function(err){});
服务端完整代码一
varrp=require('request-promise');
constfs=require('fs');
varstream=require('stream');
//请求微信access_token
rp('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=secret')
.then(function(resultValue){
console.log("请求success:"+resultValue)
console.log(JSON.parse(resultValue).access_token)
//请求小程序码
varhttp=require("http"),
data={
//小程序码参数
"page":"pages/CardDetail/CardDetail",
"width":300,
"scene":"id=W6MIjlJhFW5Pec-Y",
};
data=JSON.stringify(data);
varoptions={
method:"POST",
host:"api.weixin.qq.com",
path:"/wxa/getwxacodeunlimit?access_token="+JSON.parse(resultValue).access_token,
headers:{
"Content-Type":"application/json",
"Content-Length":data.length
}
};
varreq=http.request(options,function(res){
res.setEncoding("binary");
varimgData='';
res.on('data',function(chunk){
imgData+=chunk;
});
res.on("end",function(){
//将返回的图片数据转化成uploadFile方法fileContent参数所需的文件流形式,且本地输出数据正常,可以试着用此方法执行uploadFile进行获取小程序码,作者采用了方法二
varbufferStream=newstream.PassThrough();
bufferStream.end(newBuffer(imgData));
console.log('uploadFile方法fileContent参数所需的文件流----')
console.log(bufferStream)
//SublimeText可以运行输出到本地,且可以打开二维码
//本地存放路径
varpath='public/'+Date.now()+'.png';
fs.writeFile(path,imgData,"binary",function(err){
if(err){
console.log("downfail");
}
console.log("downsuccess");
});
});
});
req.write(data);
req.end();
})
.catch(function(err){});
服务端完整代码二(可直接粘贴使用)
constcloud=require('wx-server-sdk')
constaxios=require('axios')
varrp=require('request-promise');
cloud.init()
//云函数入口函数
exports.main=async(event,context)=>{
console.log(event)
try{
constresultValue=awaitrp('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=secret')
consttoken=JSON.parse(resultValue).access_token;
console.log('------TOKEN:',token);
constresponse=awaitaxios({
method:'post',
url:'https://api.weixin.qq.com/wxa/getwxacodeunlimit',
responseType:'stream',
params:{
access_token:token,
},
data:{
page:event.page,
width:300,
scene:"id="+event.id,
},
});
returnawaitcloud.uploadFile({
cloudPath:'xcxcodeimages/'+Date.now()+'.png',
fileContent:response.data,
});
}catch(err){
console.log('>>>>>>ERROR:',err)
}
}
点击查看:request框架相关文档
点击查看:request框架promise风格相关文档
点击查看:axios框架相关文档
点击查看:小程序云开发文档
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。