- 小程序蓝牙可以同时连接多设备吗?
iOS 同时连接设备数理论上能达到20个,当然这个和当前手机机型还有蓝牙设备端的配置有关。 安卓实测一般机型能达到6-8个。 低功耗蓝牙的连接从协议上就是不稳定的,需要开发者做好重连逻辑。
2019-08-28 - 小程序中webview引入JSSDK,使用的appid是小程序的appid还是公众号的appid?
小程序中webview引入JSSDK,使用的appid是小程序的appid还是公众号的appid?
2024-09-19 - 技术选型:关于小程序webview中内嵌H5的重要提示
虽然小程序提供了不少原生能力,但有时我们想在小程序中使用web生态的能力时或者对接第三方活动页面时,会使用webview组件来承载网页,但这里有一些小程序中关于webview的重要提示,在了解之后可以进一步决定某些业务场景下还是否应该使用H5内嵌小程序实现业务。 提示: 1.小程序中的webview中的H5 ,需要添加web-view可信域名,需要在对应的网页的部署根目录中添加相应校验文件,如果对接的是第三方无法添加校验文件的,则无法打开。 2.小程序中的webview如需使用微信相关能力,须配置jssdk,须提供微信公众号账号主体,并按文档进行正确的页面授权和配置(需后端配合)。 3.小程序中的webview有较强的缓存(社区相关问题较多),需要用户手动清除通用存储并删除小程序才可以,如需H5每次部署后,不再有缓存,可寻找后端修改Nginx配置为无缓存 4.小程序中的webview中无论使用原生input拍照或jssdk提供的拍照能力,当IOS内存不足总会出现H5重新加载的情况,当前无解决方案(社区相关问题较多)。 参考JS-SDK说明文档web-view | 微信开放文档微信h5页面,调用拍照后,页面刷新 | 微信开放社区web-view嵌入的h5页面缓存严重,如何清除? | 微信开放社区
2023-11-27 - web-view嵌套h5页面的小程序应该使用哪个微信支付方式?
支付方式
2024-03-19 - 请问web-view内嵌的小程序怎么做微信支付啊,有谁知道的嘛?
微信支付
2024-03-11 - 小程序使用微信支付,钱到哪里?如何退款提现,多久到账?一文读懂微信支付!
关于“钱”的事情,我相信是所有商家都很关注的事情!今天我们就整理了一些关于微信支付,大家最关心,和平时询问的最多问题,进行讲解!顾客通过小程序进行下单,钱是到哪里?如果申请退款,需要多久退款?这一系列的问题,我们一文搞定! 如何登录微信支付? 打开网址(https://pay.weixin.qq.com/)可通过扫码或者账号密码进行登录,登录成功后,选择绑定了小程序的商户号点击进入! [图片] 小程序到账的资金去哪里了? 1、钱到哪儿? 一般我们申请微信支付,需要绑定银行卡,主体为个体工商户时使用的是法人个人银行卡或对公账户;主体为企业时,使用的是对公银行账户!客户使用小程序微信支付的钱,会实时到商家自己的商户号里,默认会在早上8点自动提现至商户号绑定的提现账户中! [图片] 2、如何查看每日收支明细? 在我们系统后台,点击财务-微信对账,即可查看每日每笔订单的金额、类型和账单状态! [图片] 3、如何接收微信支付消息通知? 启用“微信支付商家助手”-选择登录收款商户号-收款记录,商家可以打开公众号通知或收款语音播报,这样就可以接收来自微信支付的消息通知,帮助商家更好地使用微信支付做生意! [图片] 4、到账如何提醒通知? 客户下单后,商家会通过微信支付后台、微信支付商户助手等方式收取交易概括,显示金额、日期等交易信息,支持语音播报! [图片] 如何修改结算账户? 1、登录来一间后台-设置-支付管理-支付列表 [图片] 2、点击修改结算账户,即可修改 [图片] 结算需要多久到账? 1、结算方式 结算方式分两种,一种是自动结算,一种是手动结算(【交易中心】-【提现/转出】-输入提现金额,进行提现)!一般我们默认是自动结算,自动提现规则显示:一般是T+1(默认是次日早上八点),次日发起自动提现! [图片] 2、自动结算 关闭设置自动结算内容:产品中心 - 我的产品 - 资金解决方案 - 自动提现 [图片] 退款需要多久?如何查询退款记录? 1、退款操作 客户下单后,选择退款,商家可在来一间系统后台,查看退款详情,金额返回时间根据支付方式而定。 [图片] 2、退款查询 来一间系统后台 > 财务>退款处理。查看实时退款详情,退款状态 [图片] 订单取消退不了款或退款失败怎么办? 1、如果订单是刚刚取消的,系统会有一个处理流程,稍等几分钟,系统会自动退还款项。 2、如果订单已经取消很久,几天过去还是没有退款的情况。 首先确认账户里面有没有余额,如果没有,需要充值余额。再重新申请退款【微信对账】-【退款处理】-重新退款 [图片] 如何查看支付商户号以及管理员? 1、当忘记自己小程序的商户号,以及不记得之前的管理员是谁时。可以登录系统后台在【设置】-【支付管理】-【支付列表】中查看。 点击资料详情,选择【超级管理员】可以查看管理员是谁。 [图片] 如果需要变更,登录商户支付后台去进行修改【账户中心】-【个人信息】-修改 [图片] 如果需要多个人管理商户号,在商户支付后台【账户中心】-【账户设置】-【员工账号管理】相关权限进行新增配置 [图片] 小程序提示交易受限怎么办? 提示交易受限:当微信支付失败提示“交易受限”时,我们需要解除支付限制,具体路径是:微信公众号关注微信支付——在帮助中心点击交易不了——点击解除支付限制。 微信支付提现交易停滞怎么办? 这种情况通常是因为小程序太长时间没有使用,长时间没有流水所导致的!可以登录“微信支付商家助手”小程序(操作路径:“微信支付商家助手”小程序—>风险处理—>违约处理记录)处理“交易停滞”单据。 [图片] 是否支持支付宝等其他支付方式? 微信小程序是基于微信生态开发的内容,目前是无法使用支付宝或其他支付方式的,可以使用微信支付,或者微信绑定信用卡、银行卡等卡片,同时支持跳转云闪付app进行支付! 以上就是我们整理的关于微信支付常见问题,希望能够帮助各位商家更好地了解微信支付~如果大家在使用过程中遇到文中没有提及到的问题,欢迎大家咨询我们,我们会及时为大家解答疑惑!
2023-11-28 - 小程序成员管理
功能介绍 小程序成员管理包括对小程序项目成员及体验成员的管理。 项目成员:表示参与小程序开发、运营的成员,可登陆小程序管理后台,包括运营者、开发者及数据分析者。管理员可在“成员管理”中添加、删除项目成员,并设置项目成员的角色。 体验成员:表示参与小程序内测体验的成员,可打开体验版小程序,但不属于项目成员。管理员、项目成员均可添加、删除体验成员。项目成员如需为体验成员开启「查看开发版」的权限,需管理员扫码同意并确认。 成员管理入口 小程序管理后台(mp.weixin.qq.com)- 用户身份 – 成员管理 [图片] 项目成员权限说明 [图片] 开发者权限:可使用小程序开发者工具及开发版小程序进行开发 体验者权限:可打开体验版或开发版小程序 登录:可登录小程序管理后台,无需管理员确认 数据分析:使用小程序统计模块功能查看小程序数据 微信支付:使用小程序微信支付(虚拟支付)模块 推广:使用小程序流量主、广告主模块 开发管理:小程序提交审核、发布、回退 开发设置:设置小程序服务器域名、消息推送及扫描普通链接二维码打开小程序 暂停服务设置:暂停小程序线上服务 解除关联公众号:可解绑小程序已关联的公众号 小程序插件:可进行小程序插件开发管理和设置 游戏运营管理:可使用小游戏管理后台的素材管理、游戏圈管理等功能 成员管理人数限制 每个小程序帐号可添加一定数量的项目成员、体验成员,具体限制如下: [图片] 补充说明 管理员及其他项目成员绑定帐号数不占用公众号绑定数量限制。 每个微信号可以成为50个小程序的项目成员。 每个微信号可以成为50个小程序的体验成员。
2024-07-17 - 小程序如何换绑管理员?
小程序在注册流程中绑定管理员,在使用过程中如需更换管理员,可在小程序后台换绑,流程如下: 一、登录小程序后台,进入“用户身份-管理员”,点击修改 [图片] 二、原管理员验证身份 个人主体帐号:原管理员扫码验证身份 [图片] 非个人主体帐号:填写原管理员身份证号,并使用原管理员绑定的微信号扫码验证身份 [图片] 三、填写新管理员信息,完成绑定 个人主体帐号:管理员姓名与身份证号必须与主体一致,不可修改。可更换绑定的微信号。要求管理员微信号绑定了银行卡且与主体身份一致。 [图片] 非个人主体帐号:可重新填写新管理员姓名、身份证号、手机,并绑定微信号。 [图片]
2020-03-18 - 微信法定代表人扫脸验证失败
平台是直接拉取工商局的数据,工商数据未更新则无法正常发起验证流程,需要等15个工作日再试试。另,开发者可在该网站查询主体的更新信息http://www.gsxt.gov.cn/corp-query-homepage.html(建议开发者先核实下主体名称是否填写有误) 法定代表人扫脸验证失败一般是什么原因? 1:建议重新核查信息,确保账号主体信息及法人信息提交无误。如确认无误,还是审核失败,是因未在工商数据中查询到您提交法人的相关信息,无法核查,故审核失败。 如贵方是新建企业,或近期有做信息变更,企业工商数据更新可能有延迟,建议您过段时间(5~15工作日)再试。期间不支持加急 2:营业执照中主体名称为空或者*号,如何验证? 个体户主体名称为空或者*号,主体名称请填写个体户+法人姓名(比如:个体户张三)提交验证。 3:法定代表人不是大陆居民,如何验证? 如果法定代表人身份证件不是中国大陆地区居民身份证,目前暂时无法完成验证,还请谅解。 4:如果是新注册的企业,或近期有做企业信息变更,验证失败如何处理? 企业工商数据更新可能有延迟,建议过5~15工作日后再试试 5:个体工商户名称/企业名称和统一社会信用代码填写不正确,如有填写了错别字、错漏字,都会导致无法识别通过。 举例1:统一社会信用代码留意数字0和字母O、Q的区别,数字1和字母I的区别。 举例2:主体名称有括号的,留意括号前后是否有空格; 举例3:营业执照主体名称为xxxx(个体工商户),后面括号内容也要填写完整。留意名称不要有错别字。 6:以及非企业类型不支持法人验证,以及若企业为合伙企业,法人为多个人或为执行事务合伙人xxx公司的,不支持法人验证 7:不支持用其他人实名的微信扫码验证。目前仅支持中国内地法人验证,非内地法人暂无法进行法人验证 8:注册页面提示“提交的法定代表人信息验证失败次数太多,请尝试其他方式进行注册”? 同一邮箱申请公众帐号,选择法人验证方式提交注册只有3次机会,若已达到次数上限,请选择支付验证或微信认证方式继续注册,若依旧要申请法人验证方式,建议更换邮箱注册。 温馨提示:若是新办理的营业执照或近期变更过企业信息,数据更新可能有延迟建议过5-15天后再申请。若是个体工商户营业执照没有名称,不支持选择法人验证申请,建议选择其他验证方式申请。 如果按照以上方式排查仍然无法解决问题,可通过微信公众号“腾讯客服”进行咨询。
2024-07-01 - 视频号审核人员极其不作为,只会应付差事!!!
事情是这样的,最近ai绘画以及ai制作的视频非常火爆,就想着在视频号发布视频。 于是就创建了账号 [ 甜妹AI ],发布的内容是写实风格的ai美女跳舞视频,刚开始一切都非常顺利,几天就涨粉3000+,并且发布的内容多次收到平台的推荐。 这种日子没过多久,就收到了 出镜人身份验证的通知。由于视频中的出镜人物为ai,我按照要求 录制视频 说出指定内容以及视频内容来源,并提交了我本人的身份证 以及 创作期间的截图、证明材料能内容。 最后等来的结果是 出镜人身份验证 未通过。也没有任何的申诉入口了。然后我就在视频号内的 反馈与帮助内 尝试联系客服。得到的回复依旧是提交的材料无法验证出镜人身份。 到这里我依旧没有选择放弃,我尝试在微信客服 公众号 联系人工,联系上人工之后 客服让我提交相应的证明材料,传到百度网盘发给他,他再帮忙提交给审核,我提交了当时制作时候的整个工程文件以及当时创作过程中我保留的一些截图 ,大小近2G,内含了ai逐帧绘制的原图,结果在第二天又收到了同样的回复,最主要的是,我分享的网盘 他既没有下载 也没有浏览,百度网盘可以看到分享连接的 浏览次数 下载次数 以及 转存次数。 [图片][图片][图片] [图片][图片] 前前后后折腾了好几天,现在账号依旧处于限制状态,审核难道看不出来ai与真人吗,提交材料根本不看,多次联系得到的回复内容也是一模一样,没有丝毫的差别。 无语。
2024-01-18 - 小程序备案周期与客服沟通结果
兄弟们,经过我三天的客服接入等待,目前大概知道了流程,可以参考下。 第一步,平台审核1-2工作日,这个应该都是正常的。 第二部,提交管局收到短信等待管局审核也是正常 问题来了,出在了 1-2中间!!!! 初审只是你的信息过了审核,但是并没有提交到管局!!! 现在大部分都是等待提交管局审核。 所以 慢慢等就行了。 [图片] [图片] [图片] [图片]
2023-09-22 - 微信开放平台,更换主体之后,客户的unionid是否会发生改变?
微信开放平台,更换主体之后,客户的unionid是否会发生改变?
2023-09-20 - 个人小程序备案流程
根据官方专员的社区回复,“新增(未上架)小程序9月4日开放备案入口;存量(已上架)小程序9月19日开放备案入口” 我找了自己一个未上架的小程序,操作了一遍备案流程。 整理如下。 一,备案入口 小程序首页就可以看到。 [图片] 二,去备案 点按钮后,会弹出二维码窗口,要求管理员微信扫码确认。 1,验证备案类型,会让你选择地区,然后上传身份证。 [图片] 2,填写主体信息 [图片] 3,填写小程序信息 [图片] 这一步,需要管理员手机扫码,微信授权,以及人脸核验。 [图片][图片][图片] 4,上传材料 这一步的材料,承诺书是系统默认生成的,不用自己写。你也可以预览承诺书。 [图片] 5,然后就是材料预览 自己复核一下填写是否有问题。,没问题就提交。 6,备案完成。 进入平台审核中状态。 [图片] [图片]
2023-09-04 - 适配新版获取昵称头像、隐私保护协议接口
蛮记录一下,虽然官方新版获取昵称、头像的api上线已久 目前的做法是封装了一个auth.js用来专门获取用户信息,想要实现的效果是 1、若用户没有授权过昵称、头像,则弹出授权弹窗 2、若用户有授权过,则直接返回昵称头像等其他用户信息 3、允许更新用户信息,也就是不管之前有没有授权过昵称头像,都会再次弹出授权弹窗 4、支持旧版api,主要是考虑到部分用户的微信客户端可能长期未更新,不支持新版api 另外也适配了最近的隐私接口功能。因为获取昵称组件是一个input,不会触发wx.onNeedPrivacyAuthorization,所以这里是给input加了一个catch:touchstart="requirePrivacyAuthorize",在requirePrivacyAuthorize里面调用wx.requirePrivacyAuthorize,从而触发wx.onNeedPrivacyAuthorization。具体代码可以看下improveUserProfile.wxml、improveUserProfile.js 主要代码如下,核心方法 authProcess: auth.js const api = require('/api.js'); const file = require("/file.js"); /** * 保存或者更新用户信息到云端 * @param userInfo * @returns {Promise<unknown>} * @private */ const _saveOrUpdateUserInfo = function (userInfo) { return new Promise((resolve, reject) => { api.router.callCloudUserCenterFunction("UserInfoHandler/saveOrUpdateUserInfo", userInfo, res => { console.log("保存用户信息到云端完毕=>", JSON.stringify(res)); resolve(res); }, res => { console.error("保存用户信息到云端失败=>", res); reject(); } ); }); }; /** * 发起后端请求前先获取用户信息 * 使用新版获取用户信息接口 * @param app * @param basePage * @param update 等于true时表示更新用户信息 * @returns {Promise<any>} */ const authProcess = function (app, basePage, update) { return new Promise(function (resolve, reject) { if (update) { console.log("更新用户信息,重新授权"); _getUserProfile(app, basePage).then(res => resolve(res)).catch(res => reject(res)); } else if (!app.globalData.userInfo.authEver) { console.log("没有用户授权信息,开始授权"); _getUserProfile(app, basePage).then(res => resolve(res)).catch(res => reject(res)); } else { console.log("用户有授权过,无需重新授权"); resolve(app.globalData.userInfo); } }); }; /** * 使用新版接口获取用户信息 * 兼容新版头像昵称填写能力 * @param app * @param basePage * @private */ const _getUserProfile = function (app, basePage) { return new Promise(function (resolve, reject) { const supportChooseAvatar = wx.canIUse('button.open-type.chooseAvatar'); if (supportChooseAvatar) { console.warn("支持头像昵称填写能力"); const improveUserProfile = basePage.improveUserProfile || basePage.selectComponent('#improveUserProfile'); const toast = basePage.toast || basePage.selectComponent('#toast'); if (!improveUserProfile) { console.error("完善用户资料组件缺失,无法继续"); reject("完善用户资料组件缺失"); } else if (!toast) { console.error("toast组件缺失,无法继续"); reject("toast组件缺失"); } else { improveUserProfile.show(({nickName, avatarUrl}) => { const {openid, avatarFileId: oldAvatarFileId} = app.globalData.userInfo; const targetPath = _getHeaderPath(openid); console.log("上传获取到的临时头像:", avatarUrl); toast.showLoadingToast({text: "开始上传头像"}); file.uploadCloudFile(targetPath, avatarUrl).then(fileId => { file.getTempFileURL(fileId).then(fileUrl => { toast.hideLoadingToast(); _getUserProfileCallback(app, basePage, { userInfo: { nickName, avatarUrl: fileUrl, avatarFileId: fileId } }).then(userInfo => resolve(userInfo)); if (oldAvatarFileId) { console.log("删除旧的云储存头像文件", oldAvatarFileId); file.deleteCloudFile([oldAvatarFileId]).then(); } }).catch(res => { toast.hideLoadingToast(); toast.showToast({text: "保存头像链接失败"}); reject("保存头像链接失败"); }) }).catch(res => { toast.hideLoadingToast(); toast.showToast({text: "头像上传失败"}); reject("头像上传失败"); }); file.onUploadProgressUpdate(progress => { toast.showLoadingToast({text: "上传了" + progress + "%"}); }); }, res => { console.log("用户拒绝授权信息:", res); reject(res); }); //reject("需要使用新api授权用户信息"); } } else { console.warn("不支持头像昵称填写能力"); api.getUserProfile( res => { _getUserProfileCallback(app, basePage, res).then(userInfo => resolve(userInfo)); }, res => { console.error("获取用户信息失败:", res); reject(res); } ); //reject("需要使用旧api授权用户信息"); } }); }; /** * 获取到用户信息的后续逻辑 * @param app * @param basePage * @param result * @returns {Promise<unknown>} * @private */ const _getUserProfileCallback = (app, basePage, result) => { return new Promise(function (resolve, reject) { console.log("获取用户信息结果:", JSON.stringify(result)); let {userInfo} = result; //authEver=true时后端做更新操作,false时新增操作 const {authEver} = app.globalData.userInfo || {}; userInfo = Object.assign(app.globalData.userInfo || {}, userInfo, {ready: true, authEver: true}); basePage.setData({ userInfo, }, () => { _saveOrUpdateUserInfo(Object.assign({}, userInfo, {authEver})).then(res => { console.log("用户信息保存完毕,更新后的用户信息:", res); const result = res.result; if (result.success) { userInfo = Object.assign(app.globalData.userInfo || {}, userInfo); basePage.setData({ userInfo, }); } resolve(userInfo); }).catch(res => reject()); }); }); } /** * 获取头像地址 * 不同项目可以自行调整 * @param openid * @returns {string} * @private */ const _getHeaderPath = (openid) => { return "images/" + openid + "/avatarUrl_" + new Date().getTime() + ".webp"; } module.exports = { setUserInfo2Data, authProcess }; 昵称、头像授权弹窗自定义组件 improveUserProfile.wxml <view class="container" wx:if="{{show}}"> <view class="cover {{showCoverAnimation?'cover-fade-in':''}}" catch:touchmove="return"></view> <view class="improve-box {{showBoxAnimation?'slade-in':''}} {{device.isPhoneX? 'phx_68':''}}" catch:touchmove="return"> <view class="title flex-start-horizontal"> <view class="logo"> <image class="icon" src="xxxx"></image> </view> <view class="mini-name">恋爱小清单 申请</view> </view> <view class="tips"> <view class="tip">获取你的昵称、头像</view> <view class="use-for">用于个人中心、共享清单、恋人圈以及分享时展示</view> </view> <form catchsubmit="saveUserInfo"> <view class="info-item flex-center"> <view class="label">头像</view> <view class="input-content flex-full more"> <button class="reset-btn flex-column-left" style="height:100%" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar"> <view class="choose-avatar before" wx:if="{{!avatarUrl}}"> <image class="icon" src="/images/me/choose-avatar.png"></image> </view> <image class="choose-avatar after" src="{{avatarUrl}}" wx:else></image> </button> </view> </view> <view class="info-item flex-center no-border"> <view class="label">昵称</view> <input class="input-content flex-full more" model:value="{{nickName}}" type="nickname" placeholder="输入昵称" placeholder-class="edit-placeholder" focus="{{nickNameFocus}}" always-embed="{{false}}" adjust-position="{{true}}" hold-keyboard="{{false}}" name="nickName" catch:touchstart="requirePrivacyAuthorize"></input> </view> <view class="buttons flex-center"> <button class="cancel reset-btn" form-type="reset" bindtap="close">拒绝</button> <button class="save reset-btn" form-type="submit">保存</button> </view> <!--隐藏参数区域开始--> <input disabled style="display:none;" name="avatarUrl" value="{{avatarUrl}}"></input> <!--隐藏参数区域结束--> </form> </view> </view> <!--toast--> <toast id="toast"></toast> improveUserProfile.wxss @import "/app.wxss"; .cover{ background-color: #111; opacity: 0; position: fixed; left: 0; top: 0; right: 0; bottom: 0; z-index: 5000; transition: opacity .3s; } .improve-box{ position: fixed; left: 0rpx; right: 0rpx; bottom: 0rpx; z-index: 5100; background-color: #fff; box-sizing: border-box; padding-top: 60rpx; padding-left: 50rpx; padding-right: 50rpx; border-radius: 30rpx 30rpx 0 0; transform: translateY(100%); transition: transform .3s, bottom .3s; } .cover-fade-in{ opacity: 0.7; } .slade-in{ transform: translateY(0); bottom: 0rpx; } .improve-box .title{ font-size: 32rpx; font-weight: 500; text-align: center; margin-bottom: 40rpx; color: #161616; } .improve-box .title .icon{ width: 46rpx; height: 46rpx; margin-right: 8rpx; vertical-align: bottom; border-radius: 50%; } .improve-box .title .mini-name{ /*margin-bottom: 2rpx;*/ } .improve-box .tips{ margin-bottom: 20rpx; } .improve-box .tips .tip{ color: #121212; font-size: 34rpx; font-weight: 500; margin-bottom: 12rpx; } .improve-box .tips .use-for{ color: #606266; font-size: 28rpx; margin-bottom: 20rpx; } .improve-box .info-item{ /*margin-bottom: 30rpx;*/ border-bottom: 1rpx solid #f0f0f0; } .improve-box .label{ margin-right: 40rpx; font-size: 32rpx; color: #404040; padding: 30rpx 0 30rpx; } .improve-box .choose-avatar.after{ width: 48rpx; height: 48rpx; display: block; border-radius: 10rpx; } .improve-box .choose-avatar.before{ background-color: #f0f0f0; width: 48rpx; height: 48rpx; display: block; border-radius: 10rpx; padding: 8rpx; box-sizing: border-box; } .improve-box .choose-avatar.before .icon{ width: 100%; height: 100%; display: block; } .improve-box .input-content{ width: 100%; font-size: 32rpx; min-height: 80rpx; height: 80rpx; line-height: 80rpx; border-radius: 10rpx; padding-left: 20rpx; box-sizing: border-box; /*border-bottom: 1rpx solid #dcdee1;*/ position: relative; padding-right: 30rpx; } .edit-placeholder{ color: #c7c7cc; font-size: 32rpx; } .improve-box .buttons{ margin-bottom: 40rpx; margin-top: 50rpx; text-align: center; font-size: 34rpx; font-weight: 550; } .improve-box .buttons .save{ width: 220rpx !important; height: 90rpx; line-height: 90rpx; border-radius: 14rpx; color: #fff; /*background:#fff linear-gradient(90deg,rgba(246, 120, 121,.9) 10%, rgb(246, 120, 121));*/ background-color: #07c160; margin-left: -50rpx; } .improve-box .buttons .cancel{ width: 220rpx !important; height: 90rpx; line-height: 90rpx; border-radius: 14rpx; color: #07c160; background-color: #F2F2F2; } .more:after{ content: " "; transform: rotate(45deg); height: 14rpx; width: 14rpx; border-width: 2rpx 2rpx 0 0; border-color: #b2b2b2; border-style: solid; position: absolute; margin-top: -8rpx; right: 4rpx; top: 50%; transition: transform .3s; } improveUserProfile.js //获取应用实例 const app = getApp(); const api = require('../../utils/api.js'); const tabbar = require('../../utils/tabbar.js'); Component({ /** * 组件的属性列表 */ properties: {}, /** * 组件的初始数据 */ data: { show: false, showCoverAnimation: false,//显示类别选择窗口动画 showBoxAnimation: false,//显示类别选择窗口动画 avatarUrl: "", nickNameFocus: false, }, attached() { this.toast = this.selectComponent('#toast'); }, observers: { 'show': function (show) { if (!show) { console.log("获取用户昵称头像弹窗关闭,昵称输入框状态复位"); this.setData({ nickNameFocus: false }) } } }, /** * 组件的方法列表 */ methods: { show(successCallback, failCallback) { const device = app.getSystemInfo(); this.setData({ show: true, device, successCallback, failCallback }, () => { this.setData({ showCoverAnimation: true, showBoxAnimation: true }); }) tabbar.hideTab(this); }, hide() { this.setData({ showCoverAnimation: false, showBoxAnimation: false }, () => { const that = this; setTimeout(function () { that.setData({ show: false }) tabbar.showTab(that); }, 300) }) }, close() { const {failCallback} = this.data; typeof failCallback == 'function' && failCallback("用户拒绝授权"); this.hide(); }, onChooseAvatar(e) { console.log("选择头像:", e); const {avatarUrl} = e.detail; this.setData({ avatarUrl }) }, /** * 模拟隐私接口调用,并触发隐私弹窗逻辑 */ requirePrivacyAuthorize() { if (wx.requirePrivacyAuthorize) { console.warn("当前基础库支持api wx.requirePrivacyAuthorize"); wx.requirePrivacyAuthorize({ success: res => { console.log('用户同意了隐私协议 或 无需用户同意隐私协议'); //用户同意隐私协议后给昵称输入框聚焦 this.setData({ nickNameFocus: true }) }, fail: res => { console.log('用户拒绝了隐私协议'); } }) } else { console.warn("当前基础库不支持api wx.requirePrivacyAuthorize"); this.setData({ nickNameFocus: true }) } }, saveUserInfo(e) { console.log("保存用户资料:", e); const {nickName, avatarUrl} = e.detail.value; if (!avatarUrl) { this.toast.showToast({text: "请选择头像"}); return; } if (!nickName) { this.toast.showToast({text: "请输入昵称"}); return; } const {successCallback} = this.data; typeof successCallback == 'function' && successCallback({nickName, avatarUrl}); this.hide(); } } }); 弹窗效果 [图片]
2023-08-30 - 隐私协议授权的一种解决思路
现状 登录页使用了获取手机号接口,登录页为单独的页面(非弹窗),所有登录需求都会跳转到此页。 [图片] 分析 小程序提供两种接入方式:一种是主动查询授权状态,如果状态为未授权则进入授权流程,已授权则无需处理;另一种是被动监听何时需要授权,触发事件后进入授权流程,未触发则表示已授权。在登录的流程中,主动查询就是先发起授权后点击登录按钮,被动监听就是先点击登录按钮后发起授权。个人感觉,主动查询的方式先告知用户需要采集隐私数据,比较符合用户习惯,而被动监听的方式事前未告知用户需要授权,且打断了登录的流程,用户体验不佳,因此采取主动查询的方式。 官方的示例采用了弹窗授权的方式,但无论是在页面上覆盖一个模拟弹窗组件,还是使用page-container,控制弹窗都不能像VUE那样优雅,复用也不方便。鉴于登录页也是单独的页面,考虑到以后可能还有其它页面需要授权,因此授权页也采用单独的页面(PS.skyline的自定义路由可以很优雅地实现弹窗,但目前还没有适配,暂不考虑,之后对授权页进行改造即可)。 思路 在登录页的onLoad中主动查询授权状态,如果状态为未授权则调用授权接口跳转到授权页,授权页回调授权状态,如果授权失败则登录也失败。 [图片] 实现 [代码]// 封装的登录接口 function requestLogin() { return new Promise(async (resolve, reject) => { wx.navigateTo({ url: '/pages/user/user-login/user-login', // 登录页 events: { login: (loginStatus) => { // 登录状态回调 if (loginStatus) { // 成功 resolve() } else { // 失败 reject(new Error('login fail')) } } }, fail: () => reject(new Error('navigate fail')) }) }) } // 封装的授权接口 function requestProvicy() { return new Promise(async (resolve, reject) => { wx.getPrivacySetting({ success: (res) => { if (res.needAuthorization) { // 需要授权 wx.navigateTo({ url: '/pages/user/user-login/user-login', // 登录页 events: { privacy: (privacyStatus) => { // 授权状态回调 if (loginStatus) { // 成功 resolve() } else { // 失败 reject(new Error('privacy fail')) } } }, fail: () => reject(new Error('navigate fail')) }) } else { // 无需授权 resolve() } }, fail: () => reject(new Error('get privacy fail')) }) }) } // 第一步:调用封装的登录接口 // 需要登录才能进入的页面 Page({ onLoad: async function(options) { try { await wx.$auth.requestLogin() // 登录失败抛出错误 } catch { return wx.$router.back() // 返回上一页 } // 业务代码 } }) // 第二步:获取手机号登录 // 登录页 <!-- wxml > <button open-type="getPhoneNumber" bindgetphonenumber="handleGetPhoneNumber">获取手机号</button> Page({ handleGetPhoneNumber: async function(e) { const code = e.detail.code // 手机号code // 调用自己后台的登录接口 this._loginStatus = true // 登录成功状态,在onUnload回调 wx.$router.back() // 返回上一页 }, onLoad: async function() { try { await wx.$auth.requestProvicy() // 授权失败抛出错误 } catch { return wx.$router.back() // 返回上一页 } } onUnload: function() { const eventChannel = this.getOpenerEventChannel() if (!eventChannel) return eventChannel.emit('login', !!this._loginStatus) // 回调登录结果 } }) // 第三步:授权 // 授权页 <!-- wxml > <button id="agree-btn" open-type="agreePrivacyAuthorization" bindagreeprivacyauthorization="handleAgreePrivacyAuthorization">我已阅读并同意隐私协议</button> Page({ handleAgreePrivacyAuthorization: async function() { this._privacyStatus = true // 授权成功状态,在onUnload回调 wx.$router.back() // 返回上一页 }, onUnload: function() { const eventChannel = this.getOpenerEventChannel() if (!eventChannel) return eventChannel.emit('privacy', !!this._privacyStatus) // 回调登录结果 } }) [代码] 最终效果 未登录的状态下打开一个需要登录才能使用的页面 [图片] 可以进入小程序实际体验一下,欢迎各位一起讨论 [图片]
2023-09-01 - 关于新版隐私协议接口wx.onNeedPrivacyAuthorization的适配解读以及实现代码
官方公告地址: https://developers.weixin.qq.com/community/develop/doc/00042e3ef54940ce8520e38db61801 目前,开发工具或者体验版的小程序,调试基础库如果是2.33.0及以上就得适配了,线上版本9月15日之后生效,所以这之前需要尽快改完,发布一版,否则到了9月15号之后 线上就会生效报错了。 其实改起来也很简单,以下是实现步骤和代码: 1、首先看一下这个网址,里边包含涉及到的隐私的接口,这些接口都要适配一下 https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/miniprogram-intro.html [图片] 在以上接口用到的页面,需要画一下类似上边的弹窗(这个弹窗可以全局定义个组件,方便多个页面共用),然后里边蓝字可以点击后调用wx.openPrivacyContract(Object object)接口即可,会自动跳转打开隐私协议页面。 拒绝按钮可以加一个点击事件,然后在事件里这样写 [图片] 同意按钮比较特殊,布局需要用button这样写,记得给button加一个Id [图片] 然后在handleAgreePrivacyAuthorization里就可以获取到点击事件,这样写 [图片] 2、最后需要在onLoad或者onShow里加上以下监听代码,在这里边让自定义的隐私弹窗显示出来即可。 [图片] 以上代码加上就可以了,如果业务逻辑用到了需要判断是否授权过,可以加上 wx.getPrivacySetting(Object object)去获取是否授权过,用不到可以不加这个判断。
2023-08-16 - 关于规范公众号模板消息的再次公告
根据用户的反馈与建议,同时为了给予开发者更充裕的时间,平台现对原计划3月30日生效的模板消息内容规范措施(详情见《关于规范公众号模板消息的公告》)进行调整。 原计划于2023年3月30日去除尾部/备注内容、自定义颜色、表情符号,现调整为: 2023年5月4日 1)去除自定义颜色、表情符号;(表情符号由替换为“□”改为直接去除) 2)去除首行内容;▶ 新增措施 3)去除尾部/备注内容; 4)中间的主内容中,单个字段内容不超过20个字,且不支持换行。 ▶ 新增措施(5月4日新增) [图片] 此措施不会影响模板消息下发,自5月4日起,当公众号进行模板消息下发时,平台会自动去掉相关内容。 如有服务通知类模板需求,建议前往微信公众平台,在「模板消息 > 模板库 > 类目模板库」新增对应模板。
2023-03-30 - 自从官方公布“获取手机号收费标准”,我还有的困惑。你还有哪些困惑?一起交流交流
首先,手机号是微信用户信息,把用户信息外流还收钱是很很难看的态度。至少我认识的一群开发者都是骂声一片,想知道为啥要还要么干。 其次真的要按腾讯官方的改,还有很多定义不清楚的地方,开发无从下手。具体我收到的和自己发现还不清楚的如下: 首先社区一位资深从业者,给出了一些犀利的问题: 1.充值购买次数后会,如果小程序被封禁了,充值的金额是否可退款。 2.购买数量是否支持按量付费? 3.如果次数用完了,未购买新的次数,用户端的表现是什么? 该问题原文:https://developers.weixin.qq.com/community/develop/doc/00088205530478420fff168c85b000 其次的我的疑问: 1、能不能手机上付钱,很多用户不会用微信小程序管理后台,支付可更方便。 2、额度实时手机查看,能不能有预警机制,和统计,让购买者有个预期。 3、这个一份钱都没便宜 套餐个p?是不是对套餐有啥误会?产品要不在考虑下在发布? [图片] 4、文档这里,旧的可以用,那么旧的是走快速手机号额度还是实时的额度呢?不升级如何扣除额度问题怎么理解? https://developers.weixin.qq.com/community/develop/doc/000686660085681a21ff380c056400 除了上文你还有哪些困惑,欢迎评论交流
2023-06-28 - 手机号快速验证组件要收费了,那么小程序代开发平台怎么帮客户把这个费用支付上?
手机号快速验证组件要收费了,如果是自己开发的小程序该交钱交钱,但是我们这种代开发小程序平台,有很多的客户,他们不懂如何支付费用,我们怎么帮客户把这个费用支付了呢?难道是挨个登录每一个客户的小程序后台给他们充钱么?有谁知道如何解决。感谢大佬们回复。
2023-06-27 - 微信公众平台用户信息相关接口调整公告
微信公众平台为开发者提供了用户授权登录功能及相关接口,以便开发者为用户提供便捷的使用体验。 根据相关法律法规,为进一步规范开发者调用用户信息相关接口或功能,保障用户合法权益,平台将对用户信息相关功能及接口进行调整,具体如下: 一、相关接口调整: 1、小程序与小游戏获取用户信息相关接口:不再返回用户性别及地区信息; 能力参考:小程序用户信息 、小游戏用户信息; 2、 公众号用户信息获取接口:不再返回用户性别及地区信息; 能力参考:公众号用户信息; 3、 Open平台授权接口:包括App授权登录、公众号H5授权登录、网站扫码授权登录,不再返回用户性别及地区信息; 能力参考:移动应用、网站应用、第三方平台; 本次改造调整生效后,所述涉及字段返回值将按如下规则生效: [图片] *注:字段名均保持不变,小程序与小游戏获取用户信息接口“用户性别”字段名为gender;Open 平台授权接口“用户性别”字段名为 sex 二、相关功能调整: 1、 公众号个性化菜单功能:不再提供基于性别/地区设置个性化菜单的能力; 能力参考:个性化菜单接口; 2、公众号后台粉丝列表:粉丝列表等不再展示用户的性别信息; 涉及功能页面:公众平台帐号管理后台-用户管理/留言管理/赞赏/视频弹幕/消息; 3、服务号粉丝列表筛选:不再提供基于地区筛选粉丝的能力; 涉及功能页面:公众平台帐号管理后台-对话能力-客户管理。 平台预计10月20日完成调整,请开发者及时进行调整适配,避免影响相关服务及用户体验。 微信团队 2021年09月26日
2023-09-26 - 修改微信用户信息后,getUserInfo信息什么时候更新?
更新时间:2小时
2020-09-04 - 关于小程序使用webview标题栏动态展示问题开发实践
关于小程序使用webview标题栏动态展示问题开发实践 问题描述 使用webview开发的小程序,小程序的标题栏根据webview中H5的标题展示,随着H5 页面路由不同,页面标题展示不同 H5使用VUE开发 [图片] [图片] [图片] [图片] [图片] 问题总结 小程序可以正常展示H5 document 的title 实现 方式1 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>标题写这里</title> </head> <body> </body> </html> 方式2 document.title 备注 开发者工具展示时有问题,只展示首次页面的document的title,后面title变更不会体现到小程序的标题上来 真机正常的 参考文章 小程序web-view页面标题不会根据H5设置的标题做出改变?? - 微信开放社区 https://developers.weixin.qq.com/community/develop/doc/00048a2ab7457067af0deaeac56c00 关于小程序使用webview标题栏动态展示问题开发实践
2023-05-25 - webView报错the permission value is offline verifying
the permission value is offline verifying这个错误是因为config没有正确执行,或者是调用的JSAPI没有传入config的jsApiList参数中。建议按如下顺序检查: 确认config正确通过。 如果是在页面加载好时就调用了JSAPI,则必须写在wx.ready的回调中。 确认config的jsApiList参数包含了这个JSAPI。 可参考:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#%E9%99%84%E5%BD%951-JS-SDK%E4%BD%BF%E7%94%A8%E6%9D%83%E9%99%90%E7%AD%BE%E5%90%8D%E7%AE%97%E6%B3%95
2019-09-24 - 单页模式的浏览量会被统计到we分析吗?
小程序分享到朋友圈后的单页模式,当用户浏览阅读后,we分析里面会有统计吗?能按人去重吗
2023-02-16 - 社区每周 | 关于规范公众号模板消息的公告及上周问题反馈(3.20-3.24)
各位微信开发者: 以下是关于规范公众号模板消息的公告及上周我们在社区收到的问题反馈的处理进度,希望与大家一同打造更好的小程序生态! 关于规范公众号模板消息的公告 为了减少不恰当的模板消息对用户带来的困扰,平台对公众号模板消息进行如下调整: 1)去除自定义颜色、表情符号;(表情符号由替换为 “□” 改为直接去除) 2)去除尾部/备注内容; 3)去除首行内容。 [图片] 此措施不会影响模板消息下发,自 2023 年 5 月 4 日起,当公众号进行模板消息下发时,平台会自动去掉相关内容。 如有服务通知类模板需求,建议前往 微信公众平台,在「模板消息 > 模板库 > 类目模板库」新增对应模板。 详情可查看原公告:《关于规范公众号模板消息的公告》、《关于规范公众号模板消息的再次公告》 上周问题反馈与处理进度(3.13-3.17) 修复中的问题调用 chooseMedia 接口时,选择顺序和发送顺序出现不一致的问题 查看详情 调用 wx.onAudioInterruptionBegin 接口时,iOS 系统出现监听失败的问题 查看详情 微信团队 2023.04.03
2023-09-18 - 关于规范公众号模板消息的公告
公众号的模板消息能力旨在方便开发者为用户提供服务凭证通知。近期平台发现,部分公众号下发的模板消息涉及包括但不限于商品营销、服务推广等内容。且利用颜色/表情符号诱导用户查看、点击。上述行为损害了用户消息接收体验,给用户带来极大困扰,引起大量用户投诉。 违规案例1:消息主要为服务凭证通知内容,但尾部/备注字段下发与服务凭证无关的营销推广内容,并结合自定义颜色、emoji表情符号诱导用户点击。 [图片] 违规案例2:利用正常服务模板下发纯营销推广内容,实际内容与模板服务场景不一致,并结合自定义颜色、emoji表情符号诱导用户点击。 [图片] 为进一步规范模板消息下发行为,给用户提供更优质的消息接收体验。2023年3月30日起,平台将会进一步规范模板消息内容,规则如下: 1、限制部分消息内容展示(运营者可暂不修改,继续使用,发送时会自动过滤相关内容展示。) 1)尾部/备注字段不支持展示; 2)自定义颜色内容展示为默认颜色; 3)emoji表情符号展示为“□”。 [图片] 2、拦截纯营销类消息下发 对于纯为营销推广的模板消息,平台将会进行拦截。 3、加大对发送纯营销类消息帐号的限制力度 平台除了拦截纯营销类消息外,还会对发送该类消息的帐号采取限制添加模板、限制模板跳转等能力封禁措施。 以上规范生效时间如下: 即日起,平台会逐步落实纯营销类消息的拦截措施; 自2023年3月30日开始,去除尾部/备注内容、自定义颜色、表情符号。 模板消息为服务场景下产生的即时服务通知,希望开发者们合理、正确使用模板消息相关接口能力,优化内容展示形态,避免下发营销推广内容,共同维护模板消息良好的消息生态,共同提升用户模板消息相关的服务体验。
2023-09-18 - 公众号名字为新注册的公众号 改名总是不成功?
在注册公众号时名称已经输入 但是注册好了以后名称总是就变成了 新注册的公众号 然后需要改名字 需要上传资料审核 问了其他伙伴 他们都没有这种问题 是什么原因呢?
2022-09-24 - 朋友圈被折叠?别慌,4套话术模板和禁用词清单来了!
最近微信真的越来越严格了,群折叠之后是微信朋友圈折叠,完全不给发广告的活路。 其实朋友圈折叠功能早就有,但是这次升级可厉害了:之前都是针对文字内容的折叠,这次连图片也折叠! 更绝的是,如果你短时间发布多条广告信息,还可能被折叠收录到一个合集页,进一步减少曝光,来个「叠中叠」。 [图片] ▲图源网络 什么意思?比如你辛辛苦苦排了 6 、7 条产品的九宫格+文案,发到朋友圈就等收钱了,结果一发傻眼了,全被折叠成一条「XXX等 6 条内容」的文案,连一张图都不给你曝光!是不是气死? 还能怎么办?微信爸爸说了算,咱们改还不行! 要是你感觉自己的朋友圈内容也可能被折叠,接下来的内容你真的要看看,转发给做私域的伙伴一起学,别等朋友圈真被折叠才拍大腿后悔! 什么样的朋友圈 最可能被折叠? 直接上微信团队的官方标准: 「朋友圈是用户分享和关注朋友们生活点滴的空间,一直以来批量或高频次发送营销性信息的行为,存在侵扰用户安宁、减损用户朋友圈体验的问题,(因此)被较多用户投诉。」 划重点了朋友们:批量!高频次!发送营销性信息! 用人话再解释一遍: ① 多次发布重复或相似内容的用户,内容会被折叠! 比如你手上有大量的客服微信号,复制粘贴同样的带货素材到朋友圈发布,一旦同样的内容发布超过一定次数,折叠你没商量! ② 每天频繁发布广告的用户,内容会被折叠! 比如你在微信做一次促销活动,为了宣传短时间大量发布促销相关的朋友圈内容,也等着被折叠吧,而且要告诉你:一旦被盯上,后续即使降低发广告的频次或者发送生活内容,也同样会被折叠。 [图片] ▲生活动态的朋友圈也被折叠 如何避开折叠 安全发圈? 问题出现了,怎么解决? 我熬夜刷了一礼拜朋友圈,发现不被折叠的 3 种方法: ① 企微!企微!企微! 早就劝大家做私域一定要用企微,从来没像今天这么笃定过!还在用个微的商家抓紧转! 我观察了朋友圈所有的企微号,没发现一个朋友圈被折叠的。个微卷成团,企微稳如山! 比如下图,同一时间,同样是发送广告信息,某房产个人号的内容被折叠,而用了「推荐款」、「限时限量」等明显营销词汇的企微号反而没有被折叠。 [图片] 这绝对不是个例,同样的其他企微号,有一个算一个,朋友圈都没有被折叠的情况。 [图片] 这说明什么朋友们?朋友圈折叠功能对企微开了后门啊!你做私域不用企微,就是浪费官方倾斜的资源!个微收拾收拾,赶紧把流量导到企微,越快越好! 当然已经做企微的商家也别骄傲,企微朋友圈右上角有我不感兴趣按钮,乱发朋友圈打扰用户,被用户点了直接屏蔽 7 天,比折叠还惨。 [图片] ② 营销素材,用视频号发 你要是实在用不了企微,又觉得自己折叠风险很大,还有一招,发视频号! 我观察到目前折叠的朋友圈,都是文案+图片、或者图片的形式,但是视频号就很神奇,它不折叠! [图片] 凡是微信鼓励的就是我们要做的,朋友圈就别玩九宫格了,直接做成视频号分享,短视频带货不香吗?评论区还可以带小程序的短链,曝光转化直接一步到位。 ③ 4 套防折叠必杀话术模板 如果你不想转企微,也不想做视频,OK,我还有一招必杀给你。发文案+图片的朋友圈也能防折叠。 首先复盘一下折叠的逻辑是什么:批量或高频次发送营销性信息的行为。 硬广的套路已经玩不通了,朋友圈还可以来软的,广告没人爱看还容易被折叠,但是段子人人爱看,生活分享人人爱看啊,那就这么干,分享 4 种防折叠还能带货的朋友圈话术模板: 1、 生活分享型 这类内容玩的就是种草逻辑,用得好的商家真的太多了。 比如看到蛋糕烘焙行业的一个商家,朋友圈真的太生活化了,不看昵称还以为就是在减肥、在家做蛋糕的身边朋友。 [图片] 生活分享型的文案模板:生活经历描述+产品结合+感想。 比如你是母婴食品的商家,朋友圈可以是「夏天宝宝胃口总不好,太让人头疼了。灵机一动用XX麦片给他做了凉爽的水果粥,孩子一口气吃完还要一碗,我太机智了哈哈。」 2、 场景描述 这类文案的重点是要告诉用户:用了你的产品,生活到底会有啥变化? 比如看到一个房产人的朋友圈很有意思: 通篇没有提到买房,但是营造了在这里生活的惬意场景。 [图片] 这类内容完全可以复制,比如酒类商家描述用户劳累一天后,躺在沙发上微醺的场景、或者蛋糕商家描述用户早起后给自己做一顿精致早餐的场景,通过场景化的描述,让产品融入其中种草给用户。 3、 干货内容 传递有价值的信息永远不会过时,干货内容朋友圈不用多讲了。 比如做母婴品牌的德轩母婴,创始人每天会在朋友圈发布育儿相关的干货知识,以及用户咨询的解答截图,潜移默化树立起专家的人设,让用户有问题第一时间就能想到咨询她,评论区要是再带上干货相关的小程序商品链接,完美。 [图片] 4、 互动话题 除以上的内容以外,最后一种模板就是互动讨论。 举个例子,拼图商家图益会把拼图主题和朋友圈话题巧妙的结合起来,晒美食主题的拼图朋友圈,文案配「你的火锅必点菜是什么」来引发粉丝讨论,就是不错的互动方式。 如果你是美妆商家,互动话题可以是「你包里必备的化妆品是什么?」,如果是知识付费商家,可以是「你最近一次看书是什么时候?」等等,结合图片软性植入做营销。 [图片] 朋友圈已经被折叠 那就做好这两点 如果你朋友圈已经被折叠了,那上面的方法对你用处都不大了,我只强调两点,亡羊补牢。 ① 做好一句话营销 被折叠的内容只展示前 12 个字,最后的曝光机会了,你得把握好! 一定把朋友圈的精华都集中在前面,比如「早春少女感爆款穿搭合集」、「熬夜人群 10 种护肝食品」等,把利益点集中在前面讲解,吸引用户点开看。 ② 打造朋友圈橱窗 朋友圈被折叠了,还有朋友圈主页可以做营销。 比如看过一个商家每次朋友圈只发一张图不发文案,连续发 9 次把自己的朋友圈主页排成橱窗的样式,如下图: [图片] 用户点进个人主页看朋友圈和逛商城一样,排版样式相当美观,其实也不失为一种不错的营销方式,被折叠也不怕朋友圈没用了。 最后再分享下我总结的折叠高风险关键词: 1、 和营销直接相关的词汇:秒杀、特价、红包、顾客、价格、打折、包邮、买家、优惠、团购、代购、下单等等。 2、 各行业的高频词:蛋糕、好房、女装、口红等,也要注意不能在朋友圈频繁出现。
2022-02-24 - 获取用户信息
背景 我们发现大部分小程序都会使用 [代码]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-09-25 - (12)微信同声传译插件
我 微信界的同传扛把子! 识别你的语音? Of course! 我就是你的知己! 翻译你的中文? No problem! 我的英语好着呢! 听懂她的英文? So easy! 你想听我就敢译! What’s more! 我还能读给你听! 如何快速实现语音转文字、文本翻译、语音合成等等能力? 不用着急,让微信同声传译插件来帮你! 今天我们的小故事想和大家分享微信同声传译插件的故事。 1 应用场景 大家好,我叫“微信同声传译”插件,是由微信智聆语音团队、微信翻译团队与公众平台联合推出的同传开放接口,可通过语音转文字、文本翻译、语音合成接口,为开发者赋能。下面介绍我的应用场景: 场景1: 英语口语、听力双管齐下,没有外教也能学好英语! 把我放在小程序里,我既可以将口语转为文字,也可以帮助用户判断发音是否标准纯正,是最佳听众和英语学习道路上的良师益友; 场景2: 出国旅游,英语蹩脚怎么办? 这时我可以应用到翻译小程序里,说中文,译英文,再也不怕出国交流难。 场景3: 看剧时想要吐槽!可是手里有零食,打字不方便怎么办? 只要在小程序里有我,用户就可以按住按钮说话,语音转文字,帮你发送弹幕! [图片] 微信同声传译插件目前开放了以下三个接口——语音识别接口、语音合成接口、文本翻译接口。 通过这个插件,插件使用者可以轻松实现语音读取识别、文本转语音和中英文文本转换,避免这类需求的重复开发工作。 [图片] 2 如何使用插件? 插件接入流程 >>> 开发者在小程序插件中搜索“同声传译”、“语音识别”可以搜索到微信同声传译,添加使用后按使用文档接入使用,同时小程序开发者还可通过 https://github.com/Tencent/Face2FaceTranslator 查看我们开源的插件使用案例。 [图片] 1 登录小程序后台管理,进入“设置”; [图片] 2 点击第三方服务; [图片] 3 点击添加插件; [图片] 4 输入“同声传译”或者“语音识别”、“翻译”等搜索关键字搜索插件并添加,同时可以点击“查看详情”,获取插件的详细介绍、接入说明和开发文档。 [图片] 3 插件简介 1 插件名称 微信同声传译 2 插件AppID wx069ba97219f66d99 3 插件使用指南 微信同声传译插件设计之初,采用和小程序官方流式录音API、网络请求API类似的javascript调用接口,小程序开发者可以快速接入使用此插件。小程序“面对面翻译”使用了这些接口,并且已经开源 [开源地址],便于开发者快速开发。 [图片] (面对面翻译小程序) 具体使用接口可以查看微信同声传译插件使用文档。
2018-08-17 - web-view打开嵌入腾讯视频的页面提示iframe不支持引用非业务域名
现在的策略是允许公众号文章内嵌iframe,对于第三方的iframe会检查业务域名。可理解为: 1、打开公众号文章,文章内嵌iframe含有腾讯视频这种情况就是支持的。 2、打开开发者自己的业务域名,网页内嵌iframe含有腾讯视频这种情况就是不支持的。
2019-11-20 - 小程序服务商助手的自述
相信每位小程序服务商的同学,都遇过这些问题: “小程序需要紧急上线,提审后每20分钟看一次消息,却收到了驳回通知。” “提审不通过,我应该给小程序选什么类目?” “本月的提审额度用完了,想增加当月的提审额度,我还有机会吗?” “刚提审的几千个小程序出bug了,开发哥哥不在身边怎么办?” ...... 当遇到这些问题时,找内部技术同学要排期,因为不熟悉平台规则,在反复的信息查询和文字沟通中,花了大量的时间,问题也还没解决。 为了解决服务商的“痛点”,平台把我(小程序服务商助手)推出,服务商可以在小程序内查询很多实用的数据和功能:查看审核信息、加急次数、服务商的新规则新能力、查找小程序的数据和功能、咨询平台客服等等。 虽然我已经上线了半年,用过的服务商都说方便。但还是有不少服务商同学不知道我的存在,所以借着这个机会,让我来好好向大家介绍一下我的各个功能模块吧。 业务实时晴雨表,竞争风险指向标 [首页业务能力看板]使用了六项维度辅助服务商概览业务状况,每项维度都有对应的打分和评价细则,服务商可以全方位评估自己的业务现状,辅助定位发展策略。各项星级指数越高,意味着服务商对应的业务能力越好。 [图片] 精细运营资源,数据驱动增长 [数据页]分别为状态概览,调用次数,授权关系和类目占比。覆盖了服务商分析旗下小程序的最重要的维度,服务商可以通过手机,清晰的查看、分析小程序的表现,从而精细化运营,合理分配技术服务资源。 [图片] 移动管理百宝箱,合作沟通驱动轮 [我的主页]是一个助手小程序的核心管理功能集成页,功能覆盖服务商成员信息管理,小程序审核业务管理,公告通知和咨询反馈渠道,是目前服务商助手小程序使用频率最高的页面。 [图片] 【成员管理】:权限管理&成员更新 [成员管理]主要管理有权限查看和办理业务的成员名单,管理员默认为服务商open账号的管理员,通过微信号添加新的管理员,成为了开放平台账号成员后,即可进入“服务商助手”小程序,使用小程序的业务功能。 [图片] 【审核管理】:审核资源管家&加急撤回功能 [审核管理功能]可以满足服务商运营管理人员对小程序代码审核业务的核心管理需求,包括审核资源查看和管理、小程序一键加急/撤回操作。 1. 审核资源查看和管理: 包括服务商审核资源使用量/余量(本月提审、加急quota分配情况及对应剩余次数),相关审核进度/结果数据展示,审核队列明细和查询功能,历史审核合格率和驳回原因分布等。 注意:审核资源受服务商提审质量和线上表现影响,请服务商们务必做好小程序内容把控,减少提审驳回和线上违规情况。 [图片] 进入审核队列,可以浏览审核中、审核冻结、审核驳回的小程序明细。同时可以按小程序名称、appid、模板id检索服务商小程序的审核状态和结果。 [图片] 2. 加急/撤回功能 小程序一键加急后,该审核单将以最高优先级安排审核,满足服务商特殊场景需要快速被审核的需求;撤回后,可以继续修改小程序后再次提审,同时可以对队列中的某个或者多个分别或者批量进行加急/撤回审核的操作。 [图片] 更多审核专区的知识,可以从页面底部的《审核专区使用手册》去了解。 智能和人工客服系统 [客服咨询]是服务商对平台最直接最便利的沟通反馈渠道。 一般的规则类知识类问题,客服会提供丰富的运营知识库给到服务商去查阅,较为复杂的流程功能或技术类问题,则通过工作日早9点到下午6点在线的人工客服来对接,流转到内部处理。 [图片] 重要消息公告牌 [公告栏]是平台向服务商同步重要信息的首要渠道。 很多政策变更、规则更新、重大活动都将通过小程序内的红点和微信模板消息提醒告知目标服务商。服务商可以第一时间掌握最新的平台信息,不再慢人一步。 [图片] 除了以上已有的功能,平台还在下半年为广大服务商同学准备了更多方便的功能,方便服务商同学清楚自己在平台的表现和权益、便捷管理自己服务的小程序、了解最新的平台运营规则和行业知识等等,我们一起敬请期待吧。 同时,欢迎广大服务商同学前来体验「小程序服务商助手」,了解自己的业务数据和表现。如对“我”有任何问题或者服务商运营的意见,可以通过客服通道和公告专区反馈。平台将根据大家的意见建议,不断完善,让我成为大家最好用的服务商管理小助手。以后,请多多指教。
2020-07-15 - 一个营业执照可以注册多少个开放平台账号?
50个。
2019-12-27 - 服务商政策|流程|能力|接口变更通知(2020.11.16)
一、小程序服务商助手监管专区上线通知平台在“小程序服务商助手”小程序新增了 【监管专区】 ,包括服务商旗下小程序违规数据与违规队列展示,支持服务商快速查询小程序违规与申诉情况。详情请参考: https://developers.weixin.qq.com/community/minihome/doc/0002026140063083364baae0250001 二、公众号、小程序回调出口IP变更通知为了提高公众号、小程序回调出口网络质量,微信callback IP地址计划灰度切换到以下腾讯云网络出口网段,详情请参考: https://developers.weixin.qq.com/community/develop/doc/0006c02b1403a0dc693b4132c51001?blockType=1 三、微信卡券将不再支持新申请开通使用“优惠券”功能因“微信卡券>优惠券”产品能力未来将统一升级为“微信支付优惠券”,12月10日0点起,“微信卡券>优惠券”功能将不再支持新商户开通,该功能后续将陆续下线。其他微信卡券功能暂无变化。详情请参考: https://developers.weixin.qq.com/community/develop/doc/000a8aeccf45284fc83bc22d251c01?blockType=1 四、服务平台开放入驻及原有服务升级通知为了更好地为用户提供服务,服务平台在近期进行了改版升级。第三方服务商可在服务平台上传对应行业的小程序开发服务,通过审核后即可进行服务展示。详情请参考: https://developers.weixin.qq.com/community/develop/doc/0004a24516cfd01ec02baefae51401 五、小程序类目资质更新[图片] 备注:绿色字体为小程序类目的更新调整,详情请参考小程序开放的服务类目 第三方快速创建的小程序可选择的类目参考第三方平台-快速创建小程序接口-类目参考表 https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Mini_Programs/Fast_Registration_Interface_document.html
2020-11-16 - 小程序开发服务商入驻微信服务平台指引攻略
概述欢迎申请成为微信小程序开发服务商:微信小程序开发服务是微信开放平台第三方服务商的一项服务能力。 成为微信小程序开发服务商你可以创建小程序代开发服务并发布到服务平台。 商家可在服务平台小程序开发专区选购你的服务,并通过授权的方式获得你所提供的服务。 为创建SaaS小程序代开发服务你需完成以下步骤:1. 创建第三方平台 2. 登录服务平台 3. 创建小程序开发服务 内容发布并通过审核后,即可通过小程序开发服务专区向用户提供服务。 审核内容将包括:服务商在所选行业的服务能力、服务标题、服务简介、服务头图、服务效果图,服务功能和套餐的完整性,服务价格的合理性。 入驻基本标准(1)已在微信开放平台通过开发者资质认证,成为微信第三方服务商; (2)具备微信小程序开发能力和服务经验 (入驻服务所选行业下,活跃小程序案例不少于5个); (3)服务商半年内无违规记录; (4)服务商可在对应行业提供完整的小程序行业解决方案 (对应行业所提交的案例展示小程序需具备平台规定的核心场景之一)。 *详细服务上传审核标准 服务创建规则1. 单个服务对应单个行业,如服务商服务多个行业,则需分别上传多个服务; 2. 单个行业对应上传的服务内容需关联该行业解决方案,不得出现无关/其他行业的内容。 接入流程:一、创建第三方平台(如有可跳过该步骤)第三方平台是服务商创建服务并获取授权的基础体系。第三方平台的申请和上线流程参照第三方平台的申请和上线流程。 注:注册第三方流程根据开发模式选择平台型服务商或定制化服务商 平台型服务商注册说明 定制化服务商说明文档 *服务商需通过第三方平台账号与小程序建立授权关系,并满足入驻标准方可上架服务 二、登录服务平台1. 使用第三方平台管理员微信登陆服务平台(该微信号需同时为与第三方企业主体一致的小程序管理员) [图片] 2. 若无企业主页,点击“创建新的企业主页” 若有企业主页,则请查看步骤(三) [图片] 3. 若无可创建的企业主页,进入微信公众平台“创建新的企业小程序”(企业小程序创建流程),创建成功后,再回到服务平台继续创建企业主页。 [图片] 4. 创建企业主页:选择以某个公司为主体的小程序(每个主体只能创建一个企业主页) [图片] [图片] 5. 选择企业主页的类型 [图片] 6. 确认企业主页的主体 [图片] 7. 完善企业资料并提交 [图片] 三、创建小程序开发服务1. 点击右上角头像,进入“我的主页” [图片] 2. 创建服务,选择“小程序开发” [图片] 3. 填写信息并提交 [图片] 4. 提交审核 在“我的主页”点击“提交审核”,审核通过后服务将展示在服务平台 审核需时1-3个工作日,服务商可在「我的主页」服务列表状态栏查看当前审核状态 [图片] 5. 服务上架
2020-12-02 - 第三方开放平台 ,全网发布提示:暂时没有测试资源,请稍等一段时间再提交?
因为有其他第三方平台提交了检测,测试资源被占用了,过段时间再尝试提交即可。
2019-12-27 - 服务商助手审核专区使用手册
本月可提审次数 显示服务商本月剩余可提审次数和分配的总quota值,每月1号更新 本月可加急次数 显示服务商本月剩余可加急次数和分配的总加急次数,每月1号更新 以上审核资源受服务商线上表现(小程序内容安全、活跃度、平台配合度)影响,各服务商务必做好小程序商户提供内容素材的管理,减少提审驳回情况和线上违规情况 更新时间为1号早上6点,0-6点显示的是上一月quota,6点后更新为本月 审核数据 服务商可以查看近7天、本月、上月的每日审核量、合格率和期间平均合格率、驳回原因分布 平台合格率为所选择时间周期内的合格率,合格率为重要运营指标,对服务商的资源分配有较强影响,请注意提升 一期合格率存在一定的误差,仅供参考,后续会不断完善,提升这里的数据准确度 审核队列 可以对当前审核队列中的各个审核单进行管理 审核中:提审后等待审核的单,审核时效一般为7天内,表现良好的服务商有更快审核速度 审核冻结:大批量提审未通过预检,被延后审核,建议服务商基于预检不通过原因撤回整改后再次提审,审核时效>15-30个工作日,冻结不及时撤回将被平台追加处罚 审核驳回:近7天被驳回的审核单 注意,审核队列只保留最近一次审核状态的单,如近7天被驳回的单再次提审,将从审核驳回队列中消失,进入审核中队列或审核冻结队列 审核队列支持按小程序名称,小程序appid,模板id进行搜索 搜索时,将在全部审核队列中搜索。小程序名搜索的优先级高于模板id,如”幸运58”的小程序和模板id为5828的100个小程序同时存在时,搜索58将只显示“幸运58”,搜索582才会显示模板5828 appid只支持精确匹配,名称和模板id支持模糊匹配 搜索模板id时,可以按全部单和只看审核冻结单进行筛选,方便进行批量操作 目前一页可展示100个审核单,如需查看更多,请点击页面底部的“加载更多审核单”,加载第二页,以此类推 小程序加急 服务商对于审核中和审核冻结的小程序可以进行加急操作,加急后,该审核单将优先安排审核,原本被冻结的状态也会解除 加急额度属于平台稀有资源,请谨慎使用,严禁任何形式的转卖转赠,一经发现将对quota和加急次数进行一年的处罚 单个加急:可以在小程序的明细页点击加急按钮进行 多个加急:可以点击审核队列的加急按钮,选择多个小程序进行加急 不可加急的类型:需要被报备网信办等机构的审核,无法加急,提示加急失败,加急额度返还 小程序撤回 当发现bug,或者预检不通过导致大批小程序被冻结时,服务商可以操作撤回这批小程序,整改后再次提审。 对大批量问题提审单撤回有助于提升服务商合格率,降低对平台资源消耗。预检不通过的冻结单未及时撤回将会被处罚 单个撤回:可以在小程序的明细页点击撤回按钮进行 批量撤回:可以点击审核队列的撤销审核按钮,选择多个小程序进行撤回,批量操作时,可以基于模板去筛选,可以按照只看冻结去筛选 推荐操作流程:当服务商需要对某个模板id,如5234模板id中全部提审单或全部冻结审核单进行撤回时,建议点击撤销审核按钮,进入选择审核单页面,搜索模板5234,在进入的模板页,点击筛选选项(全部/只看审核冻结),然后点击全选,可以看到本次要撤回的小程序个数,最后点击确定 批量撤回在单数较多时,将生成一个后台异步任务执行,执行结束后将批量撤回结果反馈回来,大批量的撤回可能要等待较久时间 不可撤回的类型: 1,单个小程序每月撤回次数上限为10次,超过时不可撤回 2,已经被其他渠道(如API接口)撤回的单,不可重复撤回 3,其他 客服专区 本次审核专区将为部分服务商开放客服专区入口,客服专区包括机器人客服为服务商提供常用知识库,以及人工客服解决服务商具体问题 开放范围:基于服务商每月quota排名进行分配,一期开放100个,后续将不断放开,直至覆盖全部服务商 客服工作时间:工作日:9:00-12:00,14:00-18:00,特殊时期以平台公告为准 客服问题范围:小程序运营规则、服务商运营政策、提审/审核/线上处罚常见问题咨询、服务商助手体验bug问题等 使用过程中任何问题都可以通过客服入口留言,如无客服入口可以通过开放社区进行反馈,我们将以帮助服务商提高获取信息和办理业务的效率为核心目标,不断完善服务商助手小程序。 最后更新时间:2020年3月5号
2020-11-27 - 第三方服务商提审限额机制优化说明
第三方服务商按月按提审表现分配提审限额(quota)的机制上线以来,服务商对提审质量的重视度不断上升,大盘提审合格率也不断提升。为了保障服务商提审效率,携手与服务商共同发展,平台近期将完善quota机制,更科学合理地分配服务商提审额度。 一、提审限额分配机制优化 服务商表现排名,会综合服务商的以下表现进行评价。同时平台考察服务商表现维度更全面(11月在服务商助手小程序的“表现与权益”专区上线) 月quota分配优化前:月quota基于近3月提审单数、服务商表现排名分配月quota分配优化后:月quota基于近6月提审单数、服务商表现排名分配新服务商支持:新第三方服务商每月最少可获得50个quota。*新第三方服务商定义:自上线之日起一年内称之为新第三方服务商 安全:提审质量、线上违规情况、低风险小程序数量、高风险小程序数量等 规模:授权小程序个数、主体个数、月新增小程序个数等 活跃:高活跃小程序个数及占比、不活跃小程序个数及占比 支付:支付金额、笔数、支付活跃小程序个数及占比 体验:体验差小程序个数及占比 [图片] 二、quota自助调额范围优化: 优化前:服务商每次申请临时额度为月初分配提审额度的15%优化后:月初分配的quota作为调额范围的划分标准,具体调整范围如下图:[图片] 特别注意: 服务商在可选范围内按需求自助调额,自助调整次数以及调额范围将基于提审合格率、quota消耗率等服务商表现分配,分配规则如下: 自然年内若存在超过三个月(不含)提审合格率低于80%,将无法申请临时调额quota消耗率作为第三方服务商画像分值的一个重要参考项,请按需进行quota调额申请,若quota消耗率存在超过三个月(不含)低于60%,服务商的画像分值排序将会降低,影响后续审核的优先级以及quota等权益分配。quota消耗率指当月quota使用值/(当月quota分配值+临时申请quota总值)*100% [图片] 平台将持续为服务商提供高效快捷审核服务,若因业务发展等情况存在超额提审需求的服务商还可以通过“小程序服务商助手-我的-咨询反馈”联系人工客服进行申请更多临时额度,客服工作时间:工作日:9:00-12:00,14:00-18:00,特殊时期以平台公告为准。 临时额度人工申请周期为1-3天,请服务商提前规划好提审额度的需求。 微信开放平台运营团队 2020.11.4
2022-06-01 - 小程序内怎么调试web-view?
开发工具上在web-view页面内点击鼠标右键有个调试的选项 需要在真机上调试需要自行引入vconsole:https://github.com/Tencent/vConsole/blob/dev/README_CN.md
2019-10-09 - 获取用户信息方案介绍
背景 小程序一个比较重要的能力就是获取用户信息,也就是使用 [代码]wx.getUserInfo[代码] 接口。我们发现几乎所有的小程序都会调用这个接口。虽然我们在设计文档上有提出最好的设计是在真正要用户信息的情况下才去获取用户信息,不过很多开发者并没有按照我们的期望去做,导致用户在使用的时候有很多困扰。 归结起来有几点: 开发者在首页直接调用 [代码]wx.getUserInfo[代码] 进行授权,弹框有会使得一部分用户放弃小程序的使用。 开发者没有处理用户拒绝弹框的情况,有部分小程序强制要求用户授权头像昵称等信息才能继续使用小程序。 用户没有很好的方式重新授权,虽然在前几个版本我们增加了[代码]设置[代码]页面可以让用户选择重新授权,但是操作还是不够便捷。 开发者希望进到首页就获取到用户的[代码]unionId[代码],以便和之前已经关注了公众号的用户画像关联起来。 开发者默认将 [代码]wx.login[代码] 和 [代码]wx.getUserInfo[代码] 绑定使用,这个是由于我们一开始的设计缺陷和实例代码导致: [代码]getUserInfo[代码]必须通过[代码]wx.login[代码] 在后台生成[代码]session_key[代码] 后才能调用。 为了解决以上几点,我们更新了三个能力: 使用组件来获取用户信息,用户拒绝授权后也可以重新弹窗再次授权 若用户满足一定条件(下文有详细介绍),则可以用[代码]wx.login[代码] 获取到的code直接换到[代码]unionId[代码] [代码]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[代码] 不同之处在于: API [代码]wx.getUserInfo[代码] 只会弹一次框,用户拒绝授权之后,再次调用将不会弹框 组件 [代码][代码][代码][代码] 由于是用户主动触发,不受弹框次数限制,只要用户没有授权,都会再次弹框 直接获取unionId考虑很多场景下,业务方申请userinfo授权主要为了获取unionid。我们鼓励开发者在不骚扰用户的情况下合理获得unionid,而仅在必要时才向用户弹窗申请使用昵称头像。为此,凡使用“获取用户信息组件”获取用户昵称头像的小程序,在满足以下全部条件时,将可以静默获得unionid。 在微信开放平台下存在同主体的App、公众号、小程序。 用户关注了某个相同主体公众号,或曾经在某个相同主体App、公众号上进行过微信登录授权。 getUserInfo 和 login很多开发者会把login和getUserInfo捆绑调用当成登录使用,其实login已经可以完成登录,可以建立账号体系了,getUserInfo只是获取额外的用户信息。 在login获取到code,然后发送到开发者后端,开发者后端再通过接口去微信后端换取到openid和sessionKey(并且现在会将unionid也一并返回)之后,然后把3rd_session返回给前端,就已经完成登录行为。而login行为是静默,不必授权的,不会对用户造成骚扰。 getUserInfo只是为了提供更优质的服务而存在,比如展示头像昵称,判断性别,通过unionId和其他公众号上已有的用户画像结合起来提供历史数据。所以不必在刚刚进入小程序的时候就强制要求授权。 推荐使用方法调用[代码]wx.login[代码] 获取[代码]code[代码],然后从微信后端换取到[代码]sessionKey[代码],用于解密[代码]getUserInfo[代码]返回的敏感数据。 使用[代码]wx.getSetting[代码] 获取用户的授权情况 如果用户已经授权,直接调用 API [代码]wx.getUserInfo[代码] 获取用户最新的信息 用户未授权,在界面中显示一个按钮提示用户登入,当用户点击并授权后就获取到用户的最新信息。 获取到用户数据后可以进行展示或者发送给自己的后端。 文档中的quickStart已经更新 特别注意为了给用户提供更好的小程序环境,我们约定在一段时间后(具体时间会做通知),若还出现以下情况(包括但不限于),将无法通过审核 初次打开小程序就弹框授权用户信息 未处理用户拒绝授权的情况 强制要求用户授权 已经上线的小程序不会受到影响。 FAQ Q: 除了 UserInfo 呢,比如说位置信息 --- ’风の诺言 . A: 其他授权信息不像用户信息那么高频繁,也基本是在使用时候才申请授权,所以没有同 UserInfo 一起给出。我们会先看看 UserInfo 的使用情况再结合具体场景我们会给出相应的方案 Q: 后台要维护用户信息 --- Azleal 我们的小程序业务是功能都需要授权才能使用的(也就是必须拿到unionid获取用户信息) --- elemeNT 我在小程序与服务号的数据需要互通,通过unionId来确定用户的唯一性,如果在用户进入小程序后不强制他授权,单凭一个openid来存储他的用户数据,在用户下次从服务号进入时。不就会产生重复数据吗?就没做到数据互通了 --- ﺭ并向你吐了趴口水ﺭ五年. 另外看到官方提到 要强制推行,我想说我们目前所有用户是通过unionid注册的。那么这些用户就不得不使用 openid重新登录 、注册一遍。更重要的是,之前他们的相关数据都会对应不上(因为你们也不允许强制用户登录授权) --- 羊毛 现在这种方案,不能满足我们的需求,我们的小程序,必须一进入就要获取他的信息,然后加载他的数据; --- 韩文 A: 调用`wx.login`已经可以获取到用户的登录态,已经可以做用户账号的管理。 UserInfo 中带的 UnionId 是额外的信息,没有它完全可以完成登录 对于需要和开发平台绑定的业务进行数据互通的情况,一个新用户进来没有互通数据的情况下也是可以体验到所有业务,那么对于没有授权unionId的用户,可以将其当成是新用户,当真正授权unionId之后再做绑定完全是可以的 Q: 我需要确保用户的唯一性,这样就必须取unionID,否则用户删除了小程序,或者换了设备, 下次再进来这个小程序,该用什么来区分是上次来过的用户呢?? --- WEI+ A: 如果你本身没有其他公众号、App、小程序,那么也就没必要拿到unionid,因为unionid是打通你在开放平台下所有应用的标识 如果只有一个小程序,用 openid 足以, openid 是一个用户对于一个小程序的标识,永远不变 Q: wx.getUserInfo 是网络请求,如果使用了 open-type = "getUserInfo",是否每次点击都会调接口? --- SouthernBox A: 是的,open-type="getUserInfo" 的作用以及内部实现基本和 wx.getUserInfo 一样 区别是一个开发者主动(拒绝一次不再弹窗),一个是用户主动(拒绝任意次都可以重新弹窗) Q: 比如有一个创建按钮,用户点击一次授权了,我已经获取到用户信息,再次点击就没必要再调用 getUserInfo 去网络请求了。 --- SouthernBox A: 可以参考文中 quickStart 的做法,如果已经授权了,那就可以把按钮隐藏,之后的授权直接用API wx.getUserInfo 调用(因为已经授权,所以也不会弹窗),用户也不会再点了 Q: 小程序是不是必须要用微信自带的授权才可以登录 ,能否不使用授权方式登录,用自己系统的api接口数据实现?这个会不会涉及到审核不过的问题??麻烦解答一下 谢谢了。 --- WEI+ A: 自己做登录不会涉及到审核问题。 不过不建议在没有原有账号体系的情况下让用户在小程序内注册,过重的行为会损失用户。 Q: 在小程序中有一个"我的"页面,这是属于会员页,如果用户要进入这个页面就必须授权。交互方式就是在用户未授权情况下整个页面只显示一个授权获取用户信息的button 按钮,这个需要用户自己去触发,算不算强制授权? --- ﺭ并向你吐了趴口水ﺭ五年. A: 强制授权是说如果用户如果不授权基本信息,连最基础的浏览功能都不提供(当然这个也是要分具体的业务场景,不会限制得太死板) 可以有更好的交互,参考下主流App,在未登录的时候点击【我的】页面,也不会直接要求登录,而是展示了一定的页面结构,同时给一个登录按钮(例如【携程】【京东】等),之后再在这个页面做操作的话可以弹一个登录页面或按钮提示用户登录是完全可以的。 上述所说的登录只是用户感知上的登录,从业务逻辑上用户其实在 wx.login 的时候已经完成登录了。 Q: 看了很多评论,有些人还是不知道为什么官方要这样做,我作为一个商家角度来说下。 --- Mr.J 1. 比如我们要做一些户外推广的二唯码,用户只看到了你的图片宣传单,扫描二唯码一打开就提示“需要获取你的个人信息,您是否允许”,你不要当自己是开发者当自己是一个正常人,看到这个提示我相信很多人的第一反应就是拒绝。如果第一步已经把你拒之门外,谈何营销? 2. 没有小程序之前,我们在公众号有很多用户,都绑定了unionid,有小程序之后我们考虑怎么让用户接受小程序,可以静默登录我觉得非常好,从公众号过来的用户可以直接就登录了,没有任何提示,完美的对接,这是一个很好的体验。 A: 说得很好,我们的这些改造不仅是为了开发者,同时也是为了这个生态下的用户考虑。希望开发者们也能站在用户的角度去思考怎么做一个产品。 Q: 我不明白为什么login 给多个unionid 为什么不行? unionid也不能算是个人信息吧,给多个unionid可以更方便开发者,而且很多情况下就不用调用getUserInfo了 --- candyTong 我们提个建议,能否直接开放unionid呢?这样也许会有许多小程序不需要再弹窗了。既一定程度保障了用户体验,也照顾到了我们开发者的体验。 --- 羊毛 A: 如果直接开放了unionid,就会出现这种情况:当你作为一个用户进入一个小程序,这个小程序并没要求你授权就直接把你的头像昵称显示出来(它之前把unionId对应的头像昵称都存了下来),但是这个小程序主体(open平台主体和公众平台主体并不相同)相关的任何一个应用你从来没用过,你会不会觉得很奇怪并且很不舒服,觉得自己在微信内的用户信息没有丝毫的保障? Q: 那有推荐的比较好的例子么?对于必须使用用户头像、昵称这些信息的小程序而言 --- 亚里士朱德 A: 首先,没有什么逻辑是一定要使用用户的头像、昵称才能work的。对于这个case,完全可以先用默认头像、匿名昵称先做替代,用户点击默认头像后就可以弹出授权信息,非常的水到渠成。 Q: 之前看了这个帖子一直在思考,如果是一进去需要回去用户的地理位置信息显示到地图上的呢?这样算不算是一进去就弹窗授权获取用户信息? --- 吴俊绩🤔 A: 地图的情况和获取用户信息不同,我们目前还没对地图的授权请求有所调整。当前不受上述策略的影响 Q: 对于开发者而言,小程序与公众号是同级的,只是不同的入口 但是这样的设计,公众号与小程序成了主从关系咯 --- log琥珀① A: 并无什么主从关系,只是多一个渠道让开发者可以更方便的获取到已经是该主体下用户的unionId
2017-08-07 - 小程序代码包总包上限提升至12M、新增内置扩展库支持
小程序代码包总包上限提升至12M为了让开发者开发出功能更丰富的小程序,小程序或小游戏代码包总包上限由8M提升到12M。建议开发者优化小程序性能并将每个分包做得尽可能小,以便提升用户的打开速度,优化用户体验。 开发者可登录开发者工具,在详情-项目配置中点击刷新按钮,获取最新的配置信息。 [图片] 内置扩展库支持扩展库是将官方提供的一系列扩展能力打包而成的一些类库。为方便开发者使用,我们在最新的nightly版开发者工具支持了内置扩展库,开发者只需在app.json配置文件声明引用指定扩展库即可,无需自行引入相关 npm 包且不计入小程序代码包大小,目前支持了kbone和WeUI两种扩展库,更多详情请参考文档。 欢迎各位开发者接入,如有问题,可在本帖下方留言或在社区发帖反馈。 微信团队 2019.11.22
2019-11-22 - 微信API服务器IP地址更新公告
各位开发者: 由于内部网络设备裁撤,api.weixin.qq.com(sz/hk.api.weixin.qq.com)需要更新部分接入点IP,详细如下: 深圳移动vip变更:183.232.103.145;120.198.199.239 -> 112.60.0.226;112.60.0.235 深圳电信vip变更:183.61.49.149 -> 183.3.234.152 深圳联通vip变更:58.251.61.149 -> 58.251.80.204 深圳cap vip变更:182.254.106.119 -> 121.51.166.37 香港vip变更:203.205.147.177;103.7.30.34 -> 203.205.239.94;203.205.239.82;103.7.30.16 此次变更不影响直接使用DNS解析微信域名的业务,如有业务仍在尝试旧的接入IP(通过代码写死或防火墙配置),请及时更新至新的接入IP,裁撤截止日期2019年10月17日,届时旧IP会停止服务,返回指引文档信息。 请不要通过配置hosts的方式访问api.weixin.qq.com,以免微信侧后续更新出口IP时出现接口访问失败。 特殊情况如配置防火墙等,请改造成通过接口获取api.weixin.qq.com当前所有出口IP(同一时间不会所有IP都变更,请尝试可用IP),并更新至hosts或防火墙等。 获取api.weixin.qq.com当前所有接入IP请参考官方文档。 微信团队 2019.09.24
2019-09-24 - 小程序模板消息能力调整通知
小程序模板消息能力在帮助小程序实现服务闭环的同时,也存在一些问题,如: 1. 部分开发者在用户无预期或未进行服务的情况下发送与用户无关的消息,对用户产生了骚扰; 2. 模板消息需在用户访问小程序后的 7 天内下发,不能满足部分业务的时间要求。 为提升小程序模板消息能力的使用体验,我们对模板消息的下发条件进行了调整,由用户自主订阅所需消息。 一次性订阅消息 一次性订阅消息用于解决用户使用小程序后,后续服务环节的通知问题。用户自主订阅后,开发者可不限时间地下发一条对应的服务消息;每条消息可单独订阅或退订。 [图片] (一次性订阅示例) 长期性订阅消息 一次性订阅消息可满足小程序的大部分服务场景需求,但线下公共服务领域存在一次性订阅无法满足的场景,如航班延误,需根据航班实时动态来多次发送消息提醒。为便于服务,我们提供了长期性订阅消息,用户订阅一次后,开发者可长期下发多条消息。 目前长期性订阅消息仅向政务民生、医疗、交通、金融、教育等线下公共服务开放,后期将逐步支持到其他线下公共服务业务。 调整计划 小程序订阅消息接口上线后,原先的模板消息接口将停止使用,详情如下: 1. 开发者可登录小程序管理后台开启订阅消息功能,接口开发可参考文档:《小程序订阅消息》 2. 开发者使用订阅消息能力时,需遵循运营规范,不可用奖励或其它形式强制用户订阅,不可下发与用户预期不符或违反国家法律法规的内容。具体可参考文档:《小程序订阅消息接口运营规范》 3. 原有的小程序模板消息接口将于 2020 年 1 月 10 日下线,届时将无法使用此接口发送模板消息,请各位开发者注意及时调整接口。 微信团队 2019.10.12
2019-10-13 - 第三方小程序提交代码审核提示85085 submit audit reach limit
提审超额的第三方服务商可通过小程序服务商助手申请临时提审额度 具体可参考公告说明:https://developers.weixin.qq.com/community/minihome/doc/00022ce7b209f09f363b9c62958401?blockType=99
2021-03-18 - 微信登录能力介绍
为了便于用户便捷使用App、网站、移动端网页、小程序的服务,微信提供不同的技术方案,便于开发者在不同终端平台的服务中接入微信登录。 通过这个教程,开发者可以了解平台提供的针对各终端平台的微信登录能力,并可以根据实际使用场景合理选择接入方式。 以下为几类型微信登录的功能说明: 类型授权域/接口 用户侧使用流程 接入流程 App 接入微信SDK,并调用snsapi_userinfo (1)在App内选择使用微信登录 (2)拉起微信客户端,打开用户授权页,完成登录授权(1)注册微信开放平台(open.weixin.qq.com)帐号,并完成开发者资质认证 (2)申请【App移动应用】并审核通过后可以使用,查看开发文档网站应用 snsapi_login (1)用户使用微信“扫一扫”,在PC端扫码 (2)客户端打开授权页,完成登录授权 (1)注册微信开放平台(open.weixin.qq.com)帐号,并完成开发者资质认证 (2)申请【网站应用】并审核通过后可以使用,查看开发文档 微信客户端内H5使用公众号的登录能力: snsapi_base snsapi_userinfosnsapi_base:静默授权 snsapi_userinfo: (1)用户在H5内点击登录,唤起授权弹窗 (2)用户侧完成登录授权(1)注册微信公众号,选择“服务号”类型,并完成微信认证 (2)在公众号管理后台设置回调域名 (3)接入微信登录能力,查看开发文档 小程序wx.login wx.getUserInfowx.login:静默授权,开发者可获取openid wx.getUserInfo: (1)用户在小程序内点击组件,唤起登录窗口(2)用户侧完成登录授权 (1)注册小程序 (2)接入微信登录功能,查看开发文档,查看登录流程设计指引 开发者在不同使用场景下接入微信登录,应该注册符合要求的帐号并使用对应的登录能力。 【常见问题】 Q1: 在调用微信登录时,出现了“此帐号并没有这些scope的权限,错误码:10005”,是什么原因? A:对于场景与帐号属性、能力项不对应时(如在移动端网页中使用网站应用的AppID调用登录能力),将会出现以下的错误提示:此帐号并没有这些scope的权限,错误码:10005 [图片] Q2:我的服务同时有App、官网、公众号、小程序,那我怎么打通用户数据? A:对于多平台的服务,若开发者希望能识别用户身份,例如:希望用户在小程序内也能查看到在App内购买的商品订单,则可以通过平台提供的UnionID机制来实现用户身份识别。
2019-03-06 - 小程序审核:名称规则调整及优化建议
微信小程序的开发者们在发布小程序之前,需要给每个小程序起好一个名称,设置好logo、简介及类目信息,然后才能进行代码提审。 这些账号的基础信息是用户对一个小程序的初步认知,平台希望这些信息能够给予用户准确预期每个小程序的功能和内容,也希望每个小程序的名称是具有独特性的,减少误导、混淆用户理解的可能性。 因此有以下几点名称规则调整及优化建议,希望开发者可以了解并遵循,后续可能会在名称审核、代码审核或已发布运营时,收到平台的审核通知或建议修改通知。 l 微信小程序的名称建议是品牌、商标或具有辨识度的短词 在微信小程序发布后,用户会通过搜索、传播等场景使用小程序的功能和服务。选择品牌、商标或具有辨识度的短词作为小程序的名称,可以帮助用户快速建立与小程序的记忆与关系。 名称为“印象笔记”会比“笔记”能更好的让用户记忆和理解,并使用“印象”品牌词进行搜索或传播。 [图片] l 不能直接使用功能性描述、广义归纳类的词汇作为名称 功能性描述的词汇虽然可传达出小程序所要提供的相关功能,但直接使用此类词汇,缺乏显著性且不具有识别、区分小程序的作用。 如名称为“牙科”的账号,用户能直接理解小程序的内容可能与“牙科”相关,但对这个小程序账号是没有建立认知和关系的。 [图片] l 不能同时使用地域性词汇与广义归纳类词汇进行命名 使用“地域+广义归纳类”词汇进行命名,同样存在指向性过于宽泛的问题。 如以下案例, 名称包含的地域词:“四川”、归纳类词:“系统门窗”,并不会让用户对账号的功能产生有效的预期。以下示例是不允许的: [图片] 但在政务民生类服务场景,“广州地铁”、“广州公积金”可以被用户理解并接受属于政府或相关机构提供的服务和资讯,因此“地域+广义归纳类”词汇可被政府民生场景使用。 l 不建议使用具有营销属性的词汇进行命名 营销属性词汇如:免费、促销、清仓、打折等,鉴于活动规则普遍附有限制条件,在名称中使用,通常带有过于夸大的表达效果,并非是小程序的核心功能和用户的全部认知,存在误导的可能性。以下示例是不允许的: [图片] l 商品销售类小程序,需要包含品牌名称,不直接使用产品分类进行命名 商品销售类小程序,若仅使用产品分类进行命名,无法建立易于记忆、易于传播的品牌形象。如名称为“女鞋男鞋女包批发生产”,用户并不会因“女鞋”“男鞋”“女包”就会进行选择,反而“品牌+女装”才是用户真正需要的。以下示例是不允许的。 [图片] l 不在名称中堆砌热门搜索关键词 名称中堆砌多个关键词,过于冗长的热门搜索关键词堆砌名称无法建立品牌记忆,目的普遍是在搜索结果上获得更多的曝光。以下示例是不允许的: [图片] 结语 此次名称规则的调整和优化建议,平台希望开发者们能相应地调整自己的小程序名称。如未满足名称规范,平台会在后续的小程序名称设置、名称审核、代码审核流程进行规则提示和修改要求。并会在搜索场景优化需求基础上,对无辨识度的账号名称进行搜索策略调整。 微信小程序完整的名称规则可具体参照《微信小程序平台运营规范》2. 基本信息规范,除以上规则与示例之外,当然还包括了不得使用违法违规的名称、不得使用侵权他人的品牌词进行命名、在命中敏感类目如医疗词时提交主体资质等规则。 平台希望小程序名称的优化调整,可以使得每个被开发者精心创造出来的小程序都能让用户在使用时、搜索时、传播时逐渐接受并建立对产品品牌的认知。
2023-08-17 - 小程序审核:名称规则调整及优化建议
微信小程序的开发者们在发布小程序之前,需要给每个小程序起好一个名称,设置好logo、简介及类目信息,然后才能进行代码提审。 这些帐号的基础信息是用户对一个小程序的初步认知,平台希望这些信息能够给予用户准确预期每个小程序的功能和内容,也希望每个小程序的名称是具有独特性的,减少误导、混淆用户理解的可能性。 因此有以下几点名称规则调整及优化建议,希望开发者可以了解并遵循,后续可能会在名称审核、代码审核或已发布运营时,收到平台的审核通知或建议修改通知。 l 微信小程序的名称建议是品牌、商标或具有辨识度的短词 在微信小程序发布后,用户会通过搜索、传播等场景使用小程序的功能和服务。选择品牌、商标或具有辨识度的短词作为小程序的名称,可以帮助用户快速建立与小程序的记忆与关系。 名称为“印象笔记”会比“笔记”能更好的让用户记忆和理解,并使用“印象”品牌词进行搜索或传播。 [图片] l 不能直接使用功能性描述、广义归纳类的词汇作为名称 功能性描述的词汇虽然可传达出小程序所要提供的相关功能,但直接使用此类词汇,缺乏显著性且不具有识别、区分小程序的作用。 如名称为“牙科”的帐号,用户能直接理解小程序的内容可能与“牙科”相关,但对这个小程序帐号是没有建立认知和关系的。 [图片] l 不能同时使用地域性词汇与广义归纳类词汇进行命名 使用“地域+广义归纳类”词汇进行命名,同样存在指向性过于宽泛的问题。 如以下案例, 名称包含的地域词:“四川”、归纳类词:“系统门窗”,并不会让用户对帐号的功能产生有效的预期。以下示例是不允许的: [图片] 但在政务民生类服务场景,“广州地铁”、“广州公积金”可以被用户理解并接受属于政府或相关机构提供的服务和资讯,因此“地域+广义归纳类”词汇可被政府民生场景使用。 l 不建议使用具有营销属性的词汇进行命名 营销属性词汇如:免费、促销、清仓、打折等,鉴于活动规则普遍附有限制条件,在名称中使用,通常带有过于夸大的表达效果,并非是小程序的核心功能和用户的全部认知,存在误导的可能性。以下示例是不允许的: [图片] l 商品销售类小程序,需要包含品牌名称,不直接使用产品分类进行命名 商品销售类小程序,若仅使用产品分类进行命名,无法建立易于记忆、易于传播的品牌形象。如名称为“女鞋男鞋女包批发生产”,用户并不会因“女鞋”“男鞋”“女包”就会进行选择,反而“品牌+女装”才是用户真正需要的。以下示例是不允许的。 [图片] l 不在名称中堆砌热门搜索关键词 名称中堆砌多个关键词,过于冗长的热门搜索关键词堆砌名称无法建立品牌记忆,目的普遍是在搜索结果上获得更多的曝光。以下示例是不允许的: [图片] 结语 此次名称规则的调整和优化建议,平台希望开发者们能相应地调整自己的小程序名称。如未满足名称规范,平台会在后续的小程序名称设置、名称审核、代码审核流程进行规则提示和修改要求。并会在搜索场景优化需求基础上,对无辨识度的帐号名称进行搜索策略调整。 微信小程序完整的名称规则可具体参照《微信小程序平台运营规范》2. 基本信息规范,除以上规则与示例之外,当然还包括了不得使用违法违规的名称、不得使用侵权他人的品牌词进行命名、在命中敏感类目如医疗词时提交主体资质等规则。 平台希望小程序名称的优化调整,可以使得每个被开发者精心创造出来的小程序都能让用户在使用时、搜索时、传播时逐渐接受并建立对产品品牌的认知。
2019-05-14 - 社区突出贡献者激励计划
各位微信开放社区的用户: 大家下午好。 社区从上线到现在,我们看到了很多积极、热心的开发同学、运营同学在社区帮我们回答问题、分享一些经验,成为了“社区网红”,我们希望能看见更多的网红出现。因此,为了共同营造社区良好的问答、分享氛围,自2018.11.01起,我们会开始以月为时间单位,记录各位用户(个人/企业)在社区的贡献,并评选出社区每月突出贡献者。 激励措施 当选社区突出贡献者的用户,将有机会获得以下奖励: (1) 小程序极速审核通道,开发者参与开发的小程序将可享受一个月快速审核的奖励。 (2) 官方沟通群,我们希望及时听见你的反馈和建议 (3) 微信周边礼品,如 WeStore 礼品、微信公开课Pro门票 评选准则时间:每个自然月的贡献统计,下个月将清零重新计算。维度: 1.加分项,例如: 1)在社区的回答、经验分享、案例分享获得的点赞 2)高质量的回答被置顶 3)在社区内发表文章,并被评为“精选” 2.减分项,例如: 1)广告、重复问题刷屏、与社区无关帖子(如诗词等)将会被删除,会扣除相应的分数 如果帖子被删帖,该个人/企业用户将无法参与本月突出贡献者评选,请大家在社区不要提供无效的内容。 2)不被认可的回答,将会扣除相应的分数 除每月评选社区突出贡献者之外,我们将组织更多的活动,提供更多给大家展示的舞台。 我们希望看见各位个人/企业用户在社区的智慧和力量,和我们一同打造充满热情的微信开放社区! 关于社区的任何想法,欢迎大家留言给我们。 微信团队 2018.10.24
2019-04-14 - 小程序内用户帐号登录规范调整和优化建议
为更好地保护用户隐私信息,优化用户体验,平台将会对小程序内的帐号登录功能进行规范。本公告所称“帐号登录功能”是指开发者在小程序内提供帐号登录功能,包括但不限于进行的手机号登录,getuserinfo形式登录、邮箱登录等形式。具体规范要求如下: 1.服务范围开放的小程序 对于用户注册流程是对外开放、无需验证特定范围用户,且注册后即可提供线上服务的小程序,不得在用户清楚知悉、了解小程序的功能之前,要求用户进行帐号登录。 包括但不限于打开小程序后立即跳转提示登录或打开小程序后立即强制弹窗要求登录,都属于违反上述要求的情况; 以下反面示例,在用户打开小程序后立刻弹出授权登录页; [图片] 建议修改为如下正面示例形式:在体验小程序功能后,用户主动点击登录按钮后触发登录流程,且为用户提供暂不登录选项。 [图片] 2.服务范围特定的小程序 对于客观上服务范围特定、未完全开放用户注册,需通过更多方式完成身份验证后才能提供服务的小程序,可以直接引导用户进行帐号登录。例如为学校系统、员工系统、社保卡信息系统等提供服务的小程序; 下图案例为正面示例:校友管理系统,符合规范要求。 [图片] 3.仅提供注册功能小程序 对于线上仅提供注册功能,其他服务均需以其他方式提供的小程序,可在说明要求使用帐号登录功能的原因后,引导用户进行帐号注册或帐号登录。如ETC注册申请、信用卡申请; 如下反面示例,用户在进入时未获取任何信息,首页直接强制弹框要求登录注册ETC,这是不符合规范的。 [图片] 建议修改为如下正面示例所示形式:允许在首页说明注册功能后,提供登录或注册按钮供用户主动选择点击登录。 [图片] 4.提供可取消或拒绝登录选项 任何小程序调用帐号登录功能,应当为用户清晰提供可取消或拒绝的选项按钮,不得以任何方式强制用户进行帐号登录。 如下图所示反面示例,到需要登录环节直接跳转登录页面,用户只能选择点击登录或退出小程序,这不符合登录规范要求。 [图片] 建议修改为下图正面示例形式,在需帐号登录的环节,为用户主动点击登录,并提供可取消按钮,不强制登录。 [图片] 针对以上登录规范要求,平台希望开发者们能相应地调整小程序的帐号登录功能。如未满足登录规范要求,从2019年9月1日开始,平台将会在后续的代码审核环节进行规则提示和修改要求反馈。
2019-07-20 - 小程序类目简介
为了能让C端用户更快速直接了解小程序的功能及内容,以及基于部分行业的法律法规、平台管理的需要,小程序提供的服务需要与小程序所选的类目一致。 一、类目的选择 (1)类目根据主体的不同,开放范围分为个人、组织、境外。 (2)基于法律法规、平台管理的需要,部分类目需要提交相关的资质并经过审核后,才能申请成功。无资质要求的类目选择后即刻生效。 (3)建议开发者根据小程序自身服务内容对照类目适用范围申请相应的类目,以避免后期提交代码审核/小程序上架后出现类目不符等问题被驳回或按违规处理。 (4)小程序类目对应资质、部分示例模板等内容详情可参考:点击查看。 二、小程序类目配置指引 (1)初始化类目配置介绍: 登录【微信公众平台】 ->【点击立即注册】 ->【选择账号类型:小程序进入注册详情页】 ->【填写账号信息,点击注册】 ->【点击登录邮箱,进行账号激活】 ->【激活后进行用户信息登记】 ->【小程序发布流程】 ->【小程序类目,点击去补充,添加类目】 ->【提交】 [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] (2)小程序类目后台配置介绍: 登录【微信公众平台】 ->【小程序发布流程】 ->【小程序类目,点击查看详情】 ->【选择添加服务类目并上传类目资质】 ->【提交】 [图片] [图片] [图片] 三、提前准备小程序类目资质 小程序不同类目对应的资质不同,建议开发者可根据微信开放的“小程序开放的服务类目”表查看对应资质,并提前做好申请相关资质准备,且资质需在有效期内,避免提交类目审核时因资质不符或过期等情况被驳回。 四、类目审核常见问题 1.一个小程序可选 5个 服务类目,且一个月有 5次 修改类目机会; 2.为满足部分开发者业务拓展的诉求,小程序类目已达5个且满足一定条件的账号可以申请【更多类目】。 更多类目申请条件(同时满足): (1)小程序的5个类目中至少有1个资质类目。类目资质可见开放的服务类目表; (2)小程序近7天每天访问人数100人及以上; (3)小程序近3个月无违规行为; (4)本月仍有添加服务类目的次数。 申请方法:登录【微信公众平台小程序】 ->【小程序发布流程】 ->【小程序类目,点击查看详情】 ->【申请更多类目】 ->【提交】 [图片] 3.类目审核时长:一般情况为1 - 7天,如出现审核量大、内容复杂等特殊情况可能延长;如有紧急申请需求,且有加急额度情况下,在选择需提交资质的类目时,可同时勾选【审核加急】按钮,详情参考:【小程序类目审核加急通道开放】 4.部分常见驳回原因: 情况1: 提交资质主体与小程序注册主体不一致 案例:小程序(主体为123)申请【医疗服务-其他私立医疗机构】类目,提交资质主体为345,即为主体不一致 建议:以有资质的主体申请小程序 或 用小程序主体申请相关资质 情况2:提交资质已过期 案例:小程序申请【医疗服务-其他私立医疗机构】类目,提交《医疗执业许可证》,许可有效期为2016.09.12,即为过期 建议:提交许可资质在有效期内且有效期大于3个月及以上 情况3:提交资质模糊 案例:小程序申请【社交-社区/论坛】类目,提交的《非经营性互联网信息服务备案核准》资质模糊,审核无法辨别 建议:请确保提交资质清晰,可供审核辨别 情况4:提交虚假资质 案例:小程序(主体为123)申请【社交-社区/论坛】类目,提交主体一致的《非经营性互联网信息服务备案核准》资质,审核人员经可信渠道核实其资质主体为456,将判断小程序提交虚假资质 建议:以有资质的主体申请小程序 或 用小程序主体申请相关资质 温馨提醒: 审核中如发现小程序提交虚假资质,平台将视违规情节采取限制、甚至停止提供相关功能服务等措施,如涉及违法行为,可能追究其民事、刑事等相关法律责任,请各位开发者勿在“危险”的边缘试探哦~
2024-09-09 - 「微信开发者·代码管理」功能上线
各位开发者: 大家好。 近期我们上线了微信开发者·代码管理 的功能,这是为开发者提供的一项基于 Git 的代码管理服务。方便微信开发者进行代码推送、拉取、版本管理和多人协作,并且可以简单的将仓库设置为私有或者公开。 系统会为每个小程序自动创建一个专属项目组,用户无需单独开通。后续登录过微信开发者·代码管理的小程序开发者会自动成为该项目组成员。 微信开发者·代码管理的登录用户必须同时满足以下两个条件: 1.该用户必须为微信开发者,即微信小程序、订阅号以及服务号的开发者; 2.该用户必须为实名认证的用户。 微信开发者·代码管理的登录方式包括: 1.通过微信开发者工具版本管理中的“代码管理”或工具栏中的“微信开发者·代码管理”快速进入。 2.通过浏览器微信扫码登录:https://git.weixin.qq.com 。 具有登录权限的用户,可在小程序专属项目组中创建远程仓库或创建其他非小程序专属项目组。 在微信开发者工具版本管理中添加远程仓库时,系统会自动拉取该小程序专属项目组下已创建远程仓库列表。用户可点击选择相应仓库,系统会自动填充该仓库的 URL 和名称,方便用户添加。 [图片] 详细内容可参考 文档。 微信团队 2019.01.28
2019-01-28 - (15)真机定位问题技巧
开发者在开发小程序的时候可能会碰到一些这样的问题: 问题1 开发者工具上看效果没问题,但是在真机上测试不行? 问题2 有用户遇到小程序功能无法使用的问题,但无法快速定位解决? 今天我们的小故事与大家分享一些真机定位的技巧,可以解决上面两个问题。 1 vConsole开发利器和远程调试功能 针对问题1,我们提供了 vConsole 开发利器和远程调试功能,可以协助开发者在定位真机上的问题。 vConsole 的有四个Tab面板,可以先看下 Log 面板,看是否有异常信息,异常类型 thirdScriptError 是框架捕捉到的开发者的代码执行的异常,可以优先处理异常信息看是否可以解决问题。Log 面板可以看到异常出现的文件和行数。 [图片] 除了异常日志,开发者还可以通过 console.log 接口在一些关键执行路径上打日志来定位问题,这些日志会呈现在 Log 面板上。 vConsole 默认是不开启的,可以通过下面2个方法来开启: 1 开发版和体验版可以点击小程序页面右上角的...按钮打开的菜单项“打开调试”来开启 vConsole。 2 正式版没有“打开调试”的菜单项,可以先通过开发版和体验版来开启 vConsole,然后再打开正式版。或者可以预埋一个隐藏操作,比如连续点击某个 Button 多次,然后调用 API 接口 wx.setEnableDebug 来打开。 vConsole 虽然强大,但在手机上查看大量的日志信息不方便,此外,vConsole 没有断点调试、无法修改样式,定位复杂问题需要花费比较多的时间。 小程序的业务逻辑运行在 AppService 层,页面渲染在 WebView 运行,并通过微信客户端通信,因此,我们想到了可以让 AppService 运行在开发者工具,页面渲染还是在手机 WebView,两者通过网络来通信,这样借助开发者工具的调试能力,就可以实现远程调试功能。 远程调试窗口通过手机客户端扫描开发者工具上生成的二维码来打开,无需像普通手机 H5 页面调试一样,需要在手机端进行一些设置。 [图片] 打开的远程调试界面和开发者工具的模拟器的调试界面很像,需要注意的是,要在 Console 里对小程序进行调试,需要将调试的上下文切换到 VM Context 1 。 [图片] 更多的远程调试的使用方法请参考使用文档。 2 意见反馈能力 对于问题2,小程序的使用反馈来自用户投诉,这种情况用户无法联系到开发者。我们遇见过有小程序功能出现问题,用户无法使用,但投诉无门的情况,而这些问题,开发者也没有途径去收集以及处理,这就导致了小程序服务质量下降,用户流失。 为此,我们开发了“意见反馈”功能,当出现问题时,开发者可以引导用户使用“意见反馈”进行反馈,并上传日志来辅助开发者定位问题。操作过程如下: 引导用户进入小程序帐号详情页面,具体可以在小程序界面点击右上角...按钮,选择关于菜单。接着在帐号详情页面点击右上角...按钮,选择意见反馈菜单进入页面。页面可以上传图片和日志,建议用户上传异常情况的截图,以及勾选允许开发者使用小程序日志选项上传日志,反馈信息越详细,越有助于定位问题。 [图片] [图片] 如果觉得上面的操作步骤太麻烦,开发者可以通过在页面 WXML 添加下面的按钮,用户点击按钮可以直接打开“意见反馈”页面。 [图片] 开发者需要定时处理用户的反馈,这样才能保证小程序的质量。开发者可以登录小程序管理后台,进入左侧菜单客服反馈,就可以看到用户的反馈内容以及下载日志来辅助定位问题。 [图片] 为了保证日志信息足够详细,开发者需要用下面的接口在代码的关键执行路径上写日志。 [图片] wx.getLogManager 接口的更详细使用请参考文档。 希望通过这些小技巧,可以帮助大家顺畅地开发小程序。
2019-04-29 - 获取用户位置信息时需填写用途说明
各位开发者:大家下午好。在一些小程序/小游戏的业务逻辑中,有时需要依赖用户所在的地理位置来提供服务,当前开发者可以通过调用 调用 wx.getLocation / wx.authorize 等接口获取用户的地理位置信息或授权。 根据 iOS 系统对用户隐私保护的要求,同时我们也为了让用户可以更好的判断是否要将地理位置信息提供给开发者,故调整为当小程序/小游戏获取用户地理位置信息时,开发者需要填写获取用户地理位置的用途说明。填写的说明将在地理位置授权弹窗中展示,如下图所示: [图片] 具体开发方法如下: 在 app.json 里面增加 permission 属性配置(小游戏需在game.json中配置): [代码][代码]"permission": { "scope.userLocation": { "desc": "你的位置信息将用于小程序位置接口的效果展示" } } [代码][代码]详见 小程序开发文档/小游戏开发文档 可在开发者工具(1.02.1812260及以上版本)中进行调试。 2019年1月14日起新提交发布的版本将会受到此调整的影响。需要各位开发者注意,2019年1月14日起新提交发布的版本若未填写地理位置用途说明,则将无法正常调用地理位置相关接口,请及时填写地理位置用途说明。该调整策略在微信客户端 7.0.0 版本生效。另外,考虑到兼容性等问题,在微信客户端 7.0.0 版本以下的环境中不受此策略影响。 微信团队 2018.12.26
2019-04-28 - 小程序web-view组件、音频播放功能调整说明
各位开发者: 下午好。 从微信6.7.2客户端版本开始,以下功能的逻辑将进行调整,请开发者注意适配: 1.为便于用户方便使用小程序,web-view 组件在小程序全屏模式下,将统一显示导航栏 自该版本起,[代码]navigationStyle:custom[代码] 对 [代码]<web-view>[代码] 组件无效。 开发者在全屏模式下,无需再自行绘制 web-view 导航栏。 可详见文档: https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html 2.背景音频管理器 [代码]backgroundAudioManager[代码]在退出小程序后不再默认继续播放 近期发现部分小程序退出后仍在播放无意义的音频,引起用户疑惑。 因此自该版本起,若需要在小程序切后台后继续播放音频,需要在 app.json 中配置 [代码]requiredBackgroundModes[代码] 属性。 开发版和体验版上可以直接生效,正式版还需通过审核。 详见文档: https://developers.weixin.qq.com/miniprogram/dev/framework/config.html#%E5%85%A8%E5%B1%80%E9%85%8D%E7%BD%AE 请大家及时调整。 微信团队 2018.08.23
2018-09-25 - 每周社区 | 上周社区问题反馈以及功能优化更新
各位微信开发者: 大家下午好。从本周开始,我们每周收到的 问题反馈、处理进度、社区功能更新 将以公告形式同步给大家,希望和大家一同打造小程序的生态。 一、上周问题反馈和处理进度(06.25-06.29) (一)修复中的问题: 关于微信小程序设置过多监听事件后报错 查看反馈 @font-face引入新字体,仅在IOS下且为外部字体时生效。查看反馈 查看反馈 cover-view 出现 background 无法覆盖 padding 区域 查看详情 iOS下,切换input组件,键盘会重新推出且位置计算有误 查看详情 意见反馈日志读写太频繁 查看详情 安卓全屏模式下,web-view没有占满屏幕,底部有部分留白 查看详情 工具中showToast icon='none'时无法触摸穿透 查看详情 iOS页面中多个video标签,其中一个全屏退出后video展示异常 查看详情 安卓光标移动后无法移回最后 查看详情 chooseLocation 工具上偶现只返回了经纬度 查看详情 开发工具将窗体独立之后,页面刷新/切换后不渲染 查看详情 wx.pageScrollTo导致fixed元素闪动 查看详情 小程序插件页面无法配置导航栏样式 查看详情 工具上分包预下载接口分包大小计算有误 查看详情 setBackgroundColor报无权限 接口上线后未放开权限位 查看详情 工具全局查找的查找范围不包含wxs文件 查看详情 iOS下 textarea的padding无法置0 查看详情 (二)修复完成,待客户端版本上线 安卓textarea adjust-position 设置失效 查看详情 statusBarHeight安卓返回0 查看详情 安卓text长按复制失效 查看详情 (三)已修复的问题 touch事件手机上timestamp位置不一致 查看详情 (四)需求反馈 webview 业务域名 优化 查看详情 支持自定义下拉刷新圆点的位置 查看详情 开发工具素材管理支持svg 查看详情 待讨论评估支持需求: 提供微信版本和公共库版本的对应关系数据,其他类似反馈 查看详情 uploadFile支持多文件上传 查看详情 (二)近期社区能力更新 我们在社区收到了大家希望增加”关注问题“、”收藏“帖子和通知消息回答定位的需求,近期已新增优化如下能力: 1. 增加“关注问题”的能力,关注有消息变动,会收到消息通知 2. 所有帖子新增“收藏”功能 3. 在个人主页上有所体现关注和收藏功能 4. 优化消息通知回答定位 [图片] [图片] 三、《诚邀开发者共同营造社区》的反馈 1.关于社区的官方回答 我们每天都有安排相关的同学值班回复处理大家的问题。 但是我们希望通过这些改造,促进开发者们之间的交流, 问题和回答在大家思维碰撞中产生火花。而bug和需求类,由我们来处理。 [图片] 2.关于通知中心的反馈 已优化上线该问题,可以具体定位到该问题的回答、该帖子的评论。 [图片] 3.关于已知问题 关于已知问题,大家可以关注社区“已知问题”模块,看我们的已知问题和相关修复。 [图片] 4.关于社区的评论bug 大家反馈符号超过了编辑框,帮助我们发现了一个bug,我们已经修复了这个问题。谢谢大家的反馈。 [图片] 5.关于交流群 我们希望所有的交流可以在社区完成,方便更多的开发者看见这类问题。 [图片] 感谢大家的反馈,也希望大家和我们一起共同营造社区的良好氛围。 微信团队 2018.07.03
2018-07-03