- 天天都问:统一下单unifiedOrder:fail source.on is not a ?
const cloud = require('wx-server-sdk'); //初始化云函数 cloud.init({ env: { database: 'zhatuche001-9ed94', //数据库操作的默认环境 storage: 'zhatuche001-9ed94', //文件存储的默认环境 functions: 'zhatuche001-9ed94', //调用其它云函数的默认环境 traceUser: true, //是否将来方用户记录在后台中 //cloud: DYNAMIC_CURRENT_ENV//// API 调用都保持和云函数当前所在环境一致 } }); const db = cloud.database(); //获取数据库的引用 无参数,用默认环境 const _ = db.command exports.main = async (event, context) =>{ const wxContext = cloud.getWXContext() const OPENID=wxContext.OPENID const { DangHao, SJ_str32 }=ShengCeng_DH_SJ()//获取单号和随机字符串 //const JingEr=ShangPing[XuanZe[0]][XuanZe[1]].SuoDe.JiaGe//商品价格 const JingEr=1//先订义下单金额为0.01元 //++++++++++++++++++++++++++调用统一下单接口 开始 const res=await cloud.cloudPay.unifiedOrder({ envId: 'ZhiFu', //结果通知回调云函数环境(必要) functionName: 'zhatuche001-9ed94', //结果通知回调云函数名(必要) subMchId: '1611281096', //子商户号(必要) //nonceStr: SJ_str32, //随机字符串(必要) nonceStr:'12345678901234567890123456789012',//先强行凑够32位 body: '金币/钻石购买', //商品描述(必要) attach: '虚拟商品,不退不换', //附加数据(非必要) outTradeNo: DangHao, //商户订单号(必要) totalFee: JingEr, //总金额(必要) spbillCreateIp: '127.0.0.1', //终端IP(必要) tradeType: 'JSAPI', //交易类型(必要) openid: OPENID, //用户标识符(必要) }) res.DangHao=DangHao;//单号 res.JingEr=JingEr;//下单所选金额 let payData=event.payDate//结果 payData.DangHao=DangHao//单号 payData.ZhiFuZhuangTai=false//支付状态 未支付 payData.JingEr=JingEr//支付的金额 payData.openId=OPENID//用户的openid payData.ShiJian=new Date()//创建时间 payData.DingDang=res//订单 //拦截处理 为保持数据库字段一至性 if(res.returnCode == 'SUCCESS' && res.resultCode == 'SUCCESS'){ //在云数据库中写入未支付的订单信息 let FangHuiNeiRong=await db.collection('ZhiFu').add({ data:PayData }) //将该记录的_id携带 返回给用户端 res._id=FangHuiNeiRong._id return res; }else{ return res } } /** * 生成订单号和随机字符串 * 返回单号和随32位随机字符串 */ function ShengCeng_DH_SJ(){ const str = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; //****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1 let SJ_str32=''//32位随机字符串 for(let i=0;i<32;i++){ /** * charAt:返回字符串中第几个字符 * Math.floor:对值进行下舍入 * Math.random:返回0-1之间的随机数 * 全文: */ SJ_str32+=str.charAt(Math.floor(Math.random()*str.length)) } let DangHao=''//订单号 let ShiJian=new Date().getTime()-8*60*60*1000 for(let i=0;i<6;i++){//6位随机数,用于加在时间戳后面 DangHao+=Math.floor(Math.random() * 10) } DangHao='COP'+ShiJian+DangHao return{ DangHao, SJ_str32 } } 提示错误: Error: cloud.callFunction:fail -404011 cloud function execution error. 云函数执行错误 云端堆栈信息(error stack)(requestId b6953493-d87f-11eb-a5d4-525400b8ee5a, callid 1624932856834-0.046614243876275774): Error: cloudPay.unifiedOrder:fail -501001 resource system error. source.on is not a function at toSDKError (:42847/var/user/node_modules/wx-server-sdk/index.js:8088) at Object.returnAsFinalCloudSDKError (:42847/var/user/node_modules/wx-server-sdk/index.js:8059) at callCloudPayAPI (:42847/var/user/node_modules/wx-server-sdk/index.js:941) 求问:source.on是什么东西?怎么解决 package.json: { "name": "ZhiFu", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "wx-server-sdk": "latest" } } RequestId:7c63572d-d8c4-11eb-a893-52540006aa05
2021-06-29 - 每天都问:统一下单unifiedOrder:fail source.on is not a ?
云函数: const cloud = require('wx-server-sdk'); //初始化云函数 cloud.init({ env: { database: 'zhatuche001-9ed94', //数据库操作的默认环境 storage: 'zhatuche001-9ed94', //文件存储的默认环境 functions: 'zhatuche001-9ed94', //调用其它云函数的默认环境 traceUser: true, //是否将来方用户记录在后台中 //cloud: DYNAMIC_CURRENT_ENV//// API 调用都保持和云函数当前所在环境一致 } }); const db = cloud.database(); //获取数据库的引用 无参数,用默认环境 const _ = db.command exports.main = async (event, context) =>{ const wxContext = cloud.getWXContext() const OPENID=wxContext.OPENID const { DangHao, SJ_str32 }=ShengCeng_DH_SJ()//获取单号和随机字符串 //const JingEr=ShangPing[XuanZe[0]][XuanZe[1]].SuoDe.JiaGe//商品价格 const JingEr=1//先订义下单金额为0.01元 //++++++++++++++++++++++++++调用统一下单接口 开始 const res=await cloud.cloudPay.unifiedOrder({ envId: 'ZhiFu', //结果通知回调云函数环境(必要) functionName: 'zhatuche001-9ed94', //结果通知回调云函数名(必要) subMchId: '1611281096', //子商户号(必要) //nonceStr: SJ_str32, //随机字符串(必要) nonceStr:'12345678901234567890123456789012',//先强行凑够32位 body: '金币/钻石购买', //商品描述(必要) attach: '虚拟商品,不退不换', //附加数据(非必要) outTradeNo: DangHao, //商户订单号(必要) totalFee: JingEr, //总金额(必要) spbillCreateIp: '127.0.0.1', //终端IP(必要) tradeType: 'JSAPI', //交易类型(必要) openid: OPENID, //用户标识符(必要) }) res.DangHao=DangHao;//单号 res.JingEr=JingEr;//下单所选金额 let payData=event.payDate//结果 payData.DangHao=DangHao//单号 payData.ZhiFuZhuangTai=false//支付状态 未支付 payData.JingEr=JingEr//支付的金额 payData.openId=OPENID//用户的openid payData.ShiJian=new Date()//创建时间 payData.DingDang=res//订单 //拦截处理 为保持数据库字段一至性 if(res.returnCode == 'SUCCESS' && res.resultCode == 'SUCCESS'){ //在云数据库中写入未支付的订单信息 let FangHuiNeiRong=await db.collection('ZhiFu').add({ data:PayData }) //将该记录的_id携带 返回给用户端 res._id=FangHuiNeiRong._id return res; }else{ return res } } /** * 生成订单号和随机字符串 * 返回单号和随32位随机字符串 */ function ShengCeng_DH_SJ(){ const str = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; //****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1 let SJ_str32=''//32位随机字符串 for(let i=0;i<32;i++){ /** * charAt:返回字符串中第几个字符 * Math.floor:对值进行下舍入 * Math.random:返回0-1之间的随机数 * 全文: */ SJ_str32+=str.charAt(Math.floor(Math.random()*str.length)) } let DangHao=''//订单号 let ShiJian=new Date().getTime()-8*60*60*1000 for(let i=0;i<6;i++){//6位随机数,用于加在时间戳后面 DangHao+=Math.floor(Math.random() * 10) } DangHao='COP'+ShiJian+DangHao return{ DangHao, SJ_str32 } } 提示错误: Error: cloud.callFunction:fail -404011 cloud function execution error. 云函数执行错误 云端堆栈信息(error stack)(requestId b6953493-d87f-11eb-a5d4-525400b8ee5a, callid 1624932856834-0.046614243876275774): Error: cloudPay.unifiedOrder:fail -501001 resource system error. source.on is not a function at toSDKError (:42847/var/user/node_modules/wx-server-sdk/index.js:8088) at Object.returnAsFinalCloudSDKError (:42847/var/user/node_modules/wx-server-sdk/index.js:8059) at callCloudPayAPI (:42847/var/user/node_modules/wx-server-sdk/index.js:941) 求问:source.on是什么东西?怎么解决 package.json: { "name": "ZhiFu", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "wx-server-sdk": "latest" } }
2021-06-29 - 救命啊,选择的图片用canvas缩小重绘后图片文件大小变大了?
步骤:1 选择图片文件得到图片的地址数组 2 获取文件的大小 [(path,width,height}] 3创建离屏水印画布,将水印图片绘制到离屏画布上,得到离屏图片对象宽475高475 以下用的画布不是离屏画布 4.1返回SelectorQuery 对象实例 4.2依据画布的id得到canvas 4.3循环==》选择的图片次数 4.3.1清除画布区域内容 大小为选择的图片的大小 4.3.2创建图片对象 4.3.3依据选择的图片的大小缩放画布:宽高大于3200时缩小为3200,小于800时放大为800(依据原图比例缩放) 4.4.4将绘制选择的图片 4.4.5绘制水印图片 4.4.6把画布生成图片 5.上传图片至云 完毕 问题:选择的图片的宽高超过3200, 经缩放画布后绘制,生成的图片大小体积反超原图片2倍以上(在云开发==>存储里面可见) 可能有的东西我没理解对,不知道哪里错了???求解 以下源码: index.js const app = getApp() var _this Page({ data: { canvas: { width: 800, height: 800 } }, onLoad() { _this = this }, //选择图片 bindtap: function () { wx.chooseImage({ success(res) { _this.compress(res.tempFilePaths) //_this.tempFilePaths = res.tempFilePaths }, fail(err) { console.log('选择图片错误', err) } }) }, /** * 压缩图片 * @param {*} tempFilePaths //所选图片的地址 数组 */ compress: async function (tempFilePaths) { //===========================================================================生成 水印 watermarkImage 对象 ↓↓↓↓↓↓↓↓↓↓↓ const offCanvas = wx.createOffscreenCanvas({ //离屏画布 上面绘制的是小程序二维码 type: '2d', width: 475, height: 475 }) const offContext = offCanvas.getContext('2d') //离屏绘图上下文 const watermarkImage = offCanvas.createImage() //小程序二给码的水印图片 await new Promise(resolve => { watermarkImage.onload = resolve, watermarkImage.src = '/image/小程序体验版.jpg' //小程序的二维码 }) offContext.clearRect(0, 0, 475, 475) //清除画布内容 offContext.drawImage(watermarkImage, 0, 0) //将水印绘制在画布上 //===========================================================================生成 水印 watermarkImage 对象 ↑↑↑↑↑↑↑↑↑↑↑ let imageS = [] //最终绘制好的图片 //===========================================================================获取图片的 宽 高 路径 ↓↓↓↓↓↓↓↓↓↓↓ let imageArr = [] //图片数组[{路径,宽,高}] for (let i = 0, len = tempFilePaths.length; i < len; i++) { imageArr[i] = await GetImageInfo(tempFilePaths[i]) //获取图片属性 } //===========================================================================获取图片的 宽 高 路径 ↑↑↑↑↑↑↑↑↑↑↑ //=========================================================================== 压缩图片 过大时缩小画布 过小是放大画布↓↓↓↓↓↓↓↓↓↓↓ const query = wx.createSelectorQuery() //返回一个 SelectorQuery 对象实例 const canvas = await new Promise((resolve, reject) => { query.select('#myCanvas') //在当前页面下选择第一个匹配选择器 selector 的节点。返回一个 NodesRef 对象实例,可以用于获取节点信息 得到id为myCanvas的节点信息 .fields({ //获取节点的相关信息 node: true, //是否返回节点对应的 Node 实例 size: true //是否返回节点尺寸 }) .exec((res) => { if (res[0] && res[0].node) { resolve(res[0].node) } else { reject(res) } }) }) const ctx = canvas.getContext('2d') for (let i = 0, len = imageArr.length; i < len; i++) { ctx.clearRect(0, 0, imageArr[i].width, imageArr[i].height) //清除画布上该区域的内容 let image = canvas.createImage() //创建一个图片对象 await new Promise(resolve => { //等待图片加载完成 image.onload = resolve image.src = imageArr[i].path // 要加载的图片 url }) let { CW, CH } = zoomCanvas(imageArr[i].width, imageArr[i].height) //返回画布的宽高 console.log('原图宽:' + imageArr[i].width + '原图高:' + imageArr[i].height + '画布宽' + CW + '画布高' + CH) canvas.width = CW; canvas.height = CH; ctx.drawImage(image, 0, 0, CW, CH) //绘制缩放后的图片 ctx.drawImage(watermarkImage, 0, 0, 475, 475, CW - 475, CH - 475, 475, 475)//右下角绘制水印(二维码) imageS[imageS.length] = await produce(canvas, CW, CH) //生成图片 } //=========================================================================== 压缩图片 过大时缩小画布 过小是放大画布↑↑↑↑↑↑↑↑↑↑↑ /** * 问题:???????????????????????????????????????????????????? * 完成后这里上传图片文件至云(采用云开发,上传至) * 打开 云开发->存储->找到文件所在位置 * 发现图片文件大小严重超过原图的大小(在选择图片时选择的是宽高在3200以上的) * 但在绘制图片前,控制台输出的 原图宽高 和 画布宽高 正确按比例缩小了 * 求解:本人老白,不太懂哪里错了????????????????????????????? */ _this.setData({ imageS: imageS }) }, /** * 预览图片 */ image_tap:function(){ wx.previewImage({ urls:_this.data.imageS }) } }) /** * 缩放画布 返回缩放的大小 * @param {number} imageW 所选图片的宽 * @param {number} imageH 所选图片的高 */ function zoomCanvas(imageW, imageH) { let CW = imageW let CH = imageH let multiple = 1 //定义缩放的倍数 if (CW > 3200) { multiple = 3200 / imageW //定义缩放的倍数 } else if (CH > 3200) { multiple = 3200 / imageW //定义缩放的倍数 } else if (CW < 800) { multiple = 800 / imageW //定义缩放的倍数 } else if (CH) { multiple = 800 / imageW //定义缩放的倍数 } CW = parseInt(imageW * multiple) CH = parseInt(imageH * multiple) _this.setData({ //刷新页面画布宽高 canvas: { width: CW, height: CH } }) return { CW, CH } } /** * 获取图片的宽高路径 返回图片路径 宽 高 * @param {string} path 图片路径数组 */ async function GetImageInfo(path) { return new Promise((resolve, reject) => wx.getImageInfo({ src: path, success(res) { resolve({ path: res.path, width: res.width, height: res.height }) }, fail(err) { reject(err) } })) } /** * 生成图片 返回生成的图片地址 * @param {object} canvas 图片对象 * @param {number} width 要输出的图片的宽 * @param {number} height 要输出的图片的高 */ function produce(canvas, width, height) { return new Promise((resolve, reject) => wx.canvasToTempFilePath({ canvas: canvas, destWidth: width, //输出的图片的宽 destHeight: height, //输出的图片的高 fileType: 'jpg', //生成的图片格式 success(res) { resolve(res.tempFilePath) }, fail(err) { reject(err) } })) } /** * 保存文件 * @param {arr} imageS 文件地址数组 */ function preservation(imageS) { let catalogue=wx.env.USER_DATA_PATH//文件系统中的用户目录路径 (本地路径) let C=0 for(let i=0,len=imageS.length;i<len;i++){ wx.saveFileToDisk({ filePath:catalogue+'/image/水印图片/'+i+'jpg', success(res){ console.log(res) }, fail(err){ console.error('保存文件失败',err) } }) } } .html <label wx:for="{{imageS}}" wx:key='key'> <image src="{{imageS}}"bindtap='image_tap'></image> </label> <button bindtap="bindtap">选择图片</button> <canvas type='2d' id="myCanvas" style="width:{{canvas.width}}rpx; height:{{canvas.height}}rpx;"></canvas>
2021-06-26 - 吐血求wx.createOffscreenCanvas()用法?
1: 用户选择图片wx.chooseImage() 得到图片数组的src及width ,height2:创建离屏画布 数组 实例??? 3:压缩画布 数组 实例??? 4:绘制图片 数组 ??? 5:得到图片 数组 ??? 搞了两天了,是真不会,求哪位大哥,给写个样本看看,谢谢了。论坛里的左抄右抄了。。。就是用不上。。。
2021-06-13 - 求CanvasContext.drawImage()获取到数据后,怎么压缩data点阵的步进循环?
当用户选择图片后上传上至云文件,为减少存储空间。用canvas重绘图片得到CanvasContext.drawImage()的data, 然后就不会写像素点阵的步进压缩,循环,求大栳帮忙写个循环。谢谢!!! 以前翻到一个贴子有看到的。但找不到了 V_V wx.compressImage()那个quality参数,实在是看不懂....又不支持png格式 话说,CanvasContext.drawImage()能用于gif格式的图片么?也是每4个点显示一个像素?还没去试 菜鸟上面的也不清不楚 对的,我是个菜鸟.QAQ 再次感谢
2021-06-05 - 跪求云开发中lookup相关写法?
有数据表A,B 当数据表A中的cc字段等于数据表B中的_id字段时, 返回数据库B的_id,_cd字段,谢谢大神了
2021-05-15 - 请问,如何在编辑wxml文件时格式化不自动换行?
开发工具的编辑设置里面的 是否勾选 自动折行 好像只对js文件生效
2021-04-14 - 那个调用wx.getUserProfile接口频率限制那个网页又去哪里了?怎么吃个饭回来找不到了
如题
2021-04-12 - 求改写_.min()与_.max()的参数,还是有别的方法实现?
需求:a.当A用户对B用户进行信誉(信用)正面评价时,需要B用户的信誉字段的值在增加(_.inc(正数))后不大于100 b.当A用户对B用户进行信誉(信用)负面评价时,需要B用户的信誉字段的值在减少(_.inc(负数))后不小于0 _.max('$credit'-5,_.inc(5)) _.min('$credit'-1,_.inc(-1)) 求问有办法实现吗? 还有,发表后邀请时怎么不可选择其它的人,每次都是这几个?又没人回答
2021-04-08 - 服了官方了,_.max(_.inc(-1))解决了。_.min(100,_.inc(5))又咱搞?
看原来的贴: https://developers.weixin.qq.com/community/develop/doc/00044ac091c630d288fa3e1af5a400 可以将一个字段的最小值update()后不为负数了, 那么,当我想此字段超过某个值不自增怎么办?比如,我只想本字段自增5,但是在这个字段的值>=100时不自增或最高自增到100又怎么办? 一般比如用于:一个人的信誉度:最高100%,最低0% 我不知道其它人是怎么解决的,求方法 _.min https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/command/Command.min.html
2021-04-07