微信小程序云开发 生成带参小程序码流程
本文实例为大家分享了小程序生成带参小程序码的具体步骤,供大家参考,具体内容如下
生成带参小程序码流程
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框架相关文档
点击查看:小程序云开发文档
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。