上传域名配置下
开发者工具中正常使用,但是在手机端却无法使用,直接报错网络错误,返回信息也是有问题function uploadFileTwo(img, token = '') { reading('show','上传中'); // 配置参数 const config = { uptoken_url: '/m/base/file/uptoken?type=image', domain: window.location.protocol + '//upload.qiniu.com/', max_file_size: '100mb', max_retries: 3, chunk_size: '5mb', filters: { mime_types: [ { title: 'Image files', extensions: 'jpg,gif,png,bmp,jpeg' } ] } }; var oData = new FormData(); oData.append('name', img.name); oData.append('chunk', '0'); oData.append('chunks', '1'); oData.append('key', 'app52qno_' + img.name); oData.append('token', token); oData.append("file", img); // console.log(oData) // $.MsgBox.Alert('温馨提示','图片上地址是' + config.domain); $.ajax({ url: config.domain, type: 'POST', data: oData, processData: false, contentType: false, headers: { 'Authorization': 'Bearer ' + token }, xhr: function() { var tmpAjaxXhr = $.ajaxSettings.xhr(); if (tmpAjaxXhr.upload) { tmpAjaxXhr.upload.addEventListener('progress', function(data) { if (data.lengthComputable) { var tmptotal = Math.floor(data['loaded'] / data['total'] * 100); if (tmptotal == 100) { $(".mask_bg .txt").text('处理中') } else { $(".mask_bg .txt").text('上传'+tmptotal+ '%') } } }, false) }; return tmpAjaxXhr }, success: function(res) { console.log('File uploaded successfully:', res); reading('hide'); // console.log(res) if(res.size){ res.path = 'http://slfz4v68k.hd-bkt.clouddn.com/' + res.key; serverImg= (res.path.indexOf('http') >= 0 ? res.path : '/Uploads/'+res.path) ; //https://res.cdn.yqh.com // imgCall(serverImg); // 隐藏手动拖拽 $("#img").attr("src",serverImg); newImgCreate(); }else{ $.MsgBox.Alert('温馨提示','图片上传失败,请稍后再试'); } // return res.path; }, error: function(res){ reading('hide'); $.MsgBox.Alert('温馨提示','网络错误,请稍后再试!'+ JSON.stringify(res)); } }); }
02-06重新扫码就可以了,每次更新上传后都要重新扫体验码更新代码
微信小程序上传代码覆盖后,体验版未更新问题?个人认证的小程序改了名,成功了。然后更新了首页的代码,设为体验版,微信开发者工具和小程序助手都看得到版本上传成功了,外观也更新了. 但是, 打开体验版并没有更新,反复上传都还是这样,怎么办? 小程序助手看得到版本已更新: [图片] 这是老版本首页: [图片] 这是新版本首页: [图片]
02-05看代码是否有体验版环境的特殊逻辑
同样的代码,在体验版不会弹隐私弹版和头像授权,在正式版正常,是什么原因?隐私协议在后台也配置过,之前这两个功能也是正常的,查了很久没什么线索
01-25打印异常日志,排查 // 调用 wx.login 方法 wx.login({ // 调用成功的回调函数 success: function (res) { if (res.code) { console.log('登录成功,获取到的 code 为:', res.code); // 这里可以将 code 发送到开发者服务器,进行后续操作,如换取 openid 等 // 示例: // wx.request({ // url: 'https://your-server.com/login', // data: { // code: res.code // }, // success: function (serverRes) { // console.log('服务器返回的数据:', serverRes.data); // }, // fail: function (err) { // console.error('向服务器发送 code 失败:', err); // } // }); } else { console.error('登录失败,未获取到 code:', res.errMsg); } }, // 调用失败的回调函数 fail: function (err) { // 打印异常情况日志 console.error('wx.login 调用失败:', err.errMsg); }, // 无论调用成功还是失败都会执行的回调函数 complete: function () { console.log('wx.login 调用完成'); } });
wx.login耗时问题 长达60s+?部分ios机型遇到这种情况,把小程序拉掉后重新进入就正常了,这种什么情况
01-24用微信开发者工具解析生成小程序码,先确定是生成码错误还是小程序端解析小程序码逻辑问题.
获取不限制的小程序码为什么很多时候生成的都是第一次生成的scene值?我请求scene值生成小程序码请求参数: { scene: 'mdcp=NNMI3LY&wx=20040939&t=58404', page: 'pages/tuangou/getcoupons/getcoupons', env_version: 'release' },但是每次生成小程序码解析后的scene是mdcp=UQYHHGG&wx=20040939&t=25412,这个是我之前生成的,这是什么原因呀?跪求大佬解释下? 'use strict' ; const db = uniCloud.database() // 添加配置常量 const CONFIG = { appid: '', secret: '', page: '' } // 添加错误处理工具函数 const handleError = (message, details = null) => { console.error(message, details); return { code: -1, message, details: details || '' } } // 生成13位随机数字字符串的函数 function generateRandomNumber() { let result = ''; for(let i = 0; i < 13; i++) { result += Math.floor(Math.random() * 10); } return result; } exports.main = async (event, context) => { try { // 参数验证 if (!event.picihao || !event.wxcode) { return handleError('缺少必要参数') } // 先查询可用券 const cmd = db.command const qrData = await db.collection('coupons-quuid') .where({ use_branch: null, use: 0, picihao: event.picihao }) .limit(1) .get() // 添加日志,帮助调试 console.log('查询结果:', { picihao: event.picihao, hasData: !!qrData.data, dataLength: qrData.data?.length, firstRecord: qrData.data?.[0] }) // 检查是否有可用数据 if (!qrData.data || qrData.data.length === 0) { return handleError('没有可用的券数据') } const dbdata = qrData.data[0] // 在数据库查询后立即添加日志 console.log("数据库查询结果:", { quuid: dbdata.quuid, picihao: event.picihao, wxcode: event.wxcode }); // 直接更新方式 try { const updateResult = await db.collection('coupons-quuid') .doc(dbdata._id) .update({ use_branch: event.use_branch || '', use_time: formatDate(), update_time: Date.now() }) if (!updateResult.updated && !updateResult.affectedDocs) { return handleError('更新数据失败') } console.log('更新成功:', updateResult) // 获取access_token const tokenResponse = await uniCloud.httpclient.request( `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${CONFIG.appid}&secret=${CONFIG.secret}&_t=${Date.now()}`, { dataType: 'json', timeout: 10000, headers: { 'Cache-Control': 'no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0' } } ) if (!tokenResponse.data?.access_token) { throw new Error('获取access_token失败') } // 先生成随机数,后续都使用这个值 const randomNumber = generateRandomNumber(); // 优化scene参数 const scene = `mdcp=${dbdata.quuid}&wx=${event.wxcode}&t=${randomNumber}` if (scene.length > 32) { console.warn('场景值超过32字符,将被截断') } // 对scene进行URL编码,这样可以看到实际生成的值 const encodedScene = encodeURIComponent(scene.substr(0,32)); const wxacodeParams = { scene: scene.substr(0,32), // 保持原样发送给微信接口 page: CONFIG.page, check_path: true, env_version: "release", width: 430, is_hyaline: true } // 添加scene参数日志,同时显示编码前后的值 console.log("生成的scene参数:", { 原始scene: scene, 截断后scene: scene.substr(0,32), URL编码后scene: encodedScene, quuid: dbdata.quuid, wxcode: event.wxcode, 随机数: randomNumber // 使用之前生成的随机数 }); // 记录请求日志 console.log("生成小程序码请求参数:", { scene: wxacodeParams.scene, page: wxacodeParams.page, env_version: wxacodeParams.env_version, }) // 调用生成小程序码API const codeResponse = await uniCloud.httpclient.request( `https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=${tokenResponse.data.access_token}&_t=${Date.now()}`, { method: 'POST', data: wxacodeParams, headers: { 'content-type': 'application/json', 'Cache-Control': 'no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0' }, dataType: 'buffer', timeout: 20000 } ) // 添加响应内容检查 if (codeResponse.status !== 200) { console.error("微信接口返回错误:", codeResponse); return handleError('微信接口返回错误'); } // 检查返回的文件名是否匹配我们的scene console.log("返回的文件名:", codeResponse.headers['content-disposition']); // 响应处理 const contentType = codeResponse.headers['content-type'] console.log("2",contentType); try { // 检查数据是否为Buffer if (!Buffer.isBuffer(codeResponse.data)) { console.error("返回数据不是Buffer类型:", typeof codeResponse.data); return handleError('返回数据格式错误'); } // 使用更安全的方式转换base64 let base64Image; try { base64Image = codeResponse.data.toString('base64'); } catch (e) { console.error("Buffer转base64失败:", e); return handleError('图片转换失败'); } // 根据实际内容类型设置正确的MIME类型 const mimeType = 'image/jpeg'; // 只输出base64字符串的前100个字符 console.log("3", "转换成功,base64前100个字符:", base64Image.substring(0, 100)); console.log("3.1", "base64数据总长度:", base64Image.length); return { code: 0, data: { img: `data:${mimeType};base64,${base64Image}`, code: dbdata, scene: wxacodeParams.scene } } } catch (error) { console.error("转换base64失败:", error); return handleError('生成小程序码失败', error.message); } } catch (err) { console.error('更新失败:', err) return handleError('数据更新失败', err.message) } } catch (error) { console.error('执行错误:', error) return handleError(error.message, error.stack) } } // 修改日期格式化函数,返回北京时间 function formatDate() { const d = new Date() // 获取当前时间的时间戳 const timestamp = d.getTime() // 加上8小时的毫秒数,转换为北京时间 const beijingDate = new Date(timestamp + 8 * 60 * 60 * 1000) return beijingDate.toISOString() .replace('T', ' ') .replace(/\.\d+Z$/, '') }
01-23用小程序模拟器解析生成小程序码,先确定是生成码错误还是小程序端解析小程序码逻辑问题. 逻辑问题处理, 1.可以采用 wx.getEnterOptionsSync 解决https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/miniapp/api/diffapi/getEnterOptionsSync.html 2.也可以onload获取scene之后,采用关闭当前页面,解决onload获取scene只执行一次的问题(例如redirectTo https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.redirectTo.html)
获取不限制的小程序码为什么很多时候生成的都是第一次生成的scene值?我请求scene值生成小程序码请求参数: { scene: 'mdcp=NNMI3LY&wx=20040939&t=58404', page: 'pages/tuangou/getcoupons/getcoupons', env_version: 'release' },但是每次生成小程序码解析后的scene是mdcp=UQYHHGG&wx=20040939&t=25412,这个是我之前生成的,这是什么原因呀?跪求大佬解释下? 'use strict' ; const db = uniCloud.database() // 添加配置常量 const CONFIG = { appid: '', secret: '', page: '' } // 添加错误处理工具函数 const handleError = (message, details = null) => { console.error(message, details); return { code: -1, message, details: details || '' } } // 生成13位随机数字字符串的函数 function generateRandomNumber() { let result = ''; for(let i = 0; i < 13; i++) { result += Math.floor(Math.random() * 10); } return result; } exports.main = async (event, context) => { try { // 参数验证 if (!event.picihao || !event.wxcode) { return handleError('缺少必要参数') } // 先查询可用券 const cmd = db.command const qrData = await db.collection('coupons-quuid') .where({ use_branch: null, use: 0, picihao: event.picihao }) .limit(1) .get() // 添加日志,帮助调试 console.log('查询结果:', { picihao: event.picihao, hasData: !!qrData.data, dataLength: qrData.data?.length, firstRecord: qrData.data?.[0] }) // 检查是否有可用数据 if (!qrData.data || qrData.data.length === 0) { return handleError('没有可用的券数据') } const dbdata = qrData.data[0] // 在数据库查询后立即添加日志 console.log("数据库查询结果:", { quuid: dbdata.quuid, picihao: event.picihao, wxcode: event.wxcode }); // 直接更新方式 try { const updateResult = await db.collection('coupons-quuid') .doc(dbdata._id) .update({ use_branch: event.use_branch || '', use_time: formatDate(), update_time: Date.now() }) if (!updateResult.updated && !updateResult.affectedDocs) { return handleError('更新数据失败') } console.log('更新成功:', updateResult) // 获取access_token const tokenResponse = await uniCloud.httpclient.request( `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${CONFIG.appid}&secret=${CONFIG.secret}&_t=${Date.now()}`, { dataType: 'json', timeout: 10000, headers: { 'Cache-Control': 'no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0' } } ) if (!tokenResponse.data?.access_token) { throw new Error('获取access_token失败') } // 先生成随机数,后续都使用这个值 const randomNumber = generateRandomNumber(); // 优化scene参数 const scene = `mdcp=${dbdata.quuid}&wx=${event.wxcode}&t=${randomNumber}` if (scene.length > 32) { console.warn('场景值超过32字符,将被截断') } // 对scene进行URL编码,这样可以看到实际生成的值 const encodedScene = encodeURIComponent(scene.substr(0,32)); const wxacodeParams = { scene: scene.substr(0,32), // 保持原样发送给微信接口 page: CONFIG.page, check_path: true, env_version: "release", width: 430, is_hyaline: true } // 添加scene参数日志,同时显示编码前后的值 console.log("生成的scene参数:", { 原始scene: scene, 截断后scene: scene.substr(0,32), URL编码后scene: encodedScene, quuid: dbdata.quuid, wxcode: event.wxcode, 随机数: randomNumber // 使用之前生成的随机数 }); // 记录请求日志 console.log("生成小程序码请求参数:", { scene: wxacodeParams.scene, page: wxacodeParams.page, env_version: wxacodeParams.env_version, }) // 调用生成小程序码API const codeResponse = await uniCloud.httpclient.request( `https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=${tokenResponse.data.access_token}&_t=${Date.now()}`, { method: 'POST', data: wxacodeParams, headers: { 'content-type': 'application/json', 'Cache-Control': 'no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0' }, dataType: 'buffer', timeout: 20000 } ) // 添加响应内容检查 if (codeResponse.status !== 200) { console.error("微信接口返回错误:", codeResponse); return handleError('微信接口返回错误'); } // 检查返回的文件名是否匹配我们的scene console.log("返回的文件名:", codeResponse.headers['content-disposition']); // 响应处理 const contentType = codeResponse.headers['content-type'] console.log("2",contentType); try { // 检查数据是否为Buffer if (!Buffer.isBuffer(codeResponse.data)) { console.error("返回数据不是Buffer类型:", typeof codeResponse.data); return handleError('返回数据格式错误'); } // 使用更安全的方式转换base64 let base64Image; try { base64Image = codeResponse.data.toString('base64'); } catch (e) { console.error("Buffer转base64失败:", e); return handleError('图片转换失败'); } // 根据实际内容类型设置正确的MIME类型 const mimeType = 'image/jpeg'; // 只输出base64字符串的前100个字符 console.log("3", "转换成功,base64前100个字符:", base64Image.substring(0, 100)); console.log("3.1", "base64数据总长度:", base64Image.length); return { code: 0, data: { img: `data:${mimeType};base64,${base64Image}`, code: dbdata, scene: wxacodeParams.scene } } } catch (error) { console.error("转换base64失败:", error); return handleError('生成小程序码失败', error.message); } } catch (err) { console.error('更新失败:', err) return handleError('数据更新失败', err.message) } } catch (error) { console.error('执行错误:', error) return handleError(error.message, error.stack) } } // 修改日期格式化函数,返回北京时间 function formatDate() { const d = new Date() // 获取当前时间的时间戳 const timestamp = d.getTime() // 加上8小时的毫秒数,转换为北京时间 const beijingDate = new Date(timestamp + 8 * 60 * 60 * 1000) return beijingDate.toISOString() .replace('T', ' ') .replace(/\.\d+Z$/, '') }
01-23生成小程序码用微信开发工具中解码下,确定是生成问题还是小程序解码时候逻辑问题. 逻辑问题处理, 1.可以采用 wx.getEnterOptionsSync 解决https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/miniapp/api/diffapi/getEnterOptionsSync.html 2.也可以onload获取scene之后,采用关闭当前页面,解决onload获取scene只执行一次的问题(例如redirectTo https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.redirectTo.html)
获取不限制的小程序码为什么很多时候生成的都是第一次生成的scene值?我请求scene值生成小程序码请求参数: { scene: 'mdcp=NNMI3LY&wx=20040939&t=58404', page: 'pages/tuangou/getcoupons/getcoupons', env_version: 'release' },但是每次生成小程序码解析后的scene是mdcp=UQYHHGG&wx=20040939&t=25412,这个是我之前生成的,这是什么原因呀?跪求大佬解释下? 'use strict' ; const db = uniCloud.database() // 添加配置常量 const CONFIG = { appid: '', secret: '', page: '' } // 添加错误处理工具函数 const handleError = (message, details = null) => { console.error(message, details); return { code: -1, message, details: details || '' } } // 生成13位随机数字字符串的函数 function generateRandomNumber() { let result = ''; for(let i = 0; i < 13; i++) { result += Math.floor(Math.random() * 10); } return result; } exports.main = async (event, context) => { try { // 参数验证 if (!event.picihao || !event.wxcode) { return handleError('缺少必要参数') } // 先查询可用券 const cmd = db.command const qrData = await db.collection('coupons-quuid') .where({ use_branch: null, use: 0, picihao: event.picihao }) .limit(1) .get() // 添加日志,帮助调试 console.log('查询结果:', { picihao: event.picihao, hasData: !!qrData.data, dataLength: qrData.data?.length, firstRecord: qrData.data?.[0] }) // 检查是否有可用数据 if (!qrData.data || qrData.data.length === 0) { return handleError('没有可用的券数据') } const dbdata = qrData.data[0] // 在数据库查询后立即添加日志 console.log("数据库查询结果:", { quuid: dbdata.quuid, picihao: event.picihao, wxcode: event.wxcode }); // 直接更新方式 try { const updateResult = await db.collection('coupons-quuid') .doc(dbdata._id) .update({ use_branch: event.use_branch || '', use_time: formatDate(), update_time: Date.now() }) if (!updateResult.updated && !updateResult.affectedDocs) { return handleError('更新数据失败') } console.log('更新成功:', updateResult) // 获取access_token const tokenResponse = await uniCloud.httpclient.request( `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${CONFIG.appid}&secret=${CONFIG.secret}&_t=${Date.now()}`, { dataType: 'json', timeout: 10000, headers: { 'Cache-Control': 'no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0' } } ) if (!tokenResponse.data?.access_token) { throw new Error('获取access_token失败') } // 先生成随机数,后续都使用这个值 const randomNumber = generateRandomNumber(); // 优化scene参数 const scene = `mdcp=${dbdata.quuid}&wx=${event.wxcode}&t=${randomNumber}` if (scene.length > 32) { console.warn('场景值超过32字符,将被截断') } // 对scene进行URL编码,这样可以看到实际生成的值 const encodedScene = encodeURIComponent(scene.substr(0,32)); const wxacodeParams = { scene: scene.substr(0,32), // 保持原样发送给微信接口 page: CONFIG.page, check_path: true, env_version: "release", width: 430, is_hyaline: true } // 添加scene参数日志,同时显示编码前后的值 console.log("生成的scene参数:", { 原始scene: scene, 截断后scene: scene.substr(0,32), URL编码后scene: encodedScene, quuid: dbdata.quuid, wxcode: event.wxcode, 随机数: randomNumber // 使用之前生成的随机数 }); // 记录请求日志 console.log("生成小程序码请求参数:", { scene: wxacodeParams.scene, page: wxacodeParams.page, env_version: wxacodeParams.env_version, }) // 调用生成小程序码API const codeResponse = await uniCloud.httpclient.request( `https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=${tokenResponse.data.access_token}&_t=${Date.now()}`, { method: 'POST', data: wxacodeParams, headers: { 'content-type': 'application/json', 'Cache-Control': 'no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0' }, dataType: 'buffer', timeout: 20000 } ) // 添加响应内容检查 if (codeResponse.status !== 200) { console.error("微信接口返回错误:", codeResponse); return handleError('微信接口返回错误'); } // 检查返回的文件名是否匹配我们的scene console.log("返回的文件名:", codeResponse.headers['content-disposition']); // 响应处理 const contentType = codeResponse.headers['content-type'] console.log("2",contentType); try { // 检查数据是否为Buffer if (!Buffer.isBuffer(codeResponse.data)) { console.error("返回数据不是Buffer类型:", typeof codeResponse.data); return handleError('返回数据格式错误'); } // 使用更安全的方式转换base64 let base64Image; try { base64Image = codeResponse.data.toString('base64'); } catch (e) { console.error("Buffer转base64失败:", e); return handleError('图片转换失败'); } // 根据实际内容类型设置正确的MIME类型 const mimeType = 'image/jpeg'; // 只输出base64字符串的前100个字符 console.log("3", "转换成功,base64前100个字符:", base64Image.substring(0, 100)); console.log("3.1", "base64数据总长度:", base64Image.length); return { code: 0, data: { img: `data:${mimeType};base64,${base64Image}`, code: dbdata, scene: wxacodeParams.scene } } } catch (error) { console.error("转换base64失败:", error); return handleError('生成小程序码失败', error.message); } } catch (err) { console.error('更新失败:', err) return handleError('数据更新失败', err.message) } } catch (error) { console.error('执行错误:', error) return handleError(error.message, error.stack) } } // 修改日期格式化函数,返回北京时间 function formatDate() { const d = new Date() // 获取当前时间的时间戳 const timestamp = d.getTime() // 加上8小时的毫秒数,转换为北京时间 const beijingDate = new Date(timestamp + 8 * 60 * 60 * 1000) return beijingDate.toISOString() .replace('T', ' ') .replace(/\.\d+Z$/, '') }
01-23wxss明确写上对应背景色试试
为什么电脑上面有底版颜色,但是预览之后在手机上看没有颜色为什么电脑上面有底版颜色,但是预览之后在手机上看没有颜色
01-22只是个别账户的话,排查智能回答的5,6
微信支付后没有回调?订单号4200002527202501205379376248和4200002523202501206427909763都没有执行微信支付的回调,最近已经有几次这种情况了,有管理员能看看什么原因吗?
01-21微信公众平台上没有配置关闭搜索的话,看看是否有年审过期,备案问题
小程序使用全称为什么搜索不到?昨天还是可以的,今天就不行了,之前使用标签(#小程序:趣过节)发给了别人,今天打不开了,很是尴尬…… app_id:wxd246e9e49d017d0a 微信小程序后台也没收到任何提示
01-20