- 【简单高效】全面深度解析微信生态应用安全防护策略
作为开发者,最令我们头疼的可能并不是产品需求开发,而是在产品上线后出现的各种安全风险问题。 这些年,我们收到很多开发者提供的真实案例: 投票功能,本来要提供公平公正的投票服务,结果因为有人雇佣水军刷赞,造成投票严重不公平;发放活动优惠券,本来是刺激用户活跃的好活动,好不容易申请了经费,结果被羊毛党用非法手段拿走了90%,变价买卖。信息发布应用,访问人数很少但是服务器压力很大,因为每天会收到几十个爬虫的千万次请求。 ......这些案例一次次的发生,让我们产生了思考,到底哪个环节出问题了? 风险在哪里? 用户在使用小程序或H5应用时,业务请求从客户端发起,经过网络链路,到服务端;然后服务端根据请求处理事项并返回相应的内容,这是一个正常预期内的过程。 这里的客户端、网络链路、服务端,每一个部分都会成为被攻击的对象。我们一个个来盘点: 1. 客户端 小程序本身有代码加密插件,可以对上传的小程序代码混淆加密,并且从小程序发送的请求有明显的特征,只要服务端对应配置可以识别这些特征,攻击者破解和伪造的难度是非常高的。 但从诸多案例中我们发现,大部分攻击者不会直接从源码中破解请求体,而是使用模拟器、群控及设备农场的方式,通过外部辅助脚本或物理外挂的形式来去攻击。 比如“跳一跳”小游戏,很多玩家为了拿高分,不是去搞小游戏代码包伪造请求,而是直接搬上摄像头识别,通过距离识别,停顿秒数的计算,物理触发屏幕完成刷高分的成就。(网络搜一搜跳一跳外挂,八仙过海各显神通) [图片] 一般来说群控设备的解法要比直接破解代码包去伪造请求隐蔽的多,如果我们开发者只做了简单的 header 特征的识别,是很难抓到群控设备发出的请求的,从特征看,这些就是正常的手机直接点击完成的。 2. 网络链路 从客户端到服务端,一定是要经过本地网络和运营商网络,运营商网络直接做攻击行为的可能性很小,绝大部分的网络链路攻击都来源于本地网络。 攻击者通过对你正常的请求域名进行DNS污染,或通过代理你的网络,对客户端发出的请求做劫持和重放等,来达到TA的目的。 比如,因为开发者的逻辑失误,导致一个游戏道具的领取接口没有做校验和限制,发一个请求就领取一个道具,那么攻击者可以直接通过在链路上劫持并重放接口请求来刷道具。 除此之外还有很多很多,一半以上的攻击者目的都是为了自身,而不是去偷他人的数据,因为主观能动性,本地网络的链路劫持基本都能轻松完成。 3. 服务端 服务端是最容易被攻击的,并且大部分的攻击行为都是绕开客户端和网络链路(从客户端发来的链路),直接去搞服务端。这里列举一些常见的攻击手段: DDos攻击:分布式拒绝服务攻击,攻击者直接不择手段想把你的服务器打挂掉,从而影响你的正常业务。CC攻击:人海攻击手段,通过绑架大量肉鸡或者号召一大波人,直接把你服务端挤爆,让你无法服务正常的用户。BOT攻击:一般不会对你的服务器造成影响,只是通过后端接口缺陷,批量自动化获取你的业务信息,或者定时来获取你的信息,有部分是爬虫。黑客攻击手段:比如SQL注入、0day漏洞、加密凭证破解、网络阻塞攻击等,这些就不是用户抢道具这种的目标行为,而是有预谋的直接攻击你的基建。应该如何防范? 针对不同层面的攻击,我们应该有不同的防范方法,在这里我们给开发者整理了一些有效的方法: 1. 客户端 应用中尽量使用代码保护插件,对小程序代码进行混淆和加密,增加逆向工程的难度。应用中设置合理的操作频率限制和阈值警报,比如在页面打开后不允许立刻点击按钮,按钮加上防抖和节流。实现基于时间或挑战-响应的动态令牌机制,防止请求重放攻击。结合多维度信息(如硬件ID、网络特征、行为模式等)生成唯一标识,识别和追踪异常设备行为。接入用户行为分析监听,检测异常操作模式;比如跳一跳长时间有节奏的操作停顿,点击位置无变化,可以判定物理外挂。2. 网络链路 小程序强制使用HTTPS协议,但在其他客户端也应全面采用HTTPS协议,防止中间人攻击和数据窃听;另外有条件可以采取证书固定,防止SSL劫持。有能力的话,对每个请求进行签名,包含时间戳、nonce 等信息,服务端验证签名有效性。有条件可以进行双向认证,服务端也要对客户端证书做认证,确保通信双方身份。扩展使用 DNSSEC 或 HTTP-DNS 技术,防止DNS污染。3. 服务端 使用专业的DDoS防护服务器,实现流量清洗和智能负载均衡;另外应用层面要基于IP或者用户openid做访问频率限制。使用验证码或其他人机交互验证来辅助判断,比如关键接口滑动验证,或使用短信验证码确认。API层面要做细粒度的接口权限控制,对敏感接口应该有更严格的认证和授权机制。引入一些BOT检测机制,通过特征标记来识别和阻止自动化脚本;配合动态黑名单系统,自动封禁异常IP。部署WAF,防御常见的Web攻击,如SQL注入、XSS等;另外对服务器和后端服务软件的安全更新和补丁要及时处理。使用API网关,集中管理和监控API调用,将多个服务受攻击面缩减到一个,集中精力防护。 通过实现上述手段,我们能阻止绝大部分的安全攻击,但也对各位开发者提出了更高的要求;如果因为自身理解或者配置不当,很有可能会遗漏一些重要的点,造成防护失效,对业务服务造成损失。 那么有没有什么方法,能够让开发者简单操作就能实现上述所有防护手段,从而高效的处理的自己的业务开发呢? 微信做了什么? 微信官方团队,在去年就推出了集API网关、网络加速、请求加密、安全防护、流量管控于一体的「安全网关」,有一套完整的端到端的防护体系。从客户端到服务端,全面覆盖业务服务过程,为开发者提供简单、高效的保护和治理。 [图片] 「安全网关」的防护能力分链路层面、客户端层面、服务端层面,我们分别来看下几个层面的防护特点。 在链路层面上,实现了三层防护 第一层:请求进入网关的微信私有协议时,可以精准识别协议外挂、爬虫特征、模拟器攻击、黑灰产IP、DDos和CC攻击等各种异常请求,并及时拦截。第二层:经过第一层的初步清洗,在这一层会对伪造、篡改协议的请求进行清洗;同时结合用户请求频率、权限校验等风控能力拦截掉非法请求、越权请求、高频请求等;前两层的清洗已经拦截90%的异常流量,将剩余正常流量转发给业务源站。第三层:为了防止漏网之鱼,开发者可以选择接入第三层,网关会结合请求特征、设备信息、账号信息形成多维智能分析模型,对请求进行风险的判别,并将判别结果一同提交给业务源站,开发者可以参照或结合自己的数据,综合判断请求的合法性。开发者也可以授权网关直接对高风险的请求直接拦截,不转发给业务源站。在客户端层面,请求加密和风险识别 「安全网关」提供微信私有协议,二次封装,100%加密数据和接口,全程无明文数据传输,极大的提高外部抓包破解门槛。 并且「安全网关」支持在小程序、WEB、H5、APP等多端场景接入。尤其在微信小程序中,平台能在 wx.request 中直接转发请求到网关安全链路,无需开发者改代码;支持一键断连,恢复为普通请求链路。 [图片] 风险识别上,「安全网关」在微信小程序中推出「安全检测插件」,插件会根据设备环境、网络环境、用户行为、账号风险等多维度综合判断当前运行环境的可信情况,给出判断结果;开发者接入后可以在敏感业务前调用检测,检测通过才进行业务请求。 该扩展插件可以帮助开发者拦截群控、模拟器、设备农场等端场景的攻击行为,极大降低了游戏刷高分,集赞水军,自动羊毛党对正常业务的影响。 服务端层面提供信任参考 「安全网关」之所以称之为网关,是因为TA代理了所有客户端发送的请求,集中转发到开发者业务服务器中。在这个集中处理的过程中,实现了加密、加速、安全防护等多个效果。 作为服务端的开发者,我们在接入「安全网关」后,可以充分利用网关转发请求的附加信息,比如请求来源小程序appid、用户openid、用户unionid、用户风险标识等等,根据这些网关标记结合自身业务需求予以处理。 你可以在服务端对「安全网关」转发流量以外的其他流量设置限制访问,只接受「安全网关」的IP发过来的请求,将自己服务器隐藏在安全网关后面,更加安全;也可以设置其他更丰富化的防护策略,一切自由决定。 [图片] 如何接入安全网关? 目前网关控制台(请在 PC 端访问:https://dev.weixin.qq.com/console/gateway )已支持自助接入。 我们针对微信小程序提供一键接入方式,你可以无需任何代码改动和版本发布就可以体验。支持全量、URL灰度、用户灰度等策略,体验出现问题也支持一键断连。 针对其他客户端,如WEB、H5、PC端场景,也提供手动接入方案。 我们还推出了系列视频课程,全面讲解「安全网关」的各方面使用细节,让开发者上手更容易:微信网关系列课程 如果你有企业级版本(预期 >1000 QPS)的接入需求,请邮件联系我们专业对接:donut@tencent.com
09-03 - 微信小程序代码如何加固反编译及后台接口防止别人乱调用
最近开发了一个小程序前端开发前端和后台花了1个多月时间开发,结果被人轻松的把微信小程序前端代码破解出来。而且完整一个字不差截图给我看了。 小程序是前后端都分离的,如果后端不作验证,别人把你的小程序前端扒了接口也暴露了,随便可以复制你的前端去换成自己appid上线后调你的接口。这显然是不安全的。 在想为什么微信官方不限制指定appid才能调用指定域名接口。这样接口才是安全的。 最后找了一圈,微信开发者工具里只能对前端代码进行混淆加固,只能做到这步,让人破解出来后 看不懂逻辑,但还是一样能破解出来。只能做到基础的保护作用。 微信小程序演示: [图片] 目前按官方想方法: 微信代码加固方法:打开微信开发者工具,在菜单栏选择"工具-插件-编辑器扩展"或"设置-扩展设置-编辑器扩展",找到 “代码加固” 点击"获取"进行安装。安装成功后,即可使用该插件功能。右键js文件加固。 [图片] 目前此方法只能是对js加固混淆,wxml 样式等没法加密,人家要偷还是一样能随便反编译出来。 请教大佬们微信小程序如何做好加密?微信官方有没有指定小程序访问接口?后端接口如何做安全防护,不给别人随便调用?否则别人知道你的api地址就可以随便用了
05-29 - 企业微信自建小程序应用踩坑实践
最近开发了一个小程序接入企业微信的需求,企业微信的权限限制诸多,网上的完整示例又少之又少,因此踩了比较多坑,与大家分享。 坑1: 开发调试 在开发者工具中如果直接使用微信小程序模式,调用wx.qy接口会提示不存在,需要安装企业微信小程序模拟器插件 添加企业微信模拟器插件 [图片] [图片] 切换企业微信小程序模式 [图片] 注意:某些api模拟器也不支持,需要真机调试 打开多场景调试 用企业微信扫小程序开发码,开启多场景调试。开启之后,在附件栏、工具栏、会话、工作台等场景打开此小程序时,都将使用本次扫码的开发版小程序来运行。 [图片] 这个功能很好的解决了从其他入口无法进入开发版的问题,但开发调试的过程还是比较麻烦的 坑2: 企业微信端小程序登录流程和微信端小程序登录不同 一开始是想调用wx.qy.selectExternalContact获取外部联系人信息,本以为有现成的api可以解决很简单,但直接调用一直调不通,提示session过期,才看到这个api的调用前提: 调用前提: 必须先调用过wx.qy.login,且session_key未过期,开发者可调用checkSession 检查当前登录态 当前成员必须在应用的可见范围 [代码]wx.qy.login[代码]与[代码]wx.login[代码]的用法类似,但企微端的登录和微信端的登录是两套不通的流程 微信端小程序登录 [图片] 企微端小程序登录 [图片] 注: 企业微信端也是支持wx.login的,如只需使用wx.xx(微信端api)不需要走企业微信登录。 如需获取到当前企业微信用户在当前企业的员工身份信息、联系人信息等企业微信相关用户信息,则必须走企业微信登录流程。 坑3: access_token必须是与小程序关联的企业微信应用secret所获得 在调用jscode2session接口走登录流程的时候,一直提示没有权限,看了下接口的权限说明: 权限说明: access_token必须是与小程序关联的企业微信应用secret所获得。 如果没有开发过企业微信应用,可能会对这句话费解,这个概念如果没有从头看起很容易混淆。 一开始用的是企业微信本身的secrect不行,后来在论坛上查询相关帖子说是要用小程序的secrect,但要注意这里指的secrect并不是小程序本身的AppSecrect,而是在企业微信后台创建的关联了小程序的应用的secrect,可以在企业微信后台应用管理中点击查看,发送Secret到企业微信中查看。 secret是企业应用里面用于保障数据安全的“钥匙”,每一个应用都有一个独立的访问密钥。分为以下几种: 自建应用secret 基础应用secret 通讯录管理secret 外部联系人管理secret 建议开发前先阅读文档了解清楚这些基本概念:https://developer.work.weixin.qq.com/document/path/90665 坑4: 客户联系API权限 如果在调用客户管理相关API提示没有权限的话,先来看一下接口的权限说明: 权限说明: 企业需要使用客户联系secret或配置到可调用应用列表中的自建应用secret所获取的accesstoken来调用 第三方应用需具有“企业客户权限->客户基础信息”权限 第三方/自建应用只能获取到可见范围内的配置了客户联系功能的成员。 可以从以下方面排查: 获取accesstoken的secrect有没有用对 一种方法是可以直接使用客户联系secrect: [图片] 如果使用的是自建应用的secrect,还需要把当前应用配置到客户联系可调用列表: [图片] 获取客户联系的成员是否配置应用可见范围 [图片] 是否配置了客户联系功能权限: [图片] 可以感受到企业微信为了保护客户的隐私信息,做了很多的权限控制,有一套完善的权限体系: 应用可见范围 [图片] 应用调用 OpenApi 权限 大致的调用流程如下图所示: [图片] 坑5: 企业可信ip 当已经用正确的secrect获取到accesstoken后,接口又提示了报错: [代码]{ "errcode": 60020, "errmsg": "not allow to access from your ip, hint: [xxx], from ip: xx.xx.xx.xx,... } [代码] 需要在企业微信后台配置应用的可信ip,只有配置了可信ip,才能够调到企业微信的接口。 而在配置企业可信ip前,必须要先设置可信域名 或 设置接受消息服务器URL (即使你并不需要用到…) [图片] 设置可信域名需完成域名归属认证,即在域名根目录上传小程序校验文件 [图片] 配置完可信ip之后,终于能调通了。。。 总结 开始企业微信开发前先阅读官方文档开发指南,了解清楚基本概念、开发流程、配置方法,也便于后续阅读接口文档相关术语的理解。 开发者工具需安装企微插件用于调试部分企微api,对于工具无法模拟的场景需要真机开启多场景调试。 调用企业微信相关接口前,需仔细阅读接口的调用前提和权限说明。 调用openApi时,需要走企业微信内小程序登录流程、配置相关权限、配置企业可信ip。 不知道为啥接口调用失败可以使用错误码查询工具,在接口请求url里加上debug=1参数之后从接口返回的errmsg复制出hint值查询。
2023-09-25 - “UnionID关联”功能介绍及运营建议
产品简介:实现同一个用户在公众号、小程序、APP、官方网站等不同场景里的身份统一识别、信息同步和行为跟踪。 优势:唯一用户身份标识,打通会员信息和会员积分,打通多场景用户行为,支撑CRM和精准营销。 接入方式:需开发。 关键词:身份唯一识别、统一会员体系、CRM、精准营销。 01 UnionID机制说明 如果开发者拥有多个移动应用、网站应用、公众帐号及小程序,可通过 UnionID 来区分用户的唯一性。 因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。 [图片] 02 典型使用场景及案例 1) 使用记录同步: 用户在多端的浏览记录、购买历史、收藏夹等信息可便捷同步,并提供个性化服务。 2)用户信息维护: 如会员卡积分、收货地址等信息,用户无需重新输入信息,降低使用成本,提升转化率。 如某服饰行业小程序,提供手机号一键快捷登录方式,可自动拉取用户在微信中的默认手机号码,避免再次填写。 [图片] 03 运营建议 1) 在必须用到登录信息的环节引导用户登录 在用户必须登录时才引导用户登录(如:购买前需要获取会员信息,用于同步积分数据),而不是用户一进入小程序就弹窗要求用户授权。如只需要在前端展示用户头像、昵称,无需要求用户授权,可直接展示。 2)清晰、准确地引导用户登录 在登录页面中,清晰、准确地告知用户当前操作是登录,说明获取登录信息的目的(如:用于同步会员积分数据等)。 3) 不强制用户必须登录后才能使用小程序服务 提供游客模式,不强制用户必须登录后才能进入小程序。如要求必须授权头像昵称等信息才能继续使用小程序,会导致某些用户放弃使用该小程序。 开发指引内容较长,建议使用电脑详细查阅。点击打开文档
2020-01-10 - 第三方消息推送插件使用指南
第三方消息推送插件使用指南 作为多端框架的开发者,我们除了可对接腾讯云的消息推送服务之外,亦可通过下方 2 种方式对接第三方的消息推送服务,本文以极光推送服务为例子。 1、自行开发多端插件进行对接;相关的插件 demo 代码已已开源,可下载参考。去下载 2、直接引用我已开发好的多端插件(插件 id 为 wxca742ba6781a54fd ),详细的使用指引可查看下方介绍。 前置条件 需前往极光平台,开通极光消息推送服务并按照文档开通和配置相关信息 使用最新 SDK (务必是在2024.5.22之后的新版本的SDK) 一、iOS 对接指南 1. 配置插件 在微信开发者工具,前往[代码]project.miniapp.json[代码],点击右上角切换到 json 模式,然后按照将下方内容添加[代码]project.miniapp.json[代码] [代码]"mini-plugin": { "ios": [ { "open": true, "pluginId": "wxca742ba6781a54fd",// 这是插件id,不可修改 "pluginVersion": "1.0.0", "loadWhenStart": true, // 需设为true;表示为App启动即加载插件 "resourcePath": "pluginResources/wxca742ba6781a54fd.json"// 开发者需修改此处,即,需要把极光推送的key放入到json中,让插件读取注册极光SDK。路径为相对项目根路径的文件相对路径 }, ] [代码] 在小程序项目下创建pluginResources/wxca742ba6781a54fd.json,内容为如下。需要去极光推送创建。 [代码]{ "appKey": "8c6eexxxxxxxxxxxbee1",//此处需开发者修改为真正的key "channel": "App Store", "apsForProduction": false } [代码] 补充说明,以上的配置最终会用在极光的[代码]JPUSHService[代码]和[代码]setupWithOption[代码]接口.具体的值可以查看极光的接口文档。 [代码][JPUSHService setupWithOption:self.launchOptions appKey:appKey channel:channel apsForProduction:[apsForProduction boolValue] advertisingIdentifier:nil]; [代码] 更多补充:离线无法收到推送可查看https://go48pg.yuque.com/go48pg/pa41sm/wfgms8 2. iOS appex 的使用 如果有接入Notification Service Extension 的需求,需要添加如下的配置。 需要去苹果的后台申请一个新的 Bundle Id,要以主 Bundle Id 为前缀。 申请对应的开发版和分发版的 profile。然后分别配置在对应的 profilePath 和 distributeProfilePath 中 profile 的证书需要都使用主包 profile 的证书。 [代码]"mini-plugin": { "ios": [ { "open": true, "pluginId": "wxca742ba6781a54fd", "pluginVersion": "1.0.0", "loadWhenStart": true, "resourcePath": "pluginResources/wxca742ba6781a54fd.json", "appexProfiles": { "JPushNSE": { "enable": true, "bundleID": "com.xx.xx.service", "profilePath": "xxx/xxxxservice.mobileprovision",// 开发版的 profile "distributeProfilePath": "xxx/xxx/xxx.mobileprovision"// 分发版的profile } }, }, ], "android": [ ... ] } [代码] 3. js 调用 在添加插件以后,并编译到真机,就可以开始用js调用了 wx.miniapp.loadNativePlugin 加载插件,获取插件的js对象。 plugin.getCachedMsg 获取loadNativePlugin调用之前的消息。因为配置loadWhenStart 所以插件native侧其实早已初始化完毕。所以在监听回调之前的消息都被放到了缓存中。 这里只有调用了getCachedMsg,后续的消息才会往js侧发送。这里一定要先调用再监听消息。 plugin.onMiniPluginEvent 监听消息。回调的对象结构如下。 [代码]{ ios:{ type: '', data: {}, msg: '' } } [代码] type 的类型如下,具体表示的情况可以在极光文档中搜索 openSettingsForNotification willPresentNotification didReceiveNotificationResponse didReceiveRemoteNotification didFinishLaunchingWithOptions data的数据接口为 userInfo 具体的内容可以在极光文档中搜索userInfo NSDictionary * userInfo = notification.request.content.userInfo; myPlugin.registerPush 开启极光推送。调用以后就会弹出系统弹窗“xxx想要给你发送通知“。 回调返回对象。 [代码]{ "success": true, "token": "xxxx", "msg": "xxx" } [代码] myPlugin.setBadge 设置下标数字 具体调用可以参考如下 [代码]loadJIGUANGPlugin() { if (this.hasLoad) return this.hasLoad = true wx.miniapp.loadNativePlugin({ pluginId: "wxca742ba6781a54fd", success: (plugin) => { const msg = plugin.getCachedMsg(); console.log('getCachedMsg', msg) plugin.onMiniPluginEvent(this.onJiguangMsg) console.log('load plugin success', plugin) this.setData({ myPlugin: plugin }) }, fail: (e) => { console.log('load plugin fail', e) } }) }, onJiguangMsg(msg) { console.log(msg) }, onUsePlugin() { const { myPlugin } = this.data if (!myPlugin) { console.log('plugin is undefined') return } myPlugin.registerPush({}, (ret) => { console.log('registerPush ret:', ret) }) }, setBadge() { const { myPlugin } = this.data myPlugin.setBadge({ number: 10 }) }, clearBadge() { const { myPlugin } = this.data myPlugin.setBadge({ number: 0 }) }, [代码] 二、Android 对接指南 1. 配置插件 在微信开发者工具,前往[代码]project.miniapp.json[代码],点击右上角切换到 json 模式,然后按照将下方内容添加[代码]project.miniapp.json[代码] [代码]"mini-plugin": { "android": [ { "open": true, "pluginId": "wxca742ba6781a54fd",// 这是插件id,不可修改 "pluginVersion": "1.0.1" } ] } [代码] 2. 配置manifestPlaceholders 在[代码]mini-android[代码]新增一个 key[代码]manifestPlaceholders[代码],参考以下填写 请注意,插件目前集成了以下厂商:小米,oppo,vivo,荣耀,参数请参考极光的厂商通道参数申请指南 如果不需要厂商推送,则下面的对应厂商 key 保持默认的即可(请勿删除 key) [代码] "mini-android": { "manifestPlaceholders": { "JPUSH_PKGNAME": "你的包名", "JPUSH_APPKEY": "你的 appkey", "JPUSH_CHANNEL": "developer-default", "XIAOMI_APPKEY" : "MI-您的应用对应的小米的APPKEY", "XIAOMI_APPID" : "MI-您的应用对应的小米的APPID", "OPPO_APPKEY" : "OP-您的应用对应的OPPO的APPKEY", "OPPO_APPID" : "OP-您的应用对应的OPPO的APPID", "OPPO_APPSECRET": "OP-您的应用对应的OPPO的APPSECRET", "VIVO_APPKEY" : "您的应用对应的VIVO的APPKEY", "VIVO_APPID" : "您的应用对应的VIVO的APPID", "HONOR_APPID" : "您的应用对应的Honor的APP ID" } } [代码] 3. js调用 在添加插件以后,并编译到真机,就可以开始用js调用了 wx.miniapp.loadNativePlugin 加载插件,获取插件的js对象。 plugin.onMiniPluginEvent 监听消息。回调的对象结构如下。 [代码]{ android:{ type: '', data: {}, msg: '' } } [代码] 目前只有安卓type 只有[代码]onNotifyMessageArrived[代码](消息到达时) myPlugin.registerPush 开启极光推送。 targetsdkversion 33 及以上会需要系统授权。 回调返回对象。 [代码]{ "success": true, "token": "xxxx", "msg": "xxx" } [代码] 具体调用可以参考如下 [代码] loadJIGUANGPlugin() { const listener1 = (param) => { console.log('onMiniPluginEvent listener1', param) } // 注意,实际使用的时候,如果用户曾经同意过需要在 app.js/onLaunch 的时候注册 wx.miniapp.loadNativePlugin({ pluginId: miniAppPluginId, success: (plugin) => { console.log('load plugin success', plugin) const myPlugin = plugin this.setData({ myPlugin: plugin }) myPlugin.onMiniPluginEvent(listener1) // 注册 myPlugin.registerPush({}, (ret) => { console.log('myAsyncFuncwithCallback ret:', ret) }) }, fail: (e) => { console.log('load plugin fail', e) } }) }, [代码] 4. 监听用户点击消息 极光控制台发送消息时,配置 Android点击通知打开选择[代码]DeepLink[代码],也就是[代码]scheme[代码] [图片] 在 js 侧使用wx.miniapp.registOpenURL监听
07-23 - 微信小程序中一次性消息订阅次数问题?
用体验版测试发现,在微信小程序中,通过wx.requestSubscribeMessage让用户订阅同一个一次性消息多次,则可以给用户发送和订阅次数相同数量的消息,请问目前的微信小程序一次性消息订阅的规则是这样的吗?官方文档中哪里有具体说明?我还没有找到。此外,如果目前规则确实如此,有什么接口可以查到当前用户订阅一次性消息的次数,即在不超过系统阈值的前提下,还可以给用户传送多少次一次性消息?
04-25 - 【社交-笔记、社交-社区/论坛、社交-问答】类目修改指引说明
一、社交类服务,你需要了解: 1、审核流程: [图片] 2、内容安全审核机制: 小程序社交内容发布功能在进行内容安全验证时,若存在信息安全风险,需要尽快完善内容机制:①确保已接入内容安全API并要求所调用API可在小程序内任意发布的场景生效;②小程序内检测结果安全说明仅需提示用户所发布内容含违规信息即可;接口调用可参考:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.msgSecCheck.html 二、【社交-笔记】、【社交-社区/论坛】和【社交-问答】案例解析: 1、【社交-笔记】:小程序服务内容涉及提供用户自行生成内容(文字、图片、音/视频)的记录、分享 整改建议(2选1): ①补充选择:【社交-笔记】类目 注意事项:该类目补充后首次提审需进入属地主管部门二次审核流程(报备详情),时长为7天,开发者需提前规划好提审时间 ②移除社交笔记相关功能,包括但不限于移除前端、后台代码中所存在的社交功能、社交标签等 【示例】 [图片] 2、【社交-社区/论坛】:小程序服务内容涉及提供用户自行生成内容的发布/分享/交流服务,或含【社区】等tab 整改建议(2选1): ①补充选择:【社交-社区/论坛】类目 注意事项:该类目补充后首次提审需进入属地主管部门二次审核流程(报备详情),时长为7天,开发者需提前规划好提审时间 ②移除社交论坛相关功能,包括但不限于移除前端、后台代码中所存在的社交功能、社区tab等 【示例1】:小程序涉及提供用户自行生成内容的发布/分享/交流服务,需补充选择:社交-社区/论坛类目。 [图片] 【示例2】:小程序涉及建群、拉群,需补充:社交-社区/论坛类目。 [图片] 3、【社交-问答】:涉及提供问答服务 整改建议(2选1): ①补充选择:【社交-问答】类目 注意事项:该类目补充后首次提审需进入属地主管部门二次审核流程(报备详情),时长为7天,开发者需提前规划好提审时间 ②移除社交问答功能,包括但不限于移除前端、后台代码中所存在的问答功能、社交标签等 【示例】 [图片] 附:类目所需资质 [图片] 这是一份动态更新的文档,辅助开发者提前了解社交相关的业务形态所需申请的类目,避免开发者因类目不符审核失败或因不了解涉上述类目需二次审核流程时长导致无法按期发布上线,开发者如有其他疑问,可以通过目前开放的咨询渠道反馈: 1、微信开放社区-交流专区-小程序发帖咨询-提出问题-运营相关问题 2、驳回站内信通知-客服咨询入口(MP代码审核客服入口正处于灰度开放中,若未获得灰度测试入口,开发者可前往社区发帖咨询) 我们会根据新出现的问题、相关法律法规更新或产品运营的需要及时对其内容进行修改并更新,制定新的规则,保证微信用户的体验。建议开发者反复查看以便获得最新信息,定期了解更新情况
2022-03-18 - “2024版微信小店”接入说明、指引及小程序相关开发接入指南(最近更新日期2024年9月6日,更新关联账户数量限制)
写在最前面 之前曾写过“自定义交易组件相关接入指引”,广受好评,解决了很多开发者接入时遇到的问题,当然,其中也不乏一些喂不饱的白眼狼,得到便利还反咬一口,无耻至极,内容如有错误请指正,请文明交流! 本文会尽可能跟随官方功能迭代而更新内容 有问题可以跟帖回复,尽可能的给你解决(解决不了也没办法🤷♀️) 良言一句三冬暖,恶语伤人六月寒。 腾讯在2024年8月12日发布公告:腾讯计划自08月25日起,正式支持商家将视频号小店升级成微信小店。公告原文->点我查看 本文主要介绍24版的“微信小店”的升级内容及对接过程中各流程的注意事项与易错点(暂不包含新店开店流程),文档篇幅较长,如无需查看完整文档可以使用浏览器自带页面搜索功能进行关键字搜索(快捷键Ctrl+F )。 本文更新日志(后续会对本文变动内容进行标注) 2024.09.06 更新微信小店关联账号数量新规则 2024.08.27 小程序内嵌入商品跟佣问题修复 2024.08.26 更新客服、小程序内嵌入商品跟佣相关内容 2024.08.25 本文发布 1、“原视频号小店”升级“24版微信小店”后新增内容: 1.1 店铺管理新增“主页管理”入口 升级“微信小店”后,在管理后台->店铺管理会新增一个“主页管理”,相当于店铺有了一个首页,目前支持配置精选展示位、商品商品分类、主页背景图以及推荐商品排序 “小店”主页商品排序 调整店铺主页销售中商品的默认展示顺序,可以按照序号排序,数字越小越靠前;同时也支持对单个商品进行置顶或隐藏(图一为后台操作排序,图二圈中部分为对应排序展示) [图片] [图片] 注意事项及其他说明 最多可以置顶50个商品 后序置顶商品会在前序置顶前展示 “小店”主页商品分类 可以在主页创建分类并关联商品,当前支持2级分类 [图片] 注意事项及其他说明 1)分类目前只支持上移/下移排序,暂不支持置顶操作 2)单个分类不能超过10个汉字,支持emoji(这个好评) 3)一二级分类暂未测试到数量上限,不过不建议单个一级分类下配置二级分类过多,有可能会影响其他分类展示,尤其是该分类在第一位的时候 4)分类名称会有内容审核,敏感词及平台不允许发布的内容无法进行创建 5)一个商品是支持挂在多个分类下 主页背景图 可配置一张主页背景图,会按16:9比例展示在主页顶部(自己店铺上传的还在审核,先放官方示意图) [图片] 注意事项及其他说明 1)图片仅支持JPEG、JPG、PNG、BMP格式,大小不超过10M 2)背景图片需审核,带二维码、违反公序良序及其他违反法律法规的内容会被驳回 精选展示位 在主页店铺信息下展示推荐内容,目前支持配置展示商品、指定视频号视频、单篇公众号内容三种内容,样式目前只有大图和小图两种展示方式。 用户端展示商品内容示例-小图模式: [图片] 用户端展示视频号内容示例-小图模式 [图片] 用户端展示公众号内容示例-小图模式 [图片] 用户端展示商品内容示例-大图模式 [图片] 用户端展示视频号内容示例-大图模式 [图片] 用户端展示公众号内容示例-大图模式 [图片] 注意事项及其他说明 1)图片仅支持JPEG、JPG、PNG、BMP格式,测试图片可以超过10M(后续是否会改不清楚,不过图片过大加载是真的慢) 2)展示内容会根据展示内容拉取对应商品首图、视频号视频封面以及公众号文章封面,也可以自行上传图片,这里需要注意的点是即使你的图片在商品可以过审核,但在主页推荐不一定能过审核,两者审核尺度不同 3)小图模式至少配置3个展示位才可以保存,而大图模式配置1个展示位就可以,最多允许配置5个展示位 4)商品仅支持配置自己店铺内商品,视频号内容支持配置任意视频号博主任意公开视频,公众号内容支持选择任意公众号任意公开内容 5)无论大图模式还是小图模式,目前仅支持配置1:1的图片,后续是否优化暂不可知 1.2 客服由企业微信客服切换为小店客服 类似原小程序客服,可通过网页和手机端接收、处理客户咨询。目前已支持查询咨询客户下单信息,向咨询用户发送商品、订单消息,配置快捷短语等,基础功能可以满足大部分用户需求,终于可以不用再去付费买三方客服应用了,这个要👍。 注:这里截图不放自己店铺了,涉及用户隐私太多,图示为官方示意图 1.2 PC端: [图片] 1.2 移动端: [图片] 注意事项及其他说明 客服功能存量商户升级指引"->点我查看"(需升级为微信小店后操作) 1.3 新增店铺关联账号 关联账号可以直接售卖小店内的商品,目前支持关联5个视频号与5个公众号,分别可设置1个对外展示账号。 对外展示账号样式-示例图(目前不会显示视频号、公众号名称,只有入口) [图片] 注意事项及其他说明 1)对外展示账号可以进行修改,每种对外展示类型账号每年3次修改机会。 2)配置关联账号后,该账号可在视频号带货中心>橱窗管理中管理带货商品 3)关联账号详细说明及要求:“->点我查看” 4)如果在电脑上打开了客服网页版且在活跃中,当前手机上是不会重复接收到消息推送,预计9月份会有客服PC端和手机APP推出 5)若微信小店店铺开店满30天,且近30天内DSR均大于等于4.6分,关联账号数量可提升至视频号和公众号各10个。(2024.09.06更新) 2、小程序侧新增能力 2.1 小程序支持内嵌微信小店首页,展示小店首页,并进行跳转交易 store-home 开发文档地址:->点我直达 小程序嵌入微信小店首页组件样式 [图片] 注意事项及其他说明 1)基础库需要3.5.5,否则真机调试不显示,可以在开发者工具选择3.5.5版本进行推送 [图片] 2)支持任意升级微信小店后的任意微信小店APPID 3)内嵌入微信小店首页时会有一个“小店”文字显示在下方,可以通过下述方式屏蔽, .wx_store_home .wx_store_home_img_desc { display: none; } 4)第3点中的代码同时也支持屏蔽组件其他类型信息 wx_store_home_info wx_store_home_img_box wx_store_home_info_logo wx_store_home_img_box wx_store_home_info_title wx_store_home_info_title_text wx_store_home_info_history 2.2 小程序内嵌微信小店商品,展示小店商品,并进行跳转交易且支持小店优选联盟带货跟佣功能。 store-product 开发文档地址:->点我直达 小程序内嵌微信小店商品组件样式 [图片] 注意事项及其他说明 1)基础库需要3.5.5,否则真机调试不显示 2)支持任意升级微信小店后的任意微信小店商品ID,这里需要使用微信小店商品id,不支持商户自定义商品ID 3)如果商品违规下架,内嵌商品会直接显示商品违规下架 4)商品组件也可以参考店铺主页代码,屏蔽对应组件内容信息 5)跟佣还未测试,稍后补充 2.2.1 小程序内嵌微信小店商品优选联盟带货跟佣 2024.08.26 14:00:00 目前带货跟佣测试不通,视频号助手API接口实际请求返回无“product_promotion_link”参数,接口返回参数“promotion_key”值类似“product_promotion_link”,疑似为“product_promotion_link”信息。 在小程序前端测试中,store-product组件包含“product_promotion_link”参数时,无法展示对应小店商品,改为“promotion_key”可以正常显示。 目前测试来看小程序侧并不会校验跟佣信息是否正确,建议自己开发测试时一定要慎重一下此处… 2024.08.27 17:30:00 跟佣测试成功,视频号助手API接口实际请求返回无“product_promotion_link”参数,接口返回参数“promotion_key”即为store-product组件的product_promotion_link参数。 注意:文档写的是product-promotion-link,实际应为product_promotion_link,如果使用product-promotion-link,在前端是不会展示对应商品的。 3、搜一搜新增“小店”分类 截止文章更新,目前只支持根据关键词搜索到店铺,暂不支持搜索到商品 [图片] 持续更新中…
09-06 - 【纯小白】走通云托管本地调试开发的过程,持续补充~
window环境下,看微软巨硬的文档安装docker desktop~ https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-containers -------------------------------------------------------------- 使用云托管在本地调试的具体操作问题与解决。如果你在使用云托管本地调试开发,面对同样的问题时,希望可用帮到你! 操作系统: WINDOW 10 项目模板:koa C盘至少留个5 G空间 前置工具准备: 安装vscode 、weixin-cloudbase 插件、node 12+、npm安装docker 众所周知 官方文档链接docker网站你是打不开的,除非... !哈哈, 需要找网上找找安装一下Docker desktop 拉取官方koa 服务版本,或者手动下载代码到文件夹,如果你打不开github , 可用安装一个win应用 Watt Toolkit 里面有免费的github 加速!安装微信云托管CLI 工具包 https://cloud.weixin.qq.com/cli/basics.html,运行迁移到云托管指令,并可用使用deploy 自动部署到云托管如果本地调试需要多个服务时,按照官方文档提示的需要打开配置文件所在的同层目录,例如我的: [图片] 我这里顶层目录wxcloud, 同层添加项目配置文件,里面指定当前需要运行的调试项目;services 目录里可以有多个服务项目文件夹! [图片] user 文件夹 - 是我拷贝的官方koa 服务模板,你可以在同层添加自己的CLI项目,运行前需要更改project.config.json 内的指定名称! 好了,走到这里是一堆的枯燥安装等待时间... 下面,开始整活! 一、Docker desktop 更换国内可用源! 打开docker desktop ----》 设置 ---------》Docker engine 配置文件中,添加: "registry-mirrors": [ "https://hub.uuuadc.top", "https://docker.anyhub.us.kg", "https://dockerhub.jobcher.com", "https://dockerhub.icu", "https://docker.ckyl.me", "https://docker.awsl9527.cn" ] 别找其他的啦,什么网易的、docker cn的源运行后都会报错!以上源配置后可用! 二、按照官方文档配置weixin cloudbase 插件属性,主要2个: appid 和 密匙(按照官方教程在云托管控制台 生成) 三、修改调试配置文件, 在根目录下.cloudbase\container\debug.json 中,添加数据库环境变量值! 否则,运行调试项目,会提示:sequelize 数据库连接不了,访问的地址是127.0.0.0 四、运行调试项目前,先启动VPC代理数据库服务: [图片] 如果用到wx 开放接口,同样需要开启相关代理。 五、启动Local container容器服务 经过好多秒后,启动成功!可以在终端看到: [图片] 一些熟悉的sequelize 执行的脚本,最后启动成功 监听80端口! 同样,docker desktop内也可以看到容器已启动: [图片] 这时,就可以容器右键,浏览器中打开,no wx auth [图片] 最终的效果, [图片] 这一刻!真舒服,折腾了一下午。测试点击 按钮【计数】,终端看处理, [图片] 请求正常完成!云托管控制台-MYSQL- 数据库管理, 打开DMC 登录自己的数据库,查看数据有变更~ 🤭
07-09 - 使用 wx.cloud.callContainer 访问本地docker容器 的问题
先总结: 环境id要填线上环境id。 X-WX-SERVICE要填weixin cloudbase containers里的要调用的容器名称callContainer请求服务时,如果第一次请求服务报错了比如404之类的错误,接着用callContainer请求同一个接口,callContainer不会发起请求,而是给小程序前端直接返回 INVALID_PATH 的错误码和serviceName not exit的错误消息。在callContainer里加上apiVersion:2 的参数可以规避2次及以上的重复调用直接报INVALID_PATH的问题官方文档 https://developers.weixin.qq.com/miniprogram/dev/wxcloudrun/src/guide/debug/ 昨天callcontainer调本地的docker服务时,一直有问题调不通。最后排查出问题: 1.官方文档只提到X-WX-SERVICE要与容器名相同,一开始试了wx-cloudbase里的容器名称,发现有问题,一直报INVALID-PATH,envdbid无效,以为是X-WX-SERVICE填错了。 [图片] 后面改成docker ps 里names的名字,还是报错 [图片] 于是还想是不是环境id有问题。试了各种环境id等。 今天从官方微信群得知环境id是要填 云托管里的 线上环境id的,于是后试了下X-WX-SERVICE用wx-cloudbase的容器名称,这次发现第一次callcontainer调用本地容器日志显示是接受到请求的,但是后面又没有请求记录了。感觉这里面有问题。重新加载模拟器,又复现了问题。原来是callcontainer请求的接口,服务报了错误后,继续调用同一个接口时,callcontainer不会再向服务发送请求了,而是直接给小程序报”INVALID_PATH“的错误码,也是这个原因让我一直以为是X-WX-SERVICE填错了。 后面把参数改正确,就可以正常调用了 [图片]
2022-03-17 - 想做一个行业相关付费知识类的小程序,包括音视频,企业需要什么资质?
想做一个行业相关付费知识类的小程序,包括音视频,企业需要什么资质?
2023-05-10 - 【干货分享】小程序自定义交易组件开通及打通视频号场景
想要在视频号中拥有交易购物能力,必须接入交易组件,目前包含标准版交易组件和自定义版交易组件两种接入方案,以下是微信给出的对比及适用场景。 [图片] 因为有赞已经为商家小程序提供了完善的电商能力,所以自定义交易组件的方案更适合有赞商家小程序来对接微信视频号。 本文主要分享自定义交易组件开通的流程以及基于有赞场景去接入的时候遇到的一些坑,希望能帮助到大家!~ 一、总流程[图片] 二 、开通微信小程序 这个不必多说,但需要注意的是 1、必须是一个非个人主体的小程序 2、小程序类目需要符合下图要求 [图片] 三、开通微信支付后续的订单创建、同步会拉起微信的收银台完成支付,所以需要小程序开通微信支付的能力 四、检查是否已经开通标准版交易组件标准版和自定义版交易组件是二选一的,所以需要先检查是否开通了标准版交易组件 如果已经开通标准版但没有完成开店任务的话还是可以在微信后台取消使用的; 但如果连开店任务也完成的话,需要先注销(目前微信还没有开放注销功能),如果是有赞的商家的话可以联系有赞客服协助处理 五、授权自定义交易组件权限因为有赞是微信小程序的三方开发服务商,所以需要商家授权自定义交易组件权限,当然如果非服务商开发的话不用关心。 六、申请接入微信接口地址:点击跳转 http请求方式:POST https://api.weixin.qq.com/shop/register/apply?access_token=xxxxxxxxx 只需要获取到access_token后请求这个接口即可,接口是同步返回的(历史上是有异步的版本的,这块如果很早接触但没有在维护过的同学要注意了),这个接口请求失败的话可能是以下原因: access_token过期小程序类目不符合已经开通了标准版交易组件七、完成商品接口调试7.1 同步商品类目至微信审核你同步商品的三级类目id以及该类目在微信这边是否要求上传相应的类目资质,需要通过获取微信全量三级类目接口来查询 微信接口地址:点击跳转 http请求方式:POST https://api.weixin.qq.com/shop/cat/get?access_token=xxxxxxxxx 根据回参中的 qualification_type 类目资质类型 product_qualification_type 商品资质类型 来判断资质是否需要上传 根据回参中的 qualification 类目资质 product_qualification 商品资质 来查询需要上传资质 将回参中的third_cat_id记录,后续同步商品时会用 需要同步的话,就要调用上传类目资质接口,这是个异步接口,审核结果通过需要通过事件回调获取 微信接口地址:点击跳转 http请求方式:POST https://api.weixin.qq.com/shop/audit/audit_category?access_token=xxxxxxxxx 这块资质图片的字段建议先通过上传图片接口换取media_id来传入 7.2 同步品牌至微信审核如果你的同步的商品是一个品牌商品,那么在同步商品之前需要先同步品牌信息至微信审核,在审核通过的回调信息中获取到brand_id,之后同步商品时传入 微信接口地址:点击跳转 http请求方式:POST https://api.weixin.qq.com/shop/audit/audit_brand?access_token=xxxxxxxxx 同样的,这块品牌的一些证照图片的字段建议先通过上传图片接口换取media_id来传入 这里导致审核失败的几个原因: 上传证照的图片有问题,譬如有水印、大小超过2M、图片不能正常显示等证照过期 7.3 同步商品至微信审核现在就可以将调用同步商品接口完成商品同步了,也是一个异步接口,需要等审核回调 微信接口地址:点击跳转 http请求方式:POST https://api.weixin.qq.com/shop/spu/add?access_token=xxxxxxxxx 这里的tips引用下微信文档上的 注意:[代码]third_cat_id[代码]请根据获取类目接口拿到,并确定其[代码]qualification_type[代码]类目资质是否为必填,若为必填,那么要先调类目资质审核接口进行该[代码]third_cat_id[代码]的资质审核;[代码]qualification_pics[代码]请根据获取类目接口中对应[代码]third_cat_id[代码]的[代码]product_qualification_type[代码]为依据,若为必填,那么该字段需要加上该商品的资质图片;若需要上传某品牌商品,需要按照微信小商店开通规则开通对应品牌使用权限。微信小商店品牌开通规则:点击跳转,若无品牌可指定无品牌(无品牌[代码]brand_id: 2100000000[代码])。库存字段[代码]stock_num[代码]注意如果是0则无法在视频号直播上架该商品。部分特殊品类商品标题需要按照规范上传,请仔细阅读,避免审核不通过。商品标题规则:点击跳转。商品详情字段[代码]desc_info.desc[代码] [代码]desc_info.imgs[代码] 虽然非必填,但一些特殊品类仍然需要上传商品详情,请仔细阅读,避免审核不通过。商品详情规则:点击跳转。 这里应该是有赞场景下去开通自定义交易组件卡点比较严重的一环了,因为有赞的商家基数较大,商品种类较多,所以让商家自己同步一个商品至微信的话很容易被微信审核拒掉。有赞这边给到的一个方案是商家在开通自定义交易组件时,系统会帮商家创建一个简单的测试商品,因为这个商品无类目、无品牌且经验证100%通过商品审核,所以这一环的卡点也就能够被顺利疏通。 八、完成订单接口调试商品同步好后,需要对这个商品用微信支付完成一次交易,并将订单同步至微信 8.1 创建、同步订单因为自定义交易组件历史版本的原因,目前存在两套创建订单并同步至微信的方案 需要后端调用创建订单的微信api获取到ticket,然后小程序获取并通过ticket调用wx.requestPayment来拉起微信收银台(可能会废弃)小程序直接将订单信息通过wx.requestOrderPayment同步给微信,并拉起微信收银台微信这边推荐使用第二套方案 8.2 支付校验1、订单全量同步 如果选择订单全量同步到微信的话,那就不需要支付校验。 2、场景校验后同步 使用scene/check方法先去判断是否为视频号场景(这块后续可能会拓展,交易组件应该还会支持视频号以外的场景),是的话再去同步订单至微信。 这里建议在自定义交易组件接口调试过程中可以全量同步,但后续正常业务下单流程还是通过scene/check方式。因为如果你的小程序商城还支持其他支付方式的话,全量同步订单的话就会有坑,原因是无论你选择哪种创建、同步订单的方式都需要唤起微信支付,这样在原本能支持多种支付方式的场景下只能使用微信支付。 8.3 发布小程序因为创建、同步订单和支付校验有一些小程序的改动,所以小程序还是需要发布版本的。仅是开通流程的话走微信开发者工具也ok。 8.4 支付同步微信接口地址:点击跳转 http请求方式:POST https://api.weixin.qq.com/shop/order/pay?access_token=xxxxxxxxx 创建订单并支付成功后调用支付同步接口,就会将订单状态流转待发货 九、完成物流接口调试9.1 订单发货微信接口地址:点击跳转 http请求方式:POST https://api.weixin.qq.com/shop/delivery/send?access_token=xxxxxxxxx 9.2 订单收货微信接口地址:点击跳转 http请求方式:POST https://api.weixin.qq.com/shop/delivery/recieve?access_token=xxxxxxxxx 十、完成售后接口调试10.1 创建售后微信接口地址:点击跳转 http请求方式:POST https://api.weixin.qq.com/shop/aftersale/add?access_token=xxxxxxxxx 10.2 更新售后微信接口地址:点击跳转 http请求方式:POST https://api.weixin.qq.com/shop/aftersale/update?access_token=xxxxxxxxx 物流、售后接口的调试,如果只是开通流程的话,建议直接后端自动调用完成,可以减少卡点,帮助快速开通。 十一、完成接入任务11.1 获取接入状态微信接口地址:点击跳转 http请求方式:POST https://api.weixin.qq.com/shop/register/finish_access_info?access_token=xxxxxxxxx 回参中的access_info内 spu_audit_success 在商品接口调试成功后会被置为1 pay_order_success 在订单接口调试成功后会被置为1 send_delivery_success 在物流接口调试成功后会被置为1 add_aftersale_success 在售后接口调试成功后会被置为1 11.2 完成所有接入任务微信接口地址:点击跳转 http请求方式:POST https://api.weixin.qq.com/shop/register/finish_access_info?access_token=xxxxxxxxx 这个接口可以在上面获取接入状态接口返回的spu_audit_success、pay_order_success、send_delivery_success、add_aftersale_success的字段都为1时一次性调用完成所有。 当下面的任务都被完成后,自定义交易组件就已经完成接入了 6:完成spu接口,7:完成订单接口,8:完成物流接口,9:完成售后接口,10:测试完成,11:发版完成 十二、自定义交易组件接入视频号场景微信接口地址:点击跳转 http请求方式:POST https://api.weixin.qq.com/shop/register/finish_access_info?access_token=xxxxxxxxx 只需要调用场景申请接口来申请视频号场景,然后等待微信申请成功就可以完成自定义交易组件接入视频号了 十三、微信后台添加视频号推广员需要去微信后台添加一个视频号为推广员,然后就可以在这个视频号关联到已经开通自定义交易组件的小程序,关联后就可以上架已经商品同步接口调用通过的商品了。 [图片] [图片]
2021-10-27 - 服务商快速创建的小程序如何开通云开发?
[图片] 背景 第三方服务商进行开发时,利用微信开放平台接口可以快速创建小程序,实现快速商业化。 [图片] 现在,服务商快速创建的小程序也可以开通云开发了,具体操作步骤如下: 一、更新信息 服务商需要告知小程序所有者,前往微信公众平台mp.weixin.qq.com,使用微信扫描登录框中二维码,选择创建的小程序,授权登录。 [图片] 进入小程序管理后台之后,点击成员管理,在管理员处点击修改按钮: [图片] 在弹出框中使用微信扫码认证: [图片] 认证过后,点击手机号更新按钮,写入管理员手机号,并再次微信扫码验证身份,提交。 [图片] 经过上述操作后,创建的小程序就绑定了手机号,服务商可以继续按照自己的开发模式进行开发了。 二、开通云开发 服务商第三方代开发模式下,可以通过 API 接口快速开通云开发并创建云开发环境。 [图片]当然,小程序管理员本身也可以自行登录小程序开发者工具开通云开发。之后服务商可以通过获取云开发环境接口获取云开发环境相关信息。 [图片]有关于服务商开发的相关的问题,可以前往[开放平台服务商专区](https://mp.weixin.qq.com/s/oN1tRjikxy9ytAcRmJslPQ)发帖交流。 产品介绍 云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为开发者提供高可用、自动弹性扩缩的后端云服务,包含计算、存储、托管等serverless化能力,可用于云端一体化开发多种端应用(小程序,公众号,Web 应用,Flutter 客户端等),帮助开发者统一构建和管理后端服务和云资源,避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。 开通云开发:[https://console.cloud.tencent.com/tcb?tdl_anchor=techsite](https://console.cloud.tencent.com/tcb?tdl_anchor=techsite) 产品文档:[https://cloud.tencent.com/product/tcb?from=12763](https://cloud.tencent.com/product/tcb?from=12763) 技术文档:[https://cloudbase.net?from=10004](https://cloudbase.net?from=10004) 技术交流加Q群:601134960 最新资讯关注微信公众号【腾讯云云开发】
2020-11-24 - 「笔记」服务商快速创建小程序开通云开发踩坑
前言 现在越来越多的人通过服务商来创建小程序了,因为通过服务商快速创建小程序是直接认证的,而且同主体最多可以创建50个小程序。 在微信给服务商提供了便利的同时,也方便了一些服务商割韭菜,这些不在本文讨论范围内。 痛点 1.通过服务商快速创建小程序默认无法开通云开发环境,需要小程序的管理员自行登陆小程序后台进行管理员的手机绑定。 2.当管理员进行手机绑定的时候,如果当前微信号已经绑定5个以上小程序的时候,是无法成功在未绑定手机号的小程序中绑定手机号,这就导致无法开通云开发。 总结 如果想通过服务商创建50个小程序,并且每个小程序都开通独立的云开发环境的想法的还是放弃吧。 彩蛋 目前微信开放平台正在内测 服务商代云开发 功能,希望将来能解决以上的痛点。 官方文档/文章 快速创建小程序 服务商快速创建的小程序如何开通云开发?
2020-12-02 - 小程序登录、用户信息相关接口调整说明
公告更新时间:2021年04月15日考虑到近期开发者对小程序登录、用户信息相关接口调整的相关反馈,为优化开发者调整接口的体验,回收wx.getUserInfo接口可获取用户授权的个人信息能力的截止时间由2021年4月13日调整至2021年4月28日24时。为优化用户的使用体验,平台将进行以下调整: 2021年2月23日起,若小程序已在微信开放平台进行绑定,则通过wx.login接口获取的登录凭证可直接换取unionID2021年4月28日24时后发布的小程序新版本,无法通过wx.getUserInfo与<button open-type="getUserInfo"/>获取用户个人信息(头像、昵称、性别与地区),将直接获取匿名数据(包括userInfo与encryptedData中的用户个人信息),获取加密后的openID与unionID数据的能力不做调整。此前发布的小程序版本不受影响,但如果要进行版本更新则需要进行适配。新增getUserProfile接口(基础库2.10.4版本开始支持),可获取用户头像、昵称、性别及地区信息,开发者每次通过该接口获取用户个人信息均需用户确认。具体接口文档:《getUserProfile接口文档》由于getUserProfile接口从2.10.4版本基础库开始支持(覆盖微信7.0.9以上版本),考虑到开发者在低版本中有获取用户头像昵称的诉求,对于未支持getUserProfile的情况下,开发者可继续使用getUserInfo能力。开发者可参考getUserProfile接口文档中的示例代码进行适配。请使用了wx.getUserInfo接口或<button open-type="getUserInfo"/>的开发者尽快适配。开发者工具1.05.2103022版本开始支持getUserProfile接口调试,开发者可下载该版本进行改造。 小游戏不受本次调整影响。 一、调整背景很多开发者在打开小程序时就通过组件方式唤起getUserInfo弹窗,如果用户点击拒绝,无法使用小程序,这种做法打断了用户正常使用小程序的流程,同时也不利于小程序获取新用户。 二、调整说明通过wx.login接口获取的登录凭证可直接换取unionID 若小程序已在微信开放平台进行绑定,原wx.login接口获取的登录凭证若需换取unionID需满足以下条件: 如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用2月23日后,开发者调用wx.login获取的登录凭证可以直接换取unionID,无需满足以上条件。 回收wx.getUserInfo接口可获取用户个人信息能力 4月28日24时后发布的新版本小程序,开发者调用wx.getUserInfo或<button open-type="getUserInfo"/>将不再弹出弹窗,直接返回匿名的用户个人信息,获取加密后的openID、unionID数据的能力不做调整。 具体变化如下表: [图片] 即wx.getUserInfo接口的返回参数不变,但开发者获取的userInfo为匿名信息。 [图片] 此外,针对scope.userInfo将做如下调整: 若开发者调用wx.authorize接口请求scope.userInfo授权,用户侧不会触发授权弹框,直接返回授权成功若开发者调用wx.getSetting接口请求用户的授权状态,会直接读取到scope.userInfo为true新增getUserProfile接口 若开发者需要获取用户的个人信息(头像、昵称、性别与地区),可以通过wx.getUserProfile接口进行获取,该接口从基础库2.10.4版本开始支持,该接口只返回用户个人信息,不包含用户身份标识符。该接口中desc属性(声明获取用户个人信息后的用途)后续会展示在弹窗中,请开发者谨慎填写。开发者每次通过该接口获取用户个人信息均需用户确认,请开发者妥善保管用户快速填写的头像昵称,避免重复弹窗。 插件用户信息功能页 插件申请获取用户头像昵称与用户身份标识符仍保留功能页的形式,不作调整。用户在用户信息功能页中授权之后,插件就可以直接调用 wx.login 和 wx.getUserInfo 。 三、最佳实践调整后,开发者如需获取用户身份标识符只需要调用wx.login接口即可。 开发者若需要在界面中展示用户的头像昵称信息,可以通过<open-data>组件进行渲染,该组件无需用户确认,可以在界面中直接展示。 在部分场景(如社交类小程序)中,开发者需要在获取用户的头像昵称信息,可调用wx.getUserProfile接口,开发者每次通过该接口均需用户确认,请开发者妥善处理调用接口的时机,避免过度弹出弹窗骚扰用户。 微信团队 2021年4月15日
2021-04-15 - 服务号订阅通知灰度测试
服务号模板消息能力的设计初衷,旨在帮助开发者实现及时通知,但存在一些问题,如: 1. 部分开发者在用户无预期的情况下,发送与用户无关的信息,对用户造成了骚扰。 2. 模板消息是用户触发后的通知消息,不支持营销类消息,不能满足部分业务需求。 为提升微信用户体验,我们开始灰度测试服务号订阅通知功能。 能力说明 开发者可在服务号图文消息、网页等场景设置订阅功能,用户自主订阅后,开发者可按需求下发一条对应的订阅通知。 [图片] 用户可在图文订阅通知 [图片] 用户可在网页订阅通知 灰度测试计划 服务号订阅通知功能即日上线,已认证的境内主体服务号可前往 MP 后台开通使用,详见说明。 1. 服务号订阅通知灰度测试期自2021年1月27日0:00至4月30日24:00,期间服务号模板消息可正常使用;灰度测试期结束后服务号订阅通知的策略将另行公布,届时以官方信息为准; 2. 开发者使用订阅通知功能时,需遵循运营规范,不可用奖励或其它形式强制用户订阅,不可下发与用户预期不符或违反国家法律法规的内容。具体可参考文档:《微信公众平台运营规范》 微信团队 2021年1月27日
2021-01-29 - 【服务商案例】企业微信+泛微OA:专业的企业数字化转型搭档
[图片] 服务商:上海泛微网络科技股份有限公司 服务类型:标准应用服务商、定制开发服务商、私有化部署运维服务商 团队规模:4300人 ———————————————————————————————————— 发展历程: 2018年7月成为企业微信服务商 2019年6月,共10款标准化SaaS应用上架企业微信第三方应用市场 合作成果:与企业微信携手服务永达汽车、百果园、PICC等大型企业3000余家 上海泛微网络科技股份有限公司十七年来专注于OA协同办公软件的研发和服务,泛微移动办公云OA(e-teams)与企业微信达成生态合作。 泛微适用于大型企业的e-cology和适用于中型企业的e-office也在企业微信中对客户提供定制化的开发与服务。 泛微与企业微信开始合作的2018年,营收较前一年增加700万元。 应用场景: 泛微OA与企业微信结合,助力企业数字化转型 企业微信满足基础通讯功能,泛微提供的OA应用支持企业内部协同管理,企业微信连接微信,让企业实现与外部客户、上下游的连接。这种结合将为企业数字化转型助力,为企业未来的精细化运营和专业管理提供丰富的可能性。 以前:纸质销售合同及客户订单线下逐一审批时间长,销售人员工作量大,影响其他业务开展 现在:销售合同和客户订单数字化,线上移动审批,缩短处理时间,提升销售工作效率,减少内部人力消耗
2019-09-27 - 【服务商案例】客户规模从千到万,和企业微信共同成长
[图片] 服务商:成都冠一科技有限公司 服务类型:技术支持服务商 团队规模:180人 ———————————————————————————————————— 发展历程 2018年5月 成为企业微信合作伙伴 2019年6月,与企业微信合作客户突破万家 合作成果:拉活率达20%,收入每月递增10% 2018年中旬拉新360多家企业只有2家成功转化,现在每拉新10家便有2家企业被拉活 2019年以来企业微信带来的收入呈每月10%递增趋势,其中5月收入比4月多达25%以上 经验分享:结合已有资源,给企业微信客户一定利益倾斜 名冠天下特别制定了针对使用企业微信客户的市场策略,为他们进行一定的利益倾斜:“需要做网站的客户找来时,我们会告知他们,如果他们启用企业微信,我们会免费帮他们做网站,这是因为未来他们需要对企业微信定制开发时,也会率先找我们,我们在这个推广链中有力地借助了企业微信的优势。” “使用企业微信的客户越多,我们可以推广成功的软件越多,越多企业选择我们推广的软件,企业微信的使用率就越高,在这种良性循环中,名冠天下客户规模已经破万,感谢企业微信,助力我们服务商快速成长!” —— 名冠天下董事长 张冠一
2019-09-27 - CabloyJS微信模块、企业微信模块已出齐
前言 当[代码]Cabloy-企业微信[代码]模块完成时,加上之前已完成的[代码]Cabloy-微信[代码]模块,关于在CabloyJS中与[代码]微信/企业微信[代码]对接的任务已经完成了。这些模块的目标就是,只需填入各类服务的参数,就可以直接进入具体的业务开发,从而达到[代码]开箱即用[代码]的效果 背景分析 1. 账户体系 [代码]微信/企业微信[代码]的开发,有诸多的坑,而最大的坑就是[代码]账户体系[代码]了 首先,[代码]微信[代码]与[代码]企业微信[代码]是不同的账户体系 在[代码]微信[代码]中,openid是识别用户的唯一标识,如果开通了[代码]微信开放平台[代码],那么就可以通过unionid把散落在[代码]微信公共号[代码]、[代码]微信小程序[代码]等不同服务的openid关联起来,标识同一个用户。那么,如何把openid与系统中的用户系统对接起来?如果开通了unionid,又如何对接?unionid开通之前的旧账户是否也可以平滑迁移? 在[代码]企业微信[代码]中,通过userid来识别每个企业成员。与[代码]微信[代码]不同的是,[代码]企业微信[代码]通过[代码]部门树[代码]来管理成员,从而为[代码]资源授权和分配[代码]提供组织依据。那么,我们在进行系统初始化的第一步就是要把企业的[代码]部门和成员[代码]同步到系统中,并实现[代码]双向查找[代码]功能 2. 杂项 除了纷繁复杂的账户体系对接任务,接下来我们还要面对一些随时开发随时遇到的小问题。因为微信/企业微信开发涉及到的场景、概念和术语有很多,往往需要通读官方文档。而官方文档对有些概念的表述语焉不详,惜墨如金,于是不得不写代码来验证一些猜测,然后再回头重温文档。当这一遍走完把项目完成后,如果有一个新项目,很可能还要再走一遍。这里仅仅列举一些经常出现的问题: JSON与XML:微信公共号的消息推送系统采用XML作为数据格式,而小程序既要支持XML也要支持JSON。同时又有明文模式、兼容模式、安全模式之别。 openid/unionid与openId/unionId:在进行账号登录时,微信公共号返回的是[代码]openid/unionid[代码],而小程序返回的[代码]openId/unionId[代码]。如果稍不留意,就掉在坑里了 [代码]企业微信[代码]支持不同的应用:内置的应用、第三方应用、自建应用、关联的小程序等等。这些应用如何进行架构,提供统一便捷的API调用模型 [代码]企业微信小程序[代码]本体是[代码]微信小程序[代码],然后关联到[代码]企业微信[代码]成为一个企业微信应用。只有明白了这些概念和关系,才能准确的进行对接 核心目标 1、常见微信API SDK的问题 不同的开发语言,都能找到对应的微信API SDK。但这些微信API SDK往往是把官方提供的http api进行了一个语言层面的封装,很少走得更远的。比如,通过微信API SDK,我们可以很方便的获取AccessToken,可以获取User信息,但是如何把获取到的User与系统对接,如何处理openid和unionid之间的关联,仍然需要我们自己设计和开发 再比如,通过微信API SDK可以很方便的获取企业微信的部门和成员。但是如何与系统中的角色和用户对接,并支持不同的场景和登录方式,仍然有大量的工作需要做 2. 开箱即用 而CabloyJS的[代码]微信/企业微信[代码]模块的[代码]核心目标[代码]就是提供[代码]开箱即用[代码]的效果。只需配置好参数,所有的对接工作全部自动完成,使我们一步跨过纷繁的细节,直接进入具体的业务开发当中。当然,CabloyJS的[代码]微信/企业微信[代码]模块是完全[代码]开源[代码]的,我们仍然可以从中清晰地看到这些细节,以及处理的方式 为什么CabloyJS可以做到[代码]开箱即用[代码]的效果?就是因为CabloyJS是全栈NodeJS框架,可以把[代码]前端组件[代码]、[代码]后端服务[代码]、[代码]数据存储与访问[代码]等等,有机的结合在一起 比如,CabloyJS模块通过这些前后端的配合,直接实现了企业微信中部门与用户的同步工作,甚至还通过CabloyJS底层提供的[代码]SocketIO[代码]机制实现了前端同步进度的实时显示 [图片] 两大亮点 基于CabloyJS全栈业务开发框架本身提供的特性,使得[代码]Cabloy-企业微信[代码]模块具有以下两个显著的亮点: 1. PC、Mobile自适应 许多企业微信应用存在这样一个问题:在Mobile端只能使用一部分功能,其他更多功能则需要登录PC系统进行操作 而CabloyJS框架下的[代码]Cabloy-企业微信[代码]允许所有的业务功能同时支持PC和Mobile使用。同时又能保证以下两点: 通过角色权限系统,控制不同用户使用不同功能 前端页面采用异步加载策略,从而适应大型项目的开发 Mobile端效果 [图片] PC端效果 [图片] 2. 数据孤岛 企业从不同服务提供商采购不同的企业微信应用,必然导致[代码]数据孤岛[代码]的出现,而且这些数据散存在不同服务商的后台,缺乏数据联动与共享机制 而CabloyJS框架本身就是基于[代码]业务模块[代码]构建的。企业自建的模块或者使用第三方的模块,都汇集在一个CabloyJS项目之中,并进行私有部署,从而从根本上解决了[代码]数据孤岛[代码]的问题,不仅能实现数据联动与共享,也可以更灵活的进行数据采集、处理和分析 归根结底一句话,数据和程序都掌握在自己的手中 特性 基于CabloyJS全栈框架提供的便利性和灵活性,[代码]Cabloy-企业微信[代码]主要有如下特性: 1. 一站式整合 当前整合了[代码]企业微信自建应用[代码]和[代码]企业微信小程序[代码]的接口,具体如下: 场景 名称 说明 自建应用 消息推送系统 自动完成接口对接,并对用户进行认证 自建应用 网页登录 自动跳转微信登录,并对用户进行认证 自建应用 网页JSSDK 自动注入JSSDK,并自动完成配置 小程序 后台登录接口 自动完成接口对接,并对用户进行认证 小程序 前端SDK 提供SDK,便于企业微信小程序前端直接访问CabloyJS后端API 2. 开箱即用 只需配置好企业微信账号参数,所有接口自动完成对接 3. 多小程序支持 [代码]企业微信[代码]可以关联多个[代码]企业微信小程序[代码],因此,模块也提供了多小程序支持 4. 多站点支持 通过CabloyJS提供的[代码]多实例[代码]特性,可以实现[代码]多站点支持[代码],比如为不同的企业提供企业微信服务。请参见:EggBornJS:多实例 参考链接 Cabloy-微信:介绍 Cabloy-微信:快速开始 Cabloy-企业微信:介绍 Cabloy-企业微信:快速开始
2020-06-23 - 企业微信3种裂变玩法,保证你一看就懂
前段时间wetool被封杀,很多小伙伴都在寻找替代的运营工具。这样一来,企业微信作为官方运营工具,可以说是我们做私域流量、精细化运营客户的唯一选择。 [图片] 企业微信作为新的私域流量工具,存在大量的机会,越早布局能抢占更多的流量。目前,宝洁、猿辅导、小红书、屈臣氏、恰恰等各行业的top品牌,都已经开始了企业微信的裂变。可以毫不夸张的说企业微信是2020年下半场微信生态引流变现红利。 今天为大家分享企业微信的3种裂变玩法,保证你一看就懂,一学就能够增长。 一、企业微信社群裂变玩法简介 以社群为载体,通过诱饵包装,以海报的形式吸引用户入群,通过话术提醒,引导用户完成海报转发任务,吸引更多用户。 活动路径 [图片] 辅助工具 1、群活码 这个是官方自带的【群裂变】功能,可在PC端【客户联系-配置-加入群聊-新建加入群聊】配置。 用户扫描群活码可以直接进群,群人数达到上限会自动创建新群。 目前每个群活码上限是5个群,每个外部群为200人,相当于可添加1000人进群,而且群活码二维码不会过期,方便线下门店打印物料。 Tips: 如果社群用户量比较大的话,建议使用几何裂变的活码工具(免费提供),提前建好群,将群二维码批量上传至活码工具。 2、群任务发布 通过入群欢迎语可以对新入群的用户自动发送消息,还可以@用户,这里就可以用来发布群任务,引导新进群的用户按照要求完成任务领取奖励。 Tips: 1、入群欢迎语只能在手机上设置,不管是用电脑上在素材库里添加编辑,还是手动编辑发布,都需要登录手机企业微信操作、替换; 2、入群欢迎语最多只能设置2条,一条文本消息,一条图片消息; 3、入群欢迎语弹出时间可以自定义, 3、群任务审核 群管理员需要在手机端开启自动回复,客户在群里@小助理,会根据后台设置的内容触发相应的消息回复。 自动回复内容在PC端【客户联系 - 工具 - 效率工具 - 自动回复】中设置。 自动回复的信息一般会提示用户正在审核,这个审核提醒不具备任何审核的功效,只是另外一个引流入口,审核的工作还需要人工操作完成。 4、防骚扰 群管理员可设置防骚扰规则,消息包含关键词/发网页/发小程序/消息长度超过N个字或N行/连续N秒发N条消息都可以自动将用户移除群聊,并且加入黑名单,后续再次进群会再次踢除,同时还有社群去重功能。 二、企业微信好友裂变玩法简介 用户扫码添加企业微信,企业微信自动推送活动规则和用户专属分享海报,用户只有转发海报让其他人添加企业微信,达到一定的人数后才算完成任务,并获得奖励,例如某个东西或某个活动的免费参与资格。 活动路径 [图片] 1、朋友圈/社群看到活动海报 2、用户扫码添加企业微信,企业微信自动发送活动规则,获取专属海报 3、用户转发海报,邀请好友为自己助力 4、好友成功添加企业微信,则助力成功 5、用户完成任务,领取奖品 企业微信好友裂变玩法的优势是路径简短,对于用户来讲,只有扫码添加企业微信和分享2步,就有机会完成任务领取奖品,也是我最推荐的企业微信的裂变方式。 tips: 1、可以设置多个企业微信成员,客户扫码添加的企业微信成员会随机分配,好友数量和账号安全双保障; 2、客户已经添加了该企业微信,也可以自动发送活动规则,获取专属海报,不限制是否是老客户。 [图片] 三、企业微信任务裂变玩法活动路径 [图片] 1.朋友圈/社群看到活动海报 2.用户扫码关注公众号,公众号弹出企业微信二维码 3.添加企业微信,在企业微信对话框获取专属海报及活动规则文案 4.用户转发海报,邀请好友为自己助力 5.好友关注公众号,并且成功添加企业微信,则助力成功 6.用户完成任务,领取奖品 tips: 1、助力的好友必须同时关注公众号和添加企业微信,才算助力成功,如果只是关注公众号,系统则不会对助力值+1,相当于助力不成功。 2、如果你的助力好友只添加了公众号没有添加企业微信,公众号自动发送消息提醒,必须添加企业微信才算助力成功。 企业微信任务裂变玩法的优势是能实现公众号和企业微信的双引流,缺点是路径长,由公众号添加到企业微信会有用户流失,具体的流失率跟你引流产品的势能和任务人数都有关系。
2020-09-16 - MoChat:基于企业微信的开源SCRM系统,构建私域流量运营的秘密武器
私域流量的运营在经历了各行业的实际应用和沉淀后,显然已经成为了各行业的底层基础设施。很多私域流量运营做的好的头部公司,已经在组织架构层面进行了变革,设立了专属的私域运营部门和岗位,来应对和把握这次浪潮之巅。目前私域流量的运营已经从“讨论要不要做”发展到“到底怎么做的”的新阶段。 在私域流量运营发展的过程中,必然少不了“工具”这个伟大的角色,工具让私域运营效率变得更高、效果变得更好,业务更能快速规模化。这样顺其自然催生了大量基于企业微信的第三方工具和服务商。 尽管现在基于企业微信开发的第三方产品处于一个百家争鸣的时代,但仍旧未能看到一个开源的、真正为 企业微信应用 开发服务铺路的框架&引擎,此为 MoChat 及其团队成员的初衷,他们将持续投入并为此付出努力,也欢迎各路开发者加入我们参与开源建设。 [图片] MoChat 是一套开源的企业微信应用开发框架&引擎,用户可以在不需要任何编写代码的基础上,通过简单的设置和安装,在互联网上搭建属于自己的、具备完善功能、很强负载能力和可高度定制的企业微信应用服务。MoChat 内置了七大能力:基础服务管理能力、渠道活码管理能力、客户管理能力、客户群管理能力、消息管理能力、侧边栏能力和应用插件扩展能力;通过 MoChat ,既可以满足开发者开箱即用的需求,又可以满足未来的场景定制化扩展。第三方的开发者还可以基于 MoChat 开发发框架开发各种应用,更多更好的服务好企业,打造一个百花齐放的全新企业微信社区生态。 [图片] 过去,要想开发一套成熟的基于企业微信的SCRM系统工具,拥有10人的开发团队在熟悉各种开发文档和应用场景的基础上,也至少要花费百万的成本数月时间才能完成基础的开发。 但现在通过 MoChat企业微信开源SCRM系统,企业和开发者可以分分钟钟搭建一套属于自己的企业微信SCRM系统,大大降低了研发成本和试错成本,避免了多处重复造轮子的工作。开发者还可以基于详尽的开发文档和 MoChat灵活的插件机制,实现个性化需求的二次开发。在以私域流量运营为主题的今天,MoChat企业微信开源SCRM真的是企业和开发者的秘密武器。
2020-11-28 - 企业微信未来如何发展
企业微信比起钉钉来说优势,是基于企业办公还能用来做营销,拓展自己的客户群体。 然而使用之后却发现,企业微信的营销功能,比不过个人微信,办公功能比不上钉钉。本以为企业微信嫁接个人微信,能够在营销上强于钉钉,结果却差强人意。 企业微信的朋友圈以及微信群,看似营销功能,比起个人微信过于弱化,对于toc和不喜欢用企业微信客户的企业,朋友圈有频率限制,不能通过朋友圈每日发图文将意向客户吸引转为客户,只能点对点私聊客户,不是刚需或无价格优势,点对点私聊所带来的客户反感大于朋友圈,私聊的效果弱于朋友圈吸引。总不能强迫客户都使用企业微信,对于toc业务,下个企业微信来解决生活需求问题,就没有必要。企业微信的功能比起个人微信弱化,在个人微信上面搭建oa小程序,是否企业微信的用户量会逐渐下滑? 现在搭建了企业微信群,将客户引入到其中,因为企业微信没有个人微信群那样能与小程序完美结合,朋友圈频率受限,又不能发朋友圈,导致小程序使用频率低,有点想换回使用个人微信搭建社群,就想咨询下企业微信未来发展,会怎样优化,好让企业做下一步规划
2020-12-19 - 企业微信saas基础平台都应该有哪些功能?
1 通讯录 ps:主要是拉取目前的组织结构成员,可以本地对成员做一些设置项 2 渠道活码 ps:主要是对推广拉群、拉关注有用 3 客户管理 ps:针对客户基础功能的管理,查看关注来源等等,做一些关注回复话术等 4 客户群管理 ps:管理目前所有的微信群 5 朋友圈 ps:这个是对员工对外资料显示里做一些取巧的设置,可以做超链接开发出来的朋友圈链接做宣传 6 聊天侧边栏 ps:这个功能比较大,主要是方便员工使用 发消息方便,查看客户的动态等等 7 企业风控 ps:查看员工删除客户的记录 8 图文素材 ps:基础功能 9 基础应用:消息助手 ps:通过这个应用可以发消息触达到所有的员工,做千人千面的信息处理等等 目前我们已开发好的功能 [图片]
2021-01-06 - 开发企业微信常见问题整理
一 获取access_token对应的秘钥是什么? 1 跟通讯录相关用通讯录秘钥+企业ID生成 2 跟客户联系相关用客户联系秘钥+企业ID生成 3 跟应用相关用应用秘钥+企业ID生成 二 读取通讯录成员信息和成员变更通知字段某些有差异 1 这个可以通过对比返回节点查看,目前发现是有几个节点有差异 三 不配置客户联系,是收不到员工加外部联系人记录? 1 如果想要接受员工添加外部联系人事件,一定要在客户联系里配置,可以把企业的根节点添加上就行。 四 市面上说的活码是用客户联系的state参数来实现 五 市面上那些开发出来的增强版聊天功能 给对话框快速发送资料的是通过“聊天工具栏分享消息到会话”来实现
2020-12-29 - 企业微信第三方服务商H5应用调用wx.config失败,报错preVerifyJSAPI:fail
前言: 1、企业微信第三方服务H5应用,首先配置的 H5 地址是跳转到移动端H5应用页面; 2、H5应用内部判断如果是企业微信PC则带着授权参数 code、state 跳转到PC上的web应用页面; 3、下面的图片都是PC上WEB应用内部的代码流程; web 前端 js 代码授权流程,报错见后面的图片:[图片]下面是调用之后的报错信息,没有说签名错误,只说了预校验失败,也没说因为什么失败了: [图片]
2019-12-12 - 如何快速在微信小程序中接入微信对话开放平台
如何快速在微信小程序中接入微信对话开放平台 前言 之前我写了一篇《微信对话开放平台初体验》,链接地址如下: https://developers.weixin.qq.com/community/develop/article/doc/000666072c0ad8f876891815b56013?jumpto=comment&commentid=0000243ff409a0797a89feb535b4 相信看过的朋友,通过这篇文章,会对微信对话开放平台有大致的了解,无论是后台的配置项,还是提供的服务能力,都一目了然。这么好的平台,光看不用实属浪费。微信对话开放平台不光是可以接入微信公众号、微信小程序,还可以接入其他网站。虽然官方的指引文档和视频都有,但在实际开发过程中,仍然会遇到一些问题。本文将为你介绍,如何在微信小程序中,快速接入微信对话开放平台。帮你规避会遇到的各种坑,更顺利的完成微信对话开放平台的接入。 准备工作 你需要有一个自己的小程序,没有的话可以注册一个个人主体的,建议注册账号使用单独的QQ邮箱。 接入小程序插件 查看官方文档 首先进入微信对话开放平台官网(https://openai.weixin.qq.com/)。 [图片] 微信对话开放平台点击右上角的【使用文档】按钮,即可跳转到文档中心的【智能对话】版块,如下图所示: [图片] 我们要做的是小程序接入,需要选中对应的选项卡。 [图片] 这里给一个快捷入口,点下面链接就可以了。 https://developers.weixin.qq.com/doc/aispeech/miniprogram/intro.html 只是这里都只是介绍跟示例,具体怎么操作,需要点击这里【快速接入】,才能看到具体步骤。 [图片] 文档里面写了接入的基本步骤,比方说appid配置、怎么注册插件什么的。只是这个介绍写的过于简略,只看这个远远不够。 细心的你,会注意到这里有一个超链接文字。 [图片] 点击这个【申请使用插件】,你会跳转下面这个链接: https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=wx8c631f7e9f2465e1 [图片] 这是插件的详情页面,这里每个步骤写的详细多了。按理说看到这里,就不用我多说,照葫芦画瓢都会玩了吧。 就如龙哥(微信之父)所说的那样——生活是不美好的。 接入过程中,仍然会遇到一些坑,稍不留心,在某个步骤卡住,就进行不下去了。下面我会告诉你这些坑在哪,也希望官方能够及时调整文档,修正这些问题。 可能会遇到的坑 小程序后台添加插件(坑指数:1星) 这个有两种方法: 进入小程序后台【设置-第三方平台授权管理】,点击添加插件,搜索「openaiwidget」即可。 访问插件主页https://mp.weixin.qq.com/wxopen/pluginbasicprofile?action=intro&appid=wx8c631f7e9f2465e1&token=&lang=zh_CN 点击添加,会出现【申请成功】提示,页面刷新后会显示【已添加】。 [图片] 其实上面的操作还好,并没有什么坑。但是,当你添加后,小程序的后台不是实时更新的,比方说这种情况,我用方法2添加后,回到小程序后台,搜索会提示已达到上限,而列表是没有更新的。插件列表不同步的情况时有发生,记得添加后多刷新几次小程序后台页面,不然会以为这个插件没有添加成功。 [图片] 添加插件的时候,如果你的按钮是灰色,说明已经达到插件上限。个人小程序插件上限是5个,其他不清楚,如果你有不需要的插件,可以移考虑掉。 [图片] 我个人觉得5个插件是完全不够用的,像我这样的情况,接入的都还只是官方,如果要在这个基础上加非腾讯系第三方,感觉很难。 [图片] appid配置(坑指数:2星) 这个看起来也很简单,查一下appid,复制粘贴也没啥。 [图片] 可你看下面一个文档配置,发现事情并不简单。除了appid,还有个WechatSI要配置。第一次看我一头雾水,不知道是个啥。而且第一个version要自己查,第二个不是最新版本,要么都自己查,要么都是最新的,不知道这个地方上下表述不一致是个什么操作…… [图片] 我把这个名字,用全球最大的搜索引擎搜了一下,发现这个原来是【微信同声传译小程序插件】。 [图片] 这个插件是为了让对话支持语音转文字功能,这样可以让人机对话的交互方式更加丰富,而配置中没有说明。 查版本好也很简单,以【微信同声传译小程序插件】为例,先进入首页: https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=wx069ba97219f66d99&token=61191740&lang=zh_CN 选择【基本信息】,可以看到更新日志,这里面有最新的版本号。 [图片] 就是appid和版本号这里有点饶,还额外引入了个多的插件。后面的小程序修改app.json,注册组件什么的,相信各位也轻车熟路,文档这部分写的更详细,这里不做赘述。 文档JSON配置书写错误(坑指数:1星) 到了初始化配置,说明你已经搞定了网站的后台配置,可以专注写代码了。可刚写到这里,你发现控制台出现了你最不愿意看到的红色英文字符串。于是你觉得此事必有蹊跷,开始思考报错的原因。代码是从官方那边复制粘贴的,讲道理不应该报错啊。当你再次看这段配置的时候,发现了一个文档上的低级错误——没有加分号。 [图片] 当然这个小问题对你来说是小case了,只是就连这样复制粘贴一把梭,还要卡一下,难免有点不快。希望官方看到可以修正这个文档错误。 没错,我就是微信开放社区的列文虎克(列文虎克是微生物学开拓者)。 页面样式问题(坑指数:3星) 之所以给3颗星,是因为这个样式实在是不好调,可能是因为我有自定义的导航栏,导致我不能直接照搬这个100vh高度的样式。我需要自己写calc,减一个大约100px的高度。 [图片] 其实官方也很贴心,这个高度样式问题官方文档在第8点注意里面也写了,只是光这样是不够的,还是没有彻底解决样式问题。 [图片] 减去顶部导航栏高度后,你还是会看到样式很奇怪,不是下面输入框被挤压,就是上面消息第一条的图片(默认是大幂幂),上面少了半截,如下图所示: 我在这里地方调了很久,发现上面的第3步的配置,里面有很多高度的配置。经过一番研究调试后发现,改动这几处是可以调整页面每个部分的高度。 [图片] guideCardHeight、operateCardHeight、historySize、navHeight这些参数,可以根据需要自定调节,多试几次就知道是怎么回事了。 总结 总体来说,接入还是比较简单的,不需要自己写很多代码,只需要按照文档步骤来,根据实际需要,配置对应的参数,调整下样式基本就OK了。只是接入过程还是会遇到一些小问题,卡在这里也很耽误时间。另外审核这个也比较迷,以前都是最多半天搞定的,这次引入这个插件后,一直显示审核中,因此我也无法将最新版的小程序分享出来给大家体验。 下面放出官方示例,可以直观的体验各个功能模块,感受微信对话开放平台的魅力。 [图片] 彩蛋 我在自己的小程序「EXIF查看器」体验版中,接入了微信对话开放平台插件。我还录了一段20秒左右的演示视频,想看看微信开放社区中,有多少人知道这个对话回复说的是哪个梗。 https://v.qq.com/x/page/y3027wu64bu.html
2019-11-30 - UNI-APP使用云开发跨全端开发实战讲解
UNI-APP 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。 本文为大家讲解如何采用云开发官方JS-SDK,接入云开发后端服务并支持UNI-APP全部端(不止于微信小程序) JS-SDK和UNI-APP适配器1.JS-SDK和适配器云开发官方提供的@cloudbase/js-sdk,主要用来做常规WEB、H5等应用(浏览器运行)的云开发资源调用,也是目前最为完善的客户端SDK。 目前市面上大部分的轻应用、小程序包括移动应用APP都是采用JS来作为开发语言的,所以我们可以对TA进行轻微改造,就可以轻松使用在各种平台中。 但是单独改造SDK包会有些许风险,比如在原SDK包升级时需要重新构造,就造成了无穷无尽的麻烦,改造成本相当大。 官方的产品小哥哥深知这种不适和痛苦,所以在@cloudbase/js-sdk 中提供一套完整的适配扩展方案,遵循此方案规范可开发对应平台的适配器,然后搭配 @cloudbase/js-sdk 和适配器实现平台的兼容性。 不了解的小伙伴肯定会有些茫然,我来用浅显的语言解释一下,就是@cloudbase/js-sdk 将底层的网络请求以及相关基础需求以接口的形式暴露出来,我们按照平台的特殊API来补充这些接口,sdk就可以根据这些补充的接口,无障碍的运行在平台中了。 如果我们想在UNI-APP中使用@cloudbase/js-sdk ,底层网络请求你需要来补充,因为sdk原本是适应浏览器的,TA不知道UNI-APP怎么对外发请求,所以你需要将uni.request 方法补充到TA暴露的接口中。补充完毕后,@cloudbase/js-sdk 就可以在UNI-APP中活泼的运行了。 我们将所有的uni方法全部补充到JS-SDK暴漏的接口中去,就形成了一个完整的适配器,我们将其成为uni-app适配器。 2.UNI-APP适配器UNI-APP的整体接口都是公开透明的,我们在开发UNI-APP时也都遵照同一套接口标准。所以小编已经将uni-app适配器制作完毕,大家只需要在使用时接入适配器就可以了。 我们在项目目录main.js中引入云开发JS-SDK,然后接入我们的UNI-APP适配器即可。 import cloudbase from '@cloudbase/js-sdk' import adapter from 'uni-app/adapter.js' cloudbase.useAdapters(adapter); cloudbase.init({ env: '',//云开发环境ID appSign: '',//凭证描述 appSecret: { appAccessKeyId: 1,//凭证版本 appAccessKey: ''//凭证 } }) 移动应用登录凭证云开发SDK在使用过程中,向云开发服务系统发送的请求都会需要验证请求来源的合法性。 我们常规 Web 通过验证安全域名,而由于 UNI-APP 并没有域名的概念,所以需要借助安全应用凭证区分请求来源是否合法。 登录云开发 CloudBase 控制台,在安全配置页面中的移动应用安全来源一栏:[图片] 点击“添加应用”按钮,输入应用标识:uni-app(也可以输入其他有标志性的名称),需要注意应用标识必须是能够标记应用唯一性的信息,比如微信小程序的 appId 、移动应用的包名等。[图片] 添加成功后会创建一个安全应用的信息,如下图所示:[图片] 我们需要保存一下上图中的版本(示例为1)、应用标识(示例为uni-app)、以及点击获取到的凭证(示例为demosecret) 在项目目录中,我们将main.js中的init部分补全 import cloudbase from '@cloudbase/js-sdk' import adapter from 'uni-app/adapter.js' cloudbase.useAdapters(adapter); cloudbase.init({ env: 'envid',//云开发环境ID,保证与你操作登录凭证一致 appSign: 'uni-app',//凭证描述 appSecret: { appAccessKeyId: 1,//凭证版本 appAccessKey: 'demosecret'//凭证 } }) 如此,你就可以正常的进行云开发的登录使用了。 需要注意以下4点: 你需要设置uni-app的各端安全域名为:request:tcb-api.tencentcloudapi.com、uploadFile:cos.ap-shanghai.myqcloud.com、download:按不同地域配置使用此种方法接入云开发是全端支持,并不会享有微信小程序生态的一些便利,微信小程序开发还是需要依赖正常请求调用过程(将云开发作为服务器来对待),但你可以判断wx来使用wx.cloud来兼容。使用云开发的匿名登录时,受各端实际情况影响,可能不能作为常久唯一登录id,需要根据自身业务建立统一账户体系,具体可使用自定义登录来进行。UNI-APP支持WEB网页端上线时,需要将网页域名配置到云开发安全域名中(防止WEB下载文件导致跨域)示例代码详解示例项目中已经基本构建了uni-app使用云开发的各种流程代码。 在页面中进行匿名登录: // index.vue import cloudbase from '@cloudbase/js-sdk' export default { data() { return { title: '登录中' } }, onLoad() { cloudbase.auth().anonymousAuthProvider().signIn().then(res => { this.title = '匿名登录成功' }).catch(err => { console.error(err) }) } } 调用云函数并收到返回结果: import cloudbase from '@cloudbase/js-sdk' export default { methods: { call: function() { cloudbase.callFunction({ name: "test", data: { a: 1 } }).then((res) => { console.log(res) }); } } } 操作数据库: import cloudbase from '@cloudbase/js-sdk' export default { methods: { database: function() { cloudbase.database().collection('test').get().then(res => { console.log(res) }) } } } 实时数据库监听: import cloudbase from '@cloudbase/js-sdk' export default { methods: { socket: function() { let ref = cloudbase.database().collection('test').where({}).watch({ onChange: (snapshot) => { console.log("收到snapshot", snapshot); }, onError: (error) => { console.log("收到error", error); } }); } } } 上传文件(框架限制,WEB端无法操作): import cloudbase from '@cloudbase/js-sdk' export default { methods: { upload: function() { uni.chooseImage({ count: 1, sizeType: ['original', 'compressed'], sourceType: ['album'], success: function(res) { console.log(res.tempFilePaths[0]) cloudbase.uploadFile({ cloudPath: "test-admin.png", filePath: res.tempFilePaths[0], onUploadProgress: function(progressEvent) { console.log(progressEvent); var percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total); } }).then((result) => { console.log(result) }); } }); } } } 下载文件(需要注意地域域名,配置安全域名): import cloudbase from '@cloudbase/js-sdk' export default { methods: { download: function() { cloudbase.downloadFile({ fileID: "cloud://demo-env-1293829/test-admin.png" }).then((res) => { console.log(res) }); } } } 部署步骤将项目下载后使用HBuilderX打开。按照获取移动安全凭证的指引,填写至mian.js相应处。打开目录命令行,npm i执行安装依赖。打开云开发控制台,开启匿名登录。新建一个默认的云函数,名称为test(逻辑内容直接返回event即可)新建一个数据库,名称为test(随便添加几个记录,设置权限为所有人可读)调整项目pages/index/index.vue中,21行代码,在登录成功后调用相应函数。以下是WEB端运行时展示:[图片] 关于uni-app适配器在util/adapter中,只进行了简单的测试,保证可用性,后续请关注官网获取最新适配器依赖此方法有别与uniCloud,是直接使用uni请求底层,依赖官方JS-SDK进行云开发服务的交互处理,在使用时注意区别。项目地址:https://github.com/AceZCY/UNI-for-CloudBase
2020-12-08 - 2020小程序云开发技术峰会——重新定义开发
[图片] [图片]
2020-11-18