- 【视频号小店】商品上传-答疑专区
一、 审核问题 1.1 为什么我的商品一直被驳回,上传失败? 你好,为规范【视频号小店】商家的经营行为,推动平台生态健康发展,2022年12月起,平台将进一步加强对【视频号小店】商品信息的规范化要求。商家上传商品的时候可以根据对应类目学习下相关规则,避免多次驳回,提高商品上架通过率。 相关公告: 《进一步加强【视频号小店】商品信息发布规范化公告》 https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/FbSXvksz3jHbPn28 1.2 商品审核的时效是多少? 你好,为规范【视频号小店】商家的经营行为,推动平台生态健康发展,2022年12月起,平台将进一步加强对【视频号小店】商品信息的规范化要求,故审核的周期会较长,请你谅解。目前的审核时效是1-3天,预计12月20日后,审核时效会逐步恢复正常。为不耽误商家直播带货,请商家提前进行上传商品审核和了解对应商品规范规则进行上传。 相关公告: 《进一步加强【视频号小店】商品信息发布规范化公告》 https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/FbSXvksz3jHbPn28 1.3 商品没有显示驳回原因? 你好,辛苦将商品图上有涉及二维码/联系方式/第三方平台的内容及时调整,避免展示了不适宜的内容,谢谢。 相关公告: 《进一步加强【视频号小店】商品信息发布规范化公告》 https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/FbSXvksz3jHbPn28 1.4 我已有对应类目资质,为什么上架商品还是让我进行重新提交? 你好,出现这类情况主要是由于平台对该类目的资质规则要求进行更新或你的类目资质材料已过期失效,辛苦你根据平台最新规则进行重新申请类目,补充完整资料,待审核通过后即可进行上架商品,谢谢。 相关文档: 《【视频号小店】开放类目与资质要求》 https://developers.weixin.qq.com/doc/channels/Operating_Specifications/Category_and_aQualification.html 1.5 为什么我的商品显示:“封禁商品”? 你好,因你上架的商品属于未开放商品或未符合管理规范的商品,导致封禁商品,请你查看相关文档进行学习,及时调整,避免再次违规,谢谢。 相关文档: 《视频号小店开放类目与资质要求》 https://developers.weixin.qq.com/doc/channels/Operating_Specifications/Category_and_aQualification.html 《进一步加强【视频号小店】商品信息发布规范化公告》 https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/FbSXvksz3jHbPn28 二、 规则问题 2.1 怎么判断自己的商品属于什么类目,需要什么资质? 你好,如你需在【视频号小店】上架商品类目,请注意上架的商品需要满足类目资质要求,辛苦了解开放类目文档进行查看,谢谢。 相关公告: 《视频号橱窗开放类目公告》 https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/1y4hQEuLYybERZjc 2.2 怎么判断自己的商品是否可以上架? 你好,如你需在【视频号小店】上架商品,辛苦了解开放类目文档进行查看,谢谢。 相关公告: 《视频号橱窗开放类目公告》 https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/1y4hQEuLYybERZjc 2.3 为什么我按流程查询我的商品属于开放类目,还需重新上架? 你好,【视频号小店】所有上架的商品,需申请对应资质才能进行售卖。如你需上架的商品属于开放类目,按普通类目资质申请流程进行申请即可。 相关指引: 《【视频号小店】-「类目资质」开通指引》 https://docs.qq.com/doc/DTk1XTklQaU5sWGZU 2.4 我的商品属于定准类目,需要怎么申请? 你好,如你需上架的商品属于定准类目,辛苦查看相关类目规则,按特殊类目资质申请流程进行申请即可。 相关文档: 《【视频号小店】-「类目资质」开通指引》 https://docs.qq.com/doc/DTk1XTklQaU5sWGZU 《视频号小店开放类目与资质要求》中1.2 类目资质要求 https://developers.weixin.qq.com/doc/channels/Operating_Specifications/Category_and_aQualification.html 三、 功能问题 3.1 【视频号小店】如何上架商品? 你好,如你需使用【视频号小店】上架商品功能,辛苦根据指引进行操作,谢谢。 相关指引: 《视频号小店-店铺运营》中二、商品管理 https://developers.weixin.qq.com/doc/channels/Operational_Guidelines/Operating_Guidelines.html 3.2 【视频号小店】如何关联商品至视频号橱窗? 你好,如你使用【视频号小店】商品上架视频号橱窗功能,可以查看指引进行关联商品后上架,谢谢。 相关指引: 《视频号商品橱窗操作说明》https://developers.weixin.qq.com/doc/channels/Operational_Guidelines/Instructions.html 3.3 【视频号小店】如何关联商品至视频号购物车? 你好,如你需要开通短视频购物车功能,满足视频商品申请购物车权限条件后,可以查看指引进行关联商品后上架,谢谢。 相关指引: 《如何在短视频分享商品信息》https://developers.weixin.qq.com/doc/channels/Operational_Guidelines/Short_video_sharing_products.html 3.4 预售功能怎么设置? 你好,目前系统预售功能仅支持服饰内衣行业部分商品使用,可以在发货时间上面进行设置。如你系统无法使用预售功能,可以查看规则了解其他方式进行开展预售。 相关规则: 《视频号橱窗发货管理规则》 https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/3cq3WmYMIGI9omh0 《视频号小店预售服务管理规则》 https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/3dpqcP9FdvfX9Gsj
2022-12-23 - 视频号小店-「店铺入驻」答疑专区
一、入驻前遇到的问题Q1:如何开通视频号小店?详情开通流程可查看:《视频号小店-【开店】指引》 Q2:开通视频号小店有数量限制吗?一个视频号只能申请1个【视频号小店】店铺, 一个营业执照最多支持开5家店铺。 Q3:需要准备些什么材料去开通?(1)视频号:目前仅支持使用身份证认证的视频号开启视频号小店。 (2)经营信息:营业执照、经营者/法定代表人身份证信息。 (3)类目资料:申请类目详情可查看视频号橱窗开放类目与资质要求 Q4:没有营业执照可以开通视频号小店吗?目前视频号小店系统仅支持企业&个体户申请资质入驻,故营业执照是必须提交的资质材料。 Q5:旗舰店、官方旗舰店、专卖店、专营店、卖场型旗舰店如何入驻?申请入驻品牌企业店铺,根据规则提供对应的资料进行申请即可。 相关指引:《视频号小店-【开店】指引》《视频号小店准入资质规则》 Q6:注册视频号小店是否需要新开一个商户号?需要新开一个新的商户号,不能绑定原有的商户号。 注:如你申请的商户号达到上限,可以前往支付后台进行注销不使用的商户号。 Q7:上传资质后,审核需要多长时间?资质上传提交成功后我们的工作人员将在3-5个工作日内进行审核,辛苦您耐心等待。 二、入驻中遇到的问题Q1:营业执照信息审核不通过?请根据营业执照驳回原因,仔细核对填写的信息是否准确。 注: (1)提交复印原件,企业营业执照扫描件/复印件(需确保未在企业经营异常名录中),不支持营业执照电子版/翻拍/截图,营业执照证书需未过期、清晰可见。 (2)一个营业执照最多支持开5家店铺。 (3)入驻主体应为中国大陆地区注册的企业。 (4)所售商品/选择的行业大类在营业执照经营范围内。 Q2:现在小店是不是只支持中国大陆身份证的人申请入驻?外籍人士及中国港澳人员可以申请入驻吗?支持外籍人员申请入驻,需要提交法定代表人身份证正反面扫描件或复印件(法人需要与入驻公司营业执照保持一致,支持港澳台、境外法人身份证明)。外籍人员不能提交盖章的情况下,提供签名即可。 Q3:店铺名称被驳回怎么办?不同的店铺类型有不同的命名要求,具体可参考店铺命名规则进行操作。 比如:旗舰店命名形式 (1)品牌名+一级类目(可选)+旗舰店; (2)若经营多类目,则可选择其中一个经营类目即可。 示例:美的家用电器旗舰店 相关指引:《视频号小店命名规则》《视频号小店准入资质规则》 Q4:企业店自有品牌命名为什么被驳回?自有品牌需要按照: “品牌+一级类目(可选)+企业店(可选)”进行填写,请修改名称后再次提交审核。 相关指引:《视频号小店命名规则》《视频号小店准入资质规则》 Q5:品牌命名为什么被驳回?如店铺的基础信息(含店铺头像、名称)涉及品牌信息,需在“店铺信息其他资质(选填)处”提供《商标注册证》或《商标注册申请受理通知书》以及授权材料,请补充材料后重新提交审核。如无法提供以上相关材料,请删除“品牌名”字样,修改名称后再次提交审核。 Q6:旗舰店命名为什么被驳回?申请的店铺名称,需在“店铺信息其他资质(选填)处”提供《商标注册证》和天猫或者京东、抖音开设对应的旗舰店店铺证明截图,补充材料后重新提交审核。如无法提供以上相关材料,需删除“品牌名”和“旗舰店”字样,修改名称后再次提交审核。 相关指引:《视频号小店命名规则》《视频号小店准入资质规则》 Q7:申请数码、家用电器、手机通讯、电脑办公品牌旗舰店,上传了1份授权书为什么被驳回?需提供两份授材料,缺一不可。 注: (1)提交由品牌商标权利人为源头授权到开店主体的一级授权文件/授权书材料; (2)提交以视频号模板开具,为视频号专用的一级授权文件/授权书;授权模板参考:视频号直播_品牌授权模板 Q8:品牌资质驳回怎么办? 平台会在申请界面及视频号私信通知申请结果,可根据系统提示的驳回原因,参考指引补全资质后重新提交审核。 相关指引:《视频号小店-【店铺运营】指引》《视频号小店-「品牌管理」开通指引》 Q9:如何查看类目是否开放?如你需使用【视频号小店】功能,请注意【视频号小店】上架的商品需满足类目资质要求, 视频号小店可售卖类目请查看:《视频号橱窗开放类目公告》 三、入驻后遇到的问题Q1:如何修改店铺类型?修改店铺类型路径:登录【视频号小店后台】-【店铺管理】-【基础信息】-【经营信息】-【店铺类型】 注:一年内可改3次,根据《视频号小店招募规则》、《视频号小店准入资质规则》,填写对应店铺类型所需的资质。 Q2:店铺名称如何修改?修改店铺名称路径:登录【视频号小店后台】-【店铺管理】-【基础信息】-【店铺名称】 注:一年内可改30次,店铺名称规则可参考:《视频号小店命名规则》,其中普通企业店、个体工商户的店铺名称不得使用“旗舰”、“专卖”、“专营”、“官方”、“直营”、“官字”、“官方认证”、“官方授权”、“特许经营”、“特约经销”或其他带有类似含义的内容。 Q3:视频号小店主体能否变更?目前暂不支持统一社会信用代码变更,支持在营业执照统一信用代码不变的情况下,可以在系统后台更新主体信息。 主体信息修改路径:登录【视频号小店后台】-【店铺管理】-【基础信息】-【经营信息】 Q4:超级管理员如何变更?变更管理员路径:登录【视频号小店后台】-【店铺管理】-【基础信息】-【小店超级管理员】-【更换】,按照路径可以进行更换新的超级管理员,原管理员的帐号会与小店解除绑定关系。 注: (1)新超级管理员的微信号及视频号下不可以有已绑定的视频号小店。 (2)更换成功后,视频号小店将会绑定至新超级管理员的微信号下的视频号上。 (3)更换成功后,旧超级管理员的视频号橱窗将默认下架所有视频号小店商品,同时和小店解除绑定。 (4)更换成功后,将转移资金提现等功能权限。 (5)一年内可更换2次。 (6)更换成功/失败会有站内信通知。 (7)更换时需要提供法人授权函,由平台侧审核是否可以通过。 (8)支持单独更换超管名下电话信息。 Q5:店铺为什么降级了,由旗舰店/官方旗舰店降为企业店?平台会定期对店铺资质进行抽查处理,因你的店铺名称不符合最新的店铺资质规则要求,平台会根据你当前的资质修改你的店铺名称;如你希望修改回官方旗舰店/旗舰店名称,需按最新的店铺规则再次提交升级并合规经营。
2023-09-09 - 调用mediaCheckAsync并处理异步检测结果推送
仅给出我的处理方式。如果你有更好的处理方式,欢迎在评论区讨论。 本人使用云开发,图片上传到云存储。 整体思路 具体场景(便于讨论):用户发布评论[代码]comment[代码],图片上传到字段[代码]image_upload[代码]。 准备:在数据库里创建一个[代码]traceId[代码]集合; 首先,用户上传图片,触发图片审核,并将[代码]traceId[代码]作为云存储路径; 异步检测结果推送到来时,如果[代码]'suggest' != 'pass'[代码]: 将[代码]traceId[代码]和固定前缀拼出一个云存储的[代码]fileID[代码]; 在集合[代码]traceId[代码],利用[代码]fileID[代码]作为一个字段创建一个对象 利用[代码]fileID[代码]在相关集合(如[代码]comment[代码])的相关字段(如[代码]image_upload[代码])里找:如果找到则直接删除云存储中的[代码]fileID[代码],找不到则不处理; 用户点击提交,首先先创建相关对象(如一个[代码]comment[代码]对象,其中包括字段[代码]image_upload[代码]),创建成功后查询集合[代码]traceId[代码]的所有对象(违规图片集合),将现有图片列表和违规图片集合进行比较,删除违规图片,并对相关字段(如:[代码]image_upload[代码]移除违规图片的[代码]fileID[代码])进行更新。 具体步骤和代码 1、创建云函数:[代码]checkContent[代码](右键 [代码]cloudfunctions[代码]→[代码]新建 Node.js 云函数[代码] 进行创建),上传并部署:云端安装依赖 [代码]//index.js const cloud = require('wx-server-sdk'); cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) exports.main = async (event, context) => { const { value, scene } = event; const { OPENID } = cloud.getWXContext() try { let imageR = false; //检查 图片内容是否违规 if (value) { imageR = await cloud.openapi.security.mediaCheckAsync({ openid: OPENID, scene: scene, version: 2, media_type: 2, media_url: value }) } return { imageR, //图片检查返回值 }; } catch (err) { return err } } [代码] 2、在某个[代码]page[代码]中的[代码]js[代码]文件中: [代码]wx.chooseMedia({ count: 9, sizeType: ['original', 'compressed'], mediaType: ['image'], sourceType: ['album', 'camera'], camera: 'back', success: res => { checkAndUploadManyImages(res.tempFiles, this) }, fail: err => { console.log(err) }, }) [代码] 其中,[代码]checkAndUploadManyImages[代码] 函数(放在[代码]Page({})[代码]之外)实现: [代码]/** * 触发图片审核 * @param {待审核图片列表} tempFiles * @param {page = this} page */ function checkAndUploadManyImages(tempFiles, page) { wx.showLoading({ title: '上传中', mask: true }) for (var i = 0; i < tempFiles.length; i++) { const { tempFilePath } = tempFiles[i] /** * 1、触发审核,获取traceId */ wx.cloud.callFunction({ name: 'checkContent', data: { value: wx.cloud.CDN({ type: 'filePath', filePath: tempFilePath }), scene: 3 //场景枚举值(1 资料;2 评论;3 论坛;4 社交日志) }, success: json => { console.log(json) const { traceId } = json.result.imageR /** * 2、将traceId作为图片的云存储路径 */ wx.cloud.uploadFile({ cloudPath: traceId, // 上传至云端的路径 filePath: tempFilePath, // 小程序临时文件路径 success: res => { const { fileID } = res //data里:fileID: []。用于存放图片云存储路径。 page.data.fileID.push(fileID) page.setData({ fileID: page.data.fileID, }) wx.hideLoading() wx.showToast({ title: '上传成功 正在审核', icon: 'none' }) }, fail: err => { console.error('uploadFile err', err) wx.hideLoading() wx.showToast({ icon: 'error', title: '上传失败', }) } }) }, fail: err => { console.log('checkContent err', err) } }) } } [代码] 至此,只是触发了图片审核。接下来配置mediaCheckAsync的异步检测结果推送。 1、创建云函数 [代码]getMediaCheckResult[代码],上传并部署:云端安装依赖 [代码]//index.js const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db = cloud.database(); const traceId = db.collection('traceId') //在此之前,请数据库创建traceId集合 const head = 'cloud://xxx-xxx/' //这里请观察图片云存储路径(可使用consloe.log进行输出查看),将共同的前缀替换这里的字符串 function deleteImage(fileId) { cloud.deleteFile({ fileList: [fileId], success: res => { return res }, fail: err => { return err } }) } // 云函数入口函数 exports.main = async (event, context) => { const { result, trace_id, CreateTime } = event const { suggest } = result const fileId = head + trace_id; if (suggest != 'pass') { traceId.add({ data: { fileId, CreateTime } }).then(() => { //下面根据需要替换成自己的集合 db.collection('comment').where({ image_upload: fileId }).get() .then(() => { deleteImage(fileId); }) .catch((err) => { return err }) }) } else { return { suggest } } } [代码] 2、点击“云开发”-“设置”-“其他设置”-“添加消息推送”-进行配置(下图)-“确定” [图片] 3、回到[代码]page[代码]的[代码]js[代码]文件: [代码]//用户点击“提交”触发的事件 sendContent: function() { ... comment.add({ data: { ... image_upload: that.data.fileID, }, }).then((res) => { /** * 二、图片审核:处理异步检测结果推送 */ /** * 1、拿到全部的traceId集合(违规图片集合) */ const { _id } = res traceId.orderBy('CreateTime', 'desc').get() .then((res) => { /** * 2、删除上传图片列表中违规图片 */ deleteInvalidImages(that.data.fileID, res.data).then((res) => { /** * 3、更新图片列表 */ comment.doc(_id).update({ data: { image_upload: res } }).then(() => { wx.hideLoading() }) }) }) }) } [代码] 其中,[代码]deleteInvalidImages[代码]函数实现: [代码]/** * 删除已上传图片列表中的违规图片,并移除traceId对象 * @param {已上传图片列表} fileIds * @param {违规图片集合} cloudFileIds */ async function deleteInvalidImages(fileIds, cloudFileIds) { return new Promise(async function (resolve, reject) { try { const promises = []; let fileIdsWithoutCommon = []; promises.push(new Promise((resolve, reject) => { // 找到数组 fileIds 和数组 cloudFileIds 共有的元素 const common = fileIds.filter((elementA) => cloudFileIds.some((elementB) => elementA === elementB.fileId) ); // 删除数组 fileIds 中的共有元素 fileIdsWithoutCommon = fileIds.filter((elementA) => !cloudFileIds.some((elementB) => elementA === elementB.fileId) ); /** * 删除云存储中的违规图片 */ wx.cloud.deleteFile({ fileList: common, success: res => { console.log(res) resolve(); }, fail: err => { console.log(err) reject(err); } }) /** * 移除traceId对象 */ traceId.where({ fileId: _.in(common) }).remove({ success: res => { console.log(res) resolve(); }, fail: err => { console.log(err) reject(err); } }) })); await Promise.all(promises); resolve(fileIdsWithoutCommon); } catch (error) { reject(error); } }) } [代码]
2023-02-26 - 微信小程序怎么注销?等官方处理下谢谢。
本人想注销微信,但是微信小程序登录不了也没法注销,请官网小哥帮忙处理gh_59d6d7ea37ae,截图如下,看到请尽快处理注销谢谢。[图片][图片][图片]
05-14 - 已冻结小程序账号申请注销,如何解除管理员绑定?
已冻结小程序账号,我是管理员。早已不记得是何时何目的申请的,也不知道怎么找回。现需要解除管理员绑定,该如何操作?原始ID:gh_650a228fb3ea
04-22 - 开发者账号登录存在账号泄漏风险
开发者登录微信小程序的验证存在设计上的安全问题。 开发者登录微信小程序的时候,需要开发者输入主账号的用户名和密码,当存在多个开发者账号的时候,会导致账号密码的泄漏并且不可控。 在高等级保护的安全管理规范中,主账号的泄漏是不可接受的高风险,属于多人共用同一个账号登录系统的情况,需要整改。 这种账号管理方式无法通过三级等保测评,请开发团队知悉。
2023-07-06 - 小程序未在规定时间内完善用户隐私保护指引 导致接口收回 现在还能开通吗?
小程序未在规定时间内完善用户隐私保护指引 导致接口收回 现在还能开通吗? AppID(小程序ID):wx30a9b23c46fcd775
2023-06-08 - 重置开发者密码,会影响到曾经授权的小程序么?
我们需要重置开发者密码,但担心这样会影响其他曾经授权过的 小程序 和 第三方平台 麻烦尽快回复一下,重置开发者密码,会影响到它们 么?需要再重新授权么?
2022-07-21 - 微信开发者工具下载的 sourcemaps 怎么用。
什么是 Sourcemaps uglifyjs、bable 等工具会对 源代码 进行编译处理生成编译后的代码(下称目标代码),而 sourcemaps 就是保留了目标代码在源代码中的 位置信息 --------- 大神分割线 --------- 如何解读 Sourcemaps Sourcemaps 是一个 json [代码]{ "version": 3, "sources": ["a.js", "b.js"], // 源文件列表,这个表示是由 a.js 和 b.js 合并生成 "names": ["myFn", "test"], // 如果开启了变量名混淆,这里会保留变量名在源文件中名字信息 "sourcesContent: [], // 可选项,保存源码信息,顺序与 sources 字段对应,chrome 的 sources 面板中源码使用了这个字段的内容进行展示 "sourceRoot": "", // 源文件所在的目录信息 "file": "dist.js", // 可选,编译后的文件名 "mappings": "" // 这个是重点,是目标代码和源文件的位置的映射关系 } [代码] mappings 目标文件"行"的信息 mappings 是使用 ; 分隔的,每个部分对应目标代码的行 如: “;AAAA;AAAA,BBBB;;” 本例子目标文件有 4 行 第 0 行和第 3 行没有源文件对应信息,所以这两行是编译过程中加入的代码 目标文件的"列"信息 如: “AAAA,CAEA,CAEA;” ‘,’ 表示行内的位置信息分隔符 本例表示目标文件的这一行有三个有效的位置信息。 位置信息的第一位表示目标文件的列的 偏移 信息 本例中,表示列的信息是 ‘A’、‘C’、‘C’,对应的数字为 0、+1、+1,(vlq 编码,在线编解码工具) 注意,这个是偏移信息; 列数从 0 开始,依次累加偏移值可以算出当前的位置信息对应的真正的列 所以本例中表示的是目标文件的第 n 行中的第 0 列,第 1 列,第 2 列(没错是第 2 列) 源文件的信息 如:‘AAAA;ACAA;ADAA;’ 位置信息的第二位表示源文件的信息,本例子中是 ‘A’、‘C’、‘D’,对应数字是 0、+1、-1 如果 sourcemaps 中的 sources 字段只有一个文件的话,那么位置信息中第二位一直是 A(不需要偏移) 假设 sourcemaps 中 sources: [‘a.js’, ‘b.js’] 本例的意思是 AAAA: 目标文件第 0 行第 0 列 对应 第 0 个文件 a.js ACAA; 目标文件第 1 行第 0 列 对应 第 1 个文件 b.js ADAA; 目标文件第 2 行第 0 列 对了 第 0 个文件 a.js (偏移是 -1 又回到了 a.js) 源文件的行信息 位置信息的第三位表示源文件中的行的信息, 理解了位置偏移的概念,我们很容易理解 如:‘AACA,CACA;AACA;‘ 那么 AACA: 目标文件的第 0 行第 0 列 对应 第 0 个文件的第 1 行 CACA: 目标文件的第 0 行第 0+1 列 对应 第 0 个文件的第 1+1 行 AACA:目标文件的第 1 行第 0 列 对应 第 0 个文件的第 1 行 (注意:’;’ 后的行列偏移信息归 0) 源文件中的列信息 位置信息的第四位表示源文件中的列的信息 如:'AAAA,CAAC;' 那么 AAAA: 目标文件的第 0 行第 0 列 对应 第 0 个文件的第 0 行第 0 列 CAAC: 目标文件的第 0 行第 0+1 列 对应 第 0 个文件的第 0 行第 0+1 列 位置信息的第五位 第五位表示变量的偏移,对应 sourcemaps 中的 names 字段,表示目标文件中的变量名对应域源文件中的变量 如:’AAAA,CAACC;AAAAD;' sourcemaps 中 names 字段是 [‘a’, ‘b’] 那么 AAAA: 目标文件的第 0 行第 0 列 对应 第 0 个文件的第 0 行第 0 列,没有变量的信息 CAACC: 目标文件的第 0 行第 0+1 列 对应 第 0 个文件的第 0 行第 0+1 列,有变量信息,变量在源文件中是 ‘b’ (0+1=1) AAAAD: 目标文件的第 1 行第 0 列 对应 第 0 个文件的第 0 行第 0 列,有变量信息,变量在源文件中是 ‘a’ (1-1=0) --------- 大神分割线 --------- 怎么使用 Sourcemaps Q: 线上小程序报错,我怎么通过 sourcemaps 还原到源代码中? A: 如报错 appservice.js 1:15000, 表示目标文件第一行 第 15000 列位置报错。根据上文介绍的,通过 mappings 字段算。 Q: 不会。 A: 如果你会写代码的话,参考下边 [代码]import fs = require('fs') import {SourceMapConsumer} from 'source-map' async function originalPositionFor(line, column) { const sourceMapFilePath = '如果你不真的替换的成 sourcemaps 在硬盘中的位置,那你还是放弃自己写代码吧。 ' const sourceMapConsumer = await new SourceMapConsumer(JSON.parse(fs.readFileSync(sourceMapFilePath, 'utf8'))) return sourceMapConsumer.originalPositionFor({ line, column, }) } originalPositionFor(出错的行,出错的列) [代码] Q: 不会写代码 A: 下载最新版的开发者工具,菜单-设置-拓展设置-调试器插件 [图片] [图片] Q: 为啥都是 null? A: 每个小程序版本都应该对应一个sourcemap文件。 运营中心那里下载的 sourcemap 是对应线上最新的小程序版本。但运营中心的报错集合了多个小程序版本。拿旧小程序版本的报错信息,和最新版本的 sourcemap,是匹配不出的。开发者工具和ci 上传的时候,会提示下载对应版本的 sourcemap 信息,可以自助保存。 [图片] Q: 怎么确定有没有版本对应上 A: 下载的 sourcemap 中有个 wx 字段,标明了该 sourcemap 文件对应小程序版本号。 [图片] [图片] 前提 1.确保发生错误的小程序版本和下载回来的 sourcemap 版本是一致的。 a. 下载 sourceMap 文件,可在 mp 后台或开发者工具上传成功弹窗下载 2.确保 map 文件和发生错误的 js 文件是对应的。sourcemap 的目录和文件说明 a. APP 是主包,FULL 是整包(仅在不支持分包的低版本微信中使用),其他目录是分包 b. 每个分包下都有对应的 app-service.js.map 文件。 c. 如果是使用了按需注入特性(app.json中配置了lazyCodeLoading),那么每个分包下还会有 appservice.app.js.map(对应分包下非页面的js),和所有页面的 xxx.js.map 以上事情都确保正确之后,还是出现行列号匹配不出来的情况。那就需要进一步排查。 线上运行的小程序 sourcemap 文件是怎么生成的? 处理流程:源码 [ a.js a.js.map b.js b.js.map ] -> 开发者工具(JS转 ES5,压缩)-> 微信后台(合并 js 文件)[ appservice.app.js appservice.app.js.map]。 注意:如果源码在交给工具之前是经过了 webpack 等打包工具的处理,那源码这里需要有 map 文件。否则不需要存在 map 文件。 可以看出,map 文件经过三个步骤的处理,每个步骤都有可能导致出错,因此开发者需要先排查,是否是前两个步骤出错导致的 map 文件失效的。 如何排查前两个步骤产生的 map 文件是否有问题。 1.排查 a.js.map 文件是否有问题。 a. 可以在 a.js 的代码中写一下 throw new Error(‘test sourcemap’)。 b. 使用了 webpack 的情况下,要构建为生产环境的版本。 c. 在开发者工具模拟器中运行对应的页面,看看控制台中的报错,错误行列号是否能正常映射到源文件。 2.排查 开发者工具(JS转 ES5,压缩)步骤是否有问题。 在排查完第一步的基础上,点击预览,用微信上扫码预览,并打开调试 vConsole 功能,检查 vConsole 中是否有报错信息,检查报错信息中的行列号是否能正常映射到源文件。 如何排查 微信后台(合并 js 文件)是否有问题。 a. 一定要先排查完前两个步骤再来排查这一步,一般情况下,这一步是不会出错的。 b. 如果有问题,也只会导致 map 文件中的行号信息出现偏移。比如 Error 信息中显示报错地址是 100: 200,行号是 100。那么你可能直接用 100: 200 在 map 文件中搜索不出信息,但是如果 用 150: 200 就可以搜索出来,说明行号偏移了 50。那其他报错也可以偏移 50 后再进行搜索就找到结果。 c. 怎么排查偏移了多少?可以结合 error.message 的内容,初步判断大概错误的内容是什么。把对应的 map 文件放到这个网站上 source-map-visualization 进行搜索,找出哪些相同列号的地方。再结合 error.message 的内容进行判断。 d. 如果排查到是这一步导致的问题,请在社区上联系我们,我们会在后续版本进行修复。 依旧排查不出原因? 先整理一下按照上述步骤排查的结论,再在社区上联系我们协助
2023-02-10 - 【实战记录】使用新版接口获取手机号过程中,对小程序的基础库版本的了解
描述: 老版文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/deprecatedGetPhoneNumber.html 新版文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html 如题所示,最近项目中对获取手机号的接口进行升级,这里先展示下老版的写法 wxml部分: <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button> js部分: getphonenumber(e) { wx.login({ success (res) { if (res.code) { //发起网络请求 wx.request({ url: 'https://example.com/onLogin', data: { code: res.code }, success (res) { const data = { ..., encryptedData: e.detail.encryptedData, iv: e.detail.iv, sessionKey: res.data.session_key } wx.request({ url: 'https://example.com/getphonenumber', data, success (res) { // todo } }) } }) } } }) } 新版写法: getphonenumber(e) { wx.request({ url: 'https://example.com/getphonenumber', data: { code: e.detail.code }, success (res) { // todo } }) } 分析: 1、如文档所说旧版用户使用不当会存在下图所示问题,本身项目定位也是做自己的产品,也本着长期发展的目标,决定进行此次更新。 [图片] 2、新版代码简洁逻辑清晰,但若在项目中替换的话,还需要考虑到用户版本库使用情况,原因是:从基础库 2.21.2 开始,对获取手机号的接口进行了安全升级,这时需要登录下我们的小程序管理后台,设置-》基本设置-》基础库最低版本设置;查看下当前小程序用户版本库使用的占比情况,如下图所示,由于我们当前的小程序自2.21.3以下没有用户再使用,故直接设置了2.21.2,这样设置后,假设后面有低版本用户访问我们小程序的话,微信侧会提示用户去更新微信版本 [图片] 3、考虑如果其他同学项目发现有部分用户的版本是低于2.21.2的,这时可能就需要做兼容处理了。 小结: 获取手机号虽然api更简洁了,但也注意不能滥用哦~,好吧就到这里了,如有描述的不到位的地方,欢迎大家指正哈~ [图片]
2022-06-05 - 客服应答率低?来看看如何提高应答率!
客服数据面板提示小程序客服应答率低? 一起来看看通过「开启自动回复」、「开启快捷回复」、「开启在微信接收客服应答质量数据报告」提高客服应答率吧! [图片] 1. 开启自动回复 自动回复内可以设置4项自动发送消息的功能,包括「常见问题」、「接入欢迎语」、「离线回复」、「关键词回复」。 1.1 管理位置:PC客服(https://mpkf.weixin.qq.com/):设置 - 自动回复 [图片] 1.2 功能介绍 常见问题:包括「开场白」(必填) 和「问题知识库」,支持客服管理员配置。客服管理员设置后,用户发送消息,客服无需接入会话即可自动回复常见问题。支持配置5组知识库,支持勾选生效。[图片] 接入欢迎语:客服接入会话时的自动回复,支持每个客服自定义配置。每个客服配置后,欢迎语会在接入会话时自动下发给用户。[图片] 离线回复:当小程序内全部客服离线状态下,用户咨询消息,客服自动回复离线回复。支持客服管理员配置。[图片] 关键词回复:至多5组问答知识库,当用户发送的消息命中关键词,客服自动下发回复消息,支持勾选生效,客服在线离线均生效。支持客服管理员配置。[图片] 2. 开启快捷回复 快捷回复便于客服针对用户的常见咨询下发快捷素材,支持「文本素材」和「小程序卡片素材」。 2.1 管理位置 PC客服(https://mpkf.weixin.qq.com/):设置 - 快捷回复[图片] 移动端(「客服小助手」小程序):设置 - 管理快捷回复[图片] 2.2 使用位置 PC客服(https://mpkf.weixin.qq.com/):右侧扩展面板 - 快捷回复[图片] 移动端(「客服小助手」小程序):会话页 - 快捷回复入口[图片] 3. 开启在微信接收客服应答质量数据报告 客服管理员在数据面板开启「在微信接收数据报告」后,客服管理员可每日定期查看每个客服的应答情况。 3.1 开启位置 PC客服(https://mpkf.weixin.qq.com/):数据面板 - 开启数据报告[图片] 移动端(「客服小助手」小程序):数据 - 订阅数据报告 - 开启[图片] 3.2 在微信接收报告 客服管理员开启报告后,可在 微信 - 微信公众平台 接收客服应答报告,点击模板消息可前往「客服小助手」查看详情。 [图片] [图片] 后续小程序客服将会推出更多提高客服应答的工具,敬请期待! 欢迎各位开发者/商家分享使用体验及建议。
2022-05-31 - (4)获取用户信息
背景 我们发现大部分小程序都会使用 [代码]wx.getUserInfo[代码] 接口,来获取用户信息。原本设计这个接口时,我们希望开发者在真正需要用户信息的情况下才去调取这个接口,但很多开发者会直接调用这个接口,导致用户在使用小程序的时候产生困扰,归结起来有几点: 开发者在小程序首页直接调用 [代码]wx.getUserInfo[代码] 进行授权,弹框获取用户信息,会使得一部分用户点击“拒绝”按钮。 在开发者没有处理用户拒绝弹框的情况下,用户必须授权头像昵称等信息才能继续使用小程序,会导致某些用户放弃使用该小程序。 用户没有很好的方式重新授权,尽管我们增加了[代码]设置[代码]页面,可以让用户选择重新授权,但很多用户并不知道可以这么操作。 此外,我们发现开发者默认将 [代码]wx.login[代码] 和 [代码]wx.getUserInfo[代码] 绑定使用,这个是由于我们一开始的设计缺陷和实例代码导致的([代码]wx.getUserInfo[代码] 必须通过 [代码]wx.login[代码] 在后台生成 [代码]session_key[代码]后才能调用)。同时,我们收到开发者的反馈,希望用户进入小程序首页便能获取到用户的 [代码]unionId[代码],以便识别到用户是否以前关注了同主体公众号或使用过同主体的App 。 为了解决以上问题,针对获取用户信息我们更新了三个能力: 1.使用组件来获取用户信息 2.若用户满足一定条件,则可以用[代码]wx.login[代码] 获取到的[代码]code[代码]直接换到[代码]unionId[代码] 3.[代码]wx.getUserInfo[代码] 不需要依赖 [代码]wx.login[代码] 就能调用得到数据 获取用户信息组件介绍 [代码][代码] 组件变化: [代码]open-type [代码]属性增加 [代码]getUserInfo[代码] :用户点击时候会触发 [代码]bindgetuserinfo[代码] 事件。 新增事件 [代码]bindgetuserinfo[代码] :当 [代码]open-type[代码]为 [代码]getUserInfo[代码] 时,用户点击会触发。可以从事件返回参数的 [代码]detail[代码] 字段中获取到和 [代码]wx.getUserInfo[代码] 返回参数相同的数据。 示例: [代码]<button open-type="getUserInfo" bindgetuserinfo="userInfoHandler"> Click me button>[代码]和 [代码]wx.getUserInfo[代码] 不同之处在于: 1.API [代码]wx.getUserInfo[代码] 只会弹一次框,用户拒绝授权之后,再次调用将不会弹框; 2.组件 [代码][代码][代码][代码] 由于是用户主动触发,不受弹框次数限制,只要用户没有授权,都会再次弹框。 通过获取用户信息的组件,就可以解决用户再次授权的问题。 直接获取unionId开发者申请 [代码]userinfo[代码] 授权主要为了获取 [代码]unionid[代码],我们鼓励开发者在不骚扰用户的情况下合理获得[代码]unionid[代码],而仅在必要时才向用户弹窗申请使用昵称头像。为此,凡使用“获取用户信息组件”获取用户昵称头像的小程序,在满足以下全部条件时,将可以静默获得 [代码]unionid[代码]: 1.在微信开放平台下存在同主体的App、公众号、小程序。 2.用户关注了某个相同主体公众号,或曾经在某个相同主体App、公众号上进行过微信登录授权。 这样可让其他同主体的App、公众号、小程序的开发者快速获得已有用户的数据。 不依赖登录的用户信息获取某些工具类的轻量小程序不需要登录行为,但是也想获取用户信息,那么就可以在 [代码]wx.getUserInfo[代码] 的时候加一个参数 [代码]withCredentials: false[代码] 直接获取到用户信息,可以少一次网络请求。 这样可以在不给用户弹窗授权的情况下直接展示用户的信息。 最佳实践 1.调用 [代码]wx.login[代码] 获取 [代码]code[代码],然后从微信后端换取到 [代码]session_key[代码],用于解密 [代码]getUserInfo[代码]返回的敏感数据。 2.使用 [代码]wx.getSetting[代码] 获取用户的授权情况 1) 如果用户已经授权,直接调用 API [代码]wx.getUserInfo[代码] 获取用户最新的信息; 2) 用户未授权,在界面中显示一个按钮提示用户登入,当用户点击并授权后就获取到用户的最新信息。 3.获取到用户数据后可以进行展示或者发送给自己的后端。 One More Thing 除了获取用户方案介绍之外,再聊一聊很多初次接触微信小程序的开发者所不容易理解的一些概念: 1.关于OpenId和UnionId [代码]OpenId[代码] 是一个用户对于一个小程序/公众号的标识,开发者可以通过这个标识识别出用户。 [代码]UnionId[代码] 是一个用户对于同主体微信小程序/公众号/APP的标识,开发者需要在微信开放平台下绑定相同账号的主体。开发者可通过[代码]UnionId[代码],实现多个小程序、公众号、甚至APP 之间的数据互通了。 同一个用户的这两个 ID 对于同一个小程序来说是永久不变的,就算用户删了小程序,下次用户进入小程序,开发者依旧可以通过后台的记录标识出来。 2.关于 getUserInfo 和 login 很多开发者会把 [代码]login[代码] 和 [代码]getUserInfo[代码] 捆绑调用当成登录使用,其实 [代码]login[代码] 已经可以完成登录,[代码]getUserInfo[代码] 只是获取额外的用户信息。 在 [代码]login[代码] 获取到 [代码]code[代码] 后,会发送到开发者后端,开发者后端通过接口去微信后端换取到 [代码]openid[代码] 和[代码]sessionKey[代码](现在会将 [代码]unionid[代码] 也一并返回)后,把自定义登录态 [代码]3rd_session[代码]返回给前端,就已经完成登录行为了。而 [代码]login[代码] 行为是静默,不必授权的,用户不会察觉。 [代码]getUserInfo[代码] 只是为了提供更优质的服务而存在,比如展示头像昵称,判断性别,开发者可通过 [代码]unionId[代码] 和其他公众号上已有的用户画像结合来提供历史数据。因此开发者不必在用户刚刚进入小程序的时候就强制要求授权。 可以在官方的文档中看到 [代码]login[代码] 的最佳实践: [图片] Q & A Q1: 为什么 login 的时候不直接返回 openid,而是要用这么复杂的方式来经过后台好几层处理之后才能拿到? A: 为了防止坏人在网络链路上做手脚,所以小程序端请求开发者服务器的的请求都需要二次验证才是可信的。因为我们采取了小程序端只给 [代码]code[代码] ,由服务器端拿着 [代码]code[代码] 和 [代码]AppSecrect[代码] 去微信服务器请求的方式,才会给到开发者对应的[代码]openId[代码] 和用于加解密的 [代码]session_key。[代码] Q2: 既然用户的[代码]openId[代码] 是永远不变的,那么开发者可以使用[代码]openId[代码] 作为用户的登录态么? A: 不行,这是非常危险的行为。因为 [代码]openId[代码] 是不变的,如果有坏人拿着别人的 [代码]openId[代码] 来进行请求,那么就会出现冒充的情况。所以我们建议开发者可以自己在后台生成一个拥有有效期的 [代码]第三方session[代码] 来做登录态,用户每隔一段时间都需要进行更新以保障数据的安全性。 Q3: 是不是用户每次打开小程序都需要重新[代码]login[代码]? A: 不必,可以将登录态存入[代码]storage[代码]中,用户再次登录就可以拿[代码]storage[代码] 里的登录态做正常的业务请求,只有当登录态过期了之后才需要重新[代码]login[代码] 。这样子做一则可以减少用户等待时间,二则可以减少网络带宽。 目前微信的[代码]session_key[代码] 有效期是三天,所以建议开发者设置的登录态有效期要小于这个值。
2018-08-17 - 如何统计用户在微信小程序中当前页面停留时长?
如何统计用户在微信小程序中当前页面停留时长?
2020-12-30 - 关于珊瑚安全不再提供付费套餐的公告
由于业务调整,珊瑚安全不再提供付费套餐,平台将于2021年4月9日 12:00:00 之后停止付费购买该接口,已购买的资源包在有效期内不受影响。在资源包有效期内的售后问题仍可通过服务平台-珊瑚安全-联系客服进行反馈。此外,已经购买资源包的开发者留意资源包的使用情况,在使用完成前及时调整接口调用,避免影响后续使用。珊瑚安全仍将继续做好安全评估及安全教育支持,希望与广大开发者携手共创绿色、健康的微信生态环境。
2021-04-02 - mediaCheckAsync 和客服消息 同一个消息推送服务器 ?
mediaCheckAsync 和客服消息都是推送到同一个服务器url地址? 根据event 区分? 如果客服消息 我们还是想用 网页版客服工具与移动端小程序客服工具,而不是接口回复, 该怎么办?
2020-08-12 - openapi.security.imgSecCheck返回41005错误?
从小程序云函数调用imgSecCheck()时一直报41005错误,但是对应的media已经按文档设置。 errCode: 41005 | errMsg: openapi.security.imgSecCheck:fail media data missing hint: [xKvxiA04673955] 错误信息提示 imgSecCheck() is triggered from cloud with event: {action: "imgSecCheck", contentType: "image/jpg", buffer: {…}} action: "imgSecCheck" buffer: {type: "Buffer", data: Array(15006)} contentType: "image/jpg" __proto__: Object exception during imgSecCheck, e: Error: errCode: 41005 | errMsg: openapi.security.imgSecCheck:fail media data missing hint: [xKvxiA04673955] at callWXOpenAPI (/.../cloudfunctions/openapi/node_modules/wx-server-sdk/index.js:2267:31) at processTicksAndRejections (internal/process/task_queues.js:85:5) at async imgSecCheck (/.../cloudfunctions/openapi/index.js:43:15) 小程序云开发服务端代码段 // 图片内容检测 async function imgSecCheck(event) { console.debug('imgSecCheck() is triggered from cloud with event: ', event) try { let res = await cloud.openapi.security.imgSecCheck({ media: { contentType: event.contentType, // 'image/png', value: event.value, // Buffer } }) return res } catch (e) { console.error('exception during imgSecCheck, e: ', e) return e } }
2020-02-26 - 图片安全api采用python调用报错41005,请问应该怎样调用?
在调用官网检测图片安全的api的时候(https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.imgSecCheck.html),总是报错41005。 用python写的后端,请问应该怎样调用。看起来像是media格式不对,其中photo_file是小程序直接传过来的图片文件。请教一下应该怎么写。 media = {"media": photo_file} img_url = "https://api.weixin.qq.com/wxa/img_sec_check?access_token=" + access_token img_headers = {'content-type': 'image/png'} img_request = requests.post(img_url, data=media, headers=img_headers)
2020-05-08 - UGC类小程序运营攻略
一、什么服务或功能的小程序是UGC小程序? 小程序中的功能或服务中,涉及用户将自己自定义编辑的文字、图片、音频、视频等内容通过小程序进行展示或提供给其他用户的,属于UGC小程序。 二、作为UGC小程序,用户发布的内容与小程序是否相关? 微信小程序的服务提供者应当负有监管责任,应设置过滤违法、违规等不当信息内容的机制,保证用户产生内容符合信息内容的规定。 三、UGC小程序常见的违规内容有哪些? 1、视频类小程序未设置过滤机制,支持平台用户发布色情、低俗相关文字、图片、音频、视频等内容,。 违规案例:如下图小程序平台用户发布色情低俗类图片,向其他用户传播不健康内容。 [图片] 2、平台工具类小程序未设置过滤机制,支持平台用户发布违反法律法规的相关文字、图片、音频、视频等信息。 违规案例:如下图小程序平台用户发布国家命令禁止销售的枪支弹药售卖信息。 [图片] 3、测试类、姓名算命类、变装类小程序未设置过滤机制,支持用户自定义上传任意人物照片、姓名后生成恶搞内容。 违规案例:如下图小程序支持上传任意历史敏感人物照片、姓名等,恶搞历史敏感历史人物形象。 [图片] 4、抽奖类小程序未设置过滤机制,平台用户发布滥用分享相关活动信息。 违规案例:如下图小程序平台用户以电商平台名义发布虚假活动,并诱导用户转发活动海报至朋友圈。存在欺诈和滥用分享行为。 [图片] 5、电商平台小程序未设置商户过滤机制,支持平台商户在iOS端售卖虚拟商品。 违规案例:如下图小程序平台商户涉及在iOS端售卖视频会员、游戏皮肤等虚拟商品,存在虚拟支付行为。 [图片] 四、如果UGC小程序平台用户发布以上或其他违规内容,开发者应该怎么做? 1、接入内容安全检测接口:< a href="https://mp.weixin.qq.com/cgi-bin/announce?action=getannouncement&key=11522142966rk3L2&version=1&lang=zh_CN&platform=2">查看详情</ a> 该接口监测接口校验文本/图片是否含有敏感内容,提升信息安全防护能力。 2、目前安全接口支持基础检测能力,建议开发者建立自己的内容审核机制,安排审核团队定期审查小程序运营内容,及时处理违规内容/账户,降低被恶意利用导致传播恶意内容的风险。 五、存在违规内容的UGC小程序将会受到怎样的处理? 对于首次违规的小程序,平台将下发站内信整改通知,并给与一定的整改时间,请开发者按照提示在限期内完成整改。若到期未完成整改,平台将会在小程序功能使用上进行一定的限制,直到小程序完成内容整改。
2020-03-18 - 公众平台/小程序服务端API的access_token的内部设计
一、背景 对于使用过公众平台的API功能的开发者来说,access_token绝对不会陌生,它就像一个打开家门的钥匙,只要拿着它,就能使用公众平台绝大部分的API功能。因此,对于开发者而言,access_token的使用方式就变得尤其的重要。在日常API接口的运营中,经常遇到各种的疑问:为什么我的access_token突然非法了?为什么刚刚拿到的access_token,用了10min就过期了?对于这些疑问,我们提供出access_token的设计方案,便于开发者对access_token使用方式上的理解。 对于access_token的获取,可以参考公众平台的官方文档:auth.getAccessToken、获取Access token 二、access_token的内部设计 2.1 access_token的时效性 众所周知,access_token是通过appid和appsecret来生成的。内部设计的步骤如下: (1)开发者通过https请求方式: GET https://API.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET,传入appid及apppsecret的参数 (2)公众平台后台会校验appid和哈希(appsecret)是否与存储匹配,若匹配,结合当前时间戳,生成新的access_token。 (3)生成新的access_token的同时,会对老的access_token的过期时间戳更新为当前时间戳。 (4)返回新的access_token给开发者。 这里以图示的方式说明一下,新旧token交替过程: [图片] 从上图需要注意的几点: (1)公众平台存储层只会存储新老两个access_token,意味着假设开发者重复调用3次接口,则会导致最早的access_token立刻失效。 (2)虽然请求新的access_token后,老的access_token过期时间会更新为当前时间,但也不会立刻失效,原理请参考 【2.2 access_token 的逐渐失效性】 (3)出于信息安全考虑,公众平台并不会明文存储appsecret,仅存储appid以及appsecret的哈希值。因此开发者要妥善保管appsecret。当appsecret疑似泄露时,需要及时登录mp.weixin.qq.com重置appsecret。 2.2 access_token 的逐渐失效性 从【access_token的时效性】了解到,当开发者请求获取新的access_token时,老的access_token过期时间会被更新为当前时间,但此时不会立刻失效,因为公众平台会提供【5分钟的新老access_token交替缓冲时间】,因此也称为access_token 的逐渐失效性。 实现的原理是: 1. 由于老的access_token过期时间戳已被刷新,所以在API接口请求期间,带上的access_token解开后,过期时间戳会加上5分钟,然后和当前设备时间进行比对,若超过当前设备时间,判断为失效。 2. 公众平台的设备会保持时钟同步,但设备之间仍然可能会存在1-2分钟的时间差异,所以【5分钟】并非绝对的时间值。当开发者获取到新的access_token后应该尽快切换到新的access_token。 [图片] 从上图需要注意的几点: (1)由于存在设备时间同步的差异,可能会导致开发者遇到拿着老的access_token请求API接口,部分请求成功,部分请求失败的情况,建议开发者获取到新的access_token后尽快使用。 (2)通过理解两个图示,对开发者来说,access_token是相当关键且不能乱调的接口,建议开发者统一管理access_token,以免造成多次请求导致access_token失效。
2021-05-11 - 今天,我们一起来了解下“违法违规”
以下是目前小程序内常见的违法违规行为类型: 一、赌博类 违规示例: 该类违规小程序内通过各种方式引导用户参与以一定金额投入且获利情况不确定的赌博游戏;或为其提供技术支持、资金、场地等其他直接帮助的;或宣传引导代理赌博游戏等的行为。 [图片] 二、非法套现类 违规示例:该类违规小程序内为用户提供线上线下套现花呗、分期、京东白条、信用卡等服务。 [图片] 三、色情类 违规示例:该类违规小程序内推送云盘色情资源进行小视频买卖;或引导提供色情服务;或推送色情文章。 [图片] 四、非法交易类 违规示例:该类违规小程序内提供高价收购实名电话卡、驾驶证分数、实名微信帐号等服务。 [图片] 五、售卖非法商品类 违规示例:该类违规小程序内售卖危害公共安全及人身安全商品,包括但不限于:炸鱼机、监听器材等。 [图片] 六、代开发票类 违规示例:该类违规小程序未获得发票相关资质且非税务机关主体,在小程序内发布代开发票信息,或存在引导用户至线下提供代开发票服务的行为。 [图片] 七、高利贷欺诈类 违规示例:该类违规小程序提供高利贷渠道,或以电商页面为驱壳,实则利用小程序作为高利贷支付工具。 [图片] 相信大家已经对“违法违规”相关行为有了初步的认识,平台对“违法违规”的小程序将进行封号处理。希望大家遵循运营规范,敢于对违法违规说不。
2020-03-18 - 内容安全检测API的DEMO(imgSecCheck, msgSecCheck)
使用imgSecCheck, msgSecCheck这两个API的时候碰到一些雷,现在就分享下. msgSecCheck传输的文本不可以是Unicode编码,要进行解码后再传输, 否则返回的是 "内容正常,无违规内容" PHP DEMO: private function scantxt($url, $data) { $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, 500); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($curl, CURLOPT_URL, $url); $res = curl_exec($curl); curl_close($curl); return $res; } 调用: $data = ['content' => 'xxxxxxxxxxxxxxxxxxxxxxx']; scantxt($url, json_encode($data, JSON_UNESCAPED_UNICODE)); imgSecCheckmedia参数类型为form-data, 应该是指POST表单的头格式为 Content-Type: multipart/form-data 其实就是服务器端模拟文件上传功能,上传文件给微信服务器, 被上传的文件不支持URL,只能为本地图片,图片路径推荐绝对路径(只要能根据路径找到该文件即可,有的可以相对路径) PHP 5.5以上和以下使用的API方法不同 其实微信可以考虑支持BASE64,这样更简便. 5. API文章最下方的@, 其实可加可不加, 不加的时候微信也鉴别( @意思是上传的为图片) private function upimg($url) { $file = __DIR__ . '/123.jpg'; $cfile = curl_file_create($file, 'image/jpg', '@testpic'); //这里硬编码了,自己修改 $imgdata = array('media' => $cfile); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data')); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); // stop verifying certificate curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $imgdata); $r = curl_exec($curl); curl_close($curl); return $r; }
2018-07-25 - 云调用实现内容安全【文本、图片】
应用场景: 解决小程序输入内容违规,导致小程序被封风险,或者微信官方检查到小程序未使用安全审核机制,则警告要求使用,否则封禁搜索功能。 核心代码: 云函数端: const cloud = require('wx-server-sdk') cloud.init() exports.main = async (event) => { try { let result = ''; if(event.content){ result = await cloud.openapi.security.msgSecCheck({ content: event.content }); }else if(event.base64){ result = await cloud.openapi.security.imgSecCheck({ media: { contentType: 'image/jpeg', value: Buffer.from(event.base64, 'base64') } }) } return { result } } catch (error) { return { error } } } 小程序端: //文本安全检测 wx.cloud.callFunction({ name: "secCheck", data: { content: "花里胡哨", } }).then((res) => { console.log('msgSecCheck =', res) }) //图片安全检测 wx.chooseImage({ count: "1", complete: (res) => { wx.getFileSystemManager().readFile({ filePath: res.tempFilePaths[0], encoding: "base64", success: (res) => { wx.cloud.callFunction({ name: "secCheck", data: { base64: res.data, } }).then((res) => { console.log('imgSecCheck =', res) }) } }); }, }) 说明提示: 由于代码片段不支持云开发,故无法放代码片段,使用过程中有什么问题,欢迎讨论。
2020-05-07 - 求助,有没有PHP调用图片安全接口imgSecCheck的demo?
求一个PHP调用图片安全接口imgSecCheck的demo
2020-11-04 - 这个对接成功了吧,数据也发送过去了,怎么一直errMsgOK啊?
[图片] 特3456书yuuo莞6543李zxcz蒜7782法fgnv级 我发送的这个内容 appid是wx83505b27340adf62 能帮我看下不!
2020-08-21 - msgSecCheck 接口一直返回ok的解决方案,测试可行的msgSecCheck 接口PHP版demo
今天突然说小程序版本审核要我们处理评论中的敏感词内容,踩了一些坑终于搞好了,贴下代码出来吧,文档说的不是很详细,估计有不少小伙伴踩坑了。 public function keyCheck(){ $wxToken=wxTokenCheck(); //获取微信token $key = input(‘key’); $url = ‘https://api.weixin.qq.com/wxa/msg_sec_check?access_token=’.$wxToken['token’]; $data = json_encode([‘content’=>$key],JSON_UNESCAPED_UNICODE); //一定要把中文转成utf8!!! $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_URL,$url); // url curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // json数据 $res = curl_exec($ch); // 返回值 curl_close($ch); $result = json_decode($res,true); [代码] echo "<pre>"; var_dump($result); var_dump($data); echo "</pre>"; }[代码]
2019-09-29 - 敏感图片检测接口
调用敏感图片检测接口 https://api.weixin.qq.com/wxa/img_sec_check?access_token= 总是返回 {"errcode":41005,"errmsg":"media data missing hint: [yccPpa00088***]"} 参数:@C:\phpStudy\WWW\test\upload_cut_tempimg\15246560060977.jpg
2018-04-25