- 企业微信会话存档开发示例【Python】
企业微信的会话存档可能因为涉及用户隐私问题和极高的安全诉求,所以加解密搞的很复杂,最近想写个小应用,用到企业微信会话存档,本来以为半天能搞定,结果是我天真了。 加解密的具体算法企业微信没有公布,提供了SDK 但是, 只提供了 linux和win 的 C 和 java SDK和示例,这就比较难受了,而且文档感觉也比较,应付。(PS: 没有Mac版的SDK) 本来想用ruby写,后来放弃,看了下java,直接放弃上Python把会话存档加解密作为单独的模块,api还是用rails写。 开始面向google编程,结果发现资料也很少,得了,自己开始踩坑。 直接上仓库地址: https://github.com/wjason/wework-archives 运行环境:ubuntu20.04 | Python3.8 项目内容踩坑调试通 会话存档的 信息获取,加解密,媒体文件获取/保存,作为单独调试脚本,不过可参考引入具体项目业务逻辑和处理, 多线程,异步等业务逻辑动作未处理,如果是根据存储seq来实时差量拉取的注意多线程的时候上锁免得seq乱了,自行处理,这只是一个跑通企业微信消息存档的调试demo示例
2022-02-25 - 微信搜一搜|零零散散的收集了一些关于搜一搜的文档,长期更新供参考~
《微信问一问》 《内容接入》 《页面内容接入》 《深度搜索》 《川流计划合作说明》 《场景值清单 》 《搜一搜侧汇总文档(案例)》 《品牌官方区》 《投稿接入模板》 《手动投稿接入说明》 《搜索词列表》 《页面收录情况》 以上文档均为接触微信搜一搜可能会涉及到的官方文档,这里做个帖子,方便自己和朋友查看。 有关搜一搜的其它问题,也欢迎私信探讨~
2023-04-02 - 为什么我微信解封,我找了12个微信好友,都说辅助账号安全状态异常?
微信,你能不能行了,我是做健身的,从来不群发好友也不群发群,每天就发6条朋友圈,都是督促客户健身的朋友圈,结果说我恶意营销封一个月,行,那就封吧,一个月到了,要好友辅助解封,结果解封的时候每个好友都说账号异常,一个两个异常就算了,12个好友,都是异常????是不是全是异常的,是不是不给解封,还是你们软件有问题,真的,要封永久就直说,别拐弯抹角的行不行?请帮我查明行吗? 被封微信id:jiuge008009
2021-06-09 - 品牌运营公众号+小程序之微信搜一搜
本文主要讲微信公众号的-微信搜一搜核心功能:服务搜索、品牌主页、官方区,顺带说一下川流计划。 [图片] 服务搜索 服务搜索要求比较低,只要是认证公众号超过180天即可上线服务搜索 服务搜索的核心功能是为用户提供一些功能性的服务,搜索你的设置的关键字,会优先展示你的小程序、公众号自定义菜单、自定义H5路径。(下图为效果展示图) [图片] 如上图,我们作为用户搜索“充值”可以看到三个平台,每个平台都可以为我们提供服务,点进去即可进行话费充值。腾讯手机充值和中国移动跳转的是小程序,中国联通跳转的是H5。 拿小程序来说,我们现在给小程序命名很困难,简短好名字基本都被注册,我们迫不得已只能注册长名字。比如我们想做个“问卷投票”类型小程序,只能起“XXX问卷调查XX”这种类型。起完名字没用户搜索、没有用户量,我们就可以用这个服务搜索去提交。可以把我们的小程序名字精简到2个字,用户直接就可以搜索出来。而且这个权重要比用户搜索名字出现在小程序里要高很多,也节省了用户点击小程序的步骤。 具体开通流程我以前写过一篇文章,可以去看一下,服务搜索带来的流量很高 https://developers.weixin.qq.com/community/develop/article/doc/0002ece75b8dc89c8dba428c15bc13 Tips:如果是仅上线小程序服务搜索,也可以在小程序搜一搜页面直接提交,和这个功能一模一样,唯一的区别就是以公众号名字展示和以小程序名字展示 [图片] 品牌主页 品牌主页要求比较高一些,需要你的公众号名字为非通用名字。因为通用名字没有品牌效应。 [图片] 开通品牌主页后我们可以编辑以下内容,可以外漏你的电话、品牌下的所有小程序、最新发布的文章、销售的商品(小程序或小商店)、常见问题咨询、官方服务(本文上面的服务搜索)、门店信息等。都是我们可以获取到的外部流量 [图片] 官方区 官方区要求也比较高,看下图即可 [图片] B、C级样式满足条件可瞬间开通,A级样式满足条件后需要给官方发邮件,官方审核通过后方可开通。 C级开通后可外露服务入口(本文上面的服务搜索),还可以增加一个搜索词。 比如你的公众号叫“微信”,用户除了搜索微信可以搜到你以外,你还可以增加一个搜索词比如“微信聊天”,同样可以搜索到你提供的服务。 [图片] B级开通后可额外增加3个搜索词,外漏一个品牌主页的模块。 [图片] A级我已经发邮件了还没回我,但对我意义不大,因为要持续做推广 [图片] 川流计划 这个开通要求需要企业邮箱(个人邮箱直接审核失败),还有商标。公众号认证的时候记得把商标加上,要不然不会审核通过的。我虽然有商标,但是认证公众号的时候没加,所以导致没认证成功。 [图片] 接入成功以后可以玩儿一些好玩儿的东西,比如年前的红包封面,用户搜索品牌名字,可以直接领取红包封面,应该还有其他好玩儿的,有条件的可以试试,记得留言让我眼馋一下~~~ 结尾整理下官方文档: 服务搜索接入:https://wsad.weixin.qq.com/wsad/zh_CN/htmledition/service/html/apply.html 微信搜一搜:https://developers.weixin.qq.com/miniprogram/introduction/widget/we-search/ 搜一搜侧汇总文档:https://docs.qq.com/sheet/DWmhqcUhzWXNpQlZw
2021-04-01 - 小程序管理员是否可以开放到企业50+个人5?
看到社区很多帖子反馈,管理员不够用,想继续做小程序,但是没人能帮认证管理员。 现在我的处境和一部分人的处境应该相似:个人注册企业5个小程序,然后找七大姑八大姨、身边的朋友等注册。 这样会造以下几种可能性: 1、小程序某些功能违规,作为实际管理、开发者不能及时作出调整 2、更改头像、类目、APPsecret等功能必须真正管理同意,而他们又忙,而且对这套扫码流程他们也不熟练,会导致更改二维码过期。 3、流量主广告违规也不清楚,只能第二天看收益,瞅一瞅哪个小程序没收益,再去看。 我作为企业独资法人提一个小建议:开放企业小程序管理员50,或者添加的开发者拥有和管理员同级别权限。
2020-09-01 - 如何使用云开发实现发送邮件功能
新手:因为是刚接触云开发,所以有说的不对的地方,大佬帮忙指正。 背景:摆脱每周五晚写周报的烦恼。 目标:本次小目标就先实现小程序云函数发送邮件功能。 终极目标,写一个todolist小程序,每周五汇总本周工作,下周工作,使用云函数定时器触发,定时发送邮件。 [图片] 首先给大家介绍一个发邮件的第三方模块,nodemailer Nodemailer Github地址 Nodemailer官方文档 找到官方文档最下面,有一串示例代码。这次我们要用到的就是它了。 使用nodemailer我们需要使用到的传输方式:SMTP 文档如下:https://nodemailer.com/smtp/ 这里有介绍如何使用,示例代码我就不给大家复制过来了。 何为SMTP? 这里给大家百度了一发: SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持,SMTP的重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。使用SMTP,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。 [图片] 怎么开启SMTP服务? 自己搭建邮件服务器是非常麻烦的,我们可以借助于QQ邮箱、Gmail、163个人邮件系统或企业邮件系统开启SMTP服务,SMTP也就是简单邮件传输协议,通过它可以控制邮件的中转方式,帮助计算机在发送或中转信件时找到下一个目的地,也就是发送邮件。 不同的邮件系统有着不同的smtp发送邮件服务器,端口号也会有所不同。 我这边以QQ邮箱为示例操作下。 在QQ邮箱的设置>账户 [图片] [图片] 我们可以看到IMAP/SMTP的开启和关闭,这里我们先开启,然后你会得到一串授权码,保存下这个授权码,我们后续会用到。QQ邮箱的发送邮件服务器:smtp.qq.com,使用SSL,端口号465或587。 [图片] 使用云函数发送邮件 首先我们创建一个云函数,比如就叫sendMail 吧。在该云函数的package.json里添加如下代码。右键点击sendMail云函数,在终端中打开,或者本地终端cd到该云函数文件夹内也可。输入npm install 安装nodemailer最新版依赖。 [代码] "dependencies": { "wx-server-sdk": "~2.1.2", "nodemailer": "latest" } [代码] 然后在index.js中添加如下代码: [代码]const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV, }) exports.main = async (event) => { const nodemailer = require("nodemailer"); let transporter = nodemailer.createTransport({ host: "smtp.qq.com", //SMTP服务器地址 port: 465, //端口号,通常为465,587,25,不同的邮件客户端端口号可能不一样 secure: true, //如果端口是465,就为true;如果是587、25,就填false auth: { user: "8662054@qq.com", //这是我的邮箱账号,改为你们的即可。 pass: "myukmlybjotjbghh" //这里是我们上面说要用到的授权码,不是QQ邮箱的密码 } }); let postMsg = { from: event.from, //发件邮箱 to:event.to, //收件人 subject: event.subject, text: event.text, html: event.html // text 和 html只能同时存在一个。 }; let res = await transporter.sendMail(postMsg); return res; } [代码] 右键部署上传云函数。 到这里我们的发送邮件云函数就完成啦。 [图片] 如何调用发送邮件云函数? 调用方式也很简单: [代码]<input type="text" placeholder="请输入收件人邮件地址" bindinput="handleToAddress"/> <input type="text" placeholder="请输入邮件主题" bindinput="handleSubject"/> <textarea placeholder="请输入邮件内容" auto-height bindinput="handleTextarea" /> <button bindtap="handleClick">发送邮件</button> [代码] [图片] 这里因为我们绑定了 发件人是我的固定邮箱,所以没有增加发送人的输入框。 textarea 我有尝试使用editor组件生成富文本进行操作,最后发现弄出来样式太龊,就干掉了。 [代码]对了差点忘了: 邮件是支持: html:富文本 cc: 支持 抄送 bcc: 支持 密送 attachments: 支持多种附件形式,可以是String, Buffer或Stream 目前我这边用不到,就不展示了,有需要的可查看官方文档,或者评论给你示例代码。 [代码] 至于我们调用的地方: 首先拿到输入的值,然后调用云函数发送。 [代码]Page({ data: { }, handleToAddress(e) { this.setData({ toAddress: e.detail.value }) }, handleSubject(e) { this.setData({ toSubject: e.detail.value }) }, handleTextarea(e) { this.setData({ toTextArea: e.detail.value }) }, handleClick() { wx.showLoading({ title: '发送中' }) const {toAddress, toSubject, toTextArea} = this.data wx.cloud.callFunction({ name: 'sendMail', data: { from: '8662054@qq.com', to: toAddress, subject: toSubject, text: toTextArea // html: '<p><b>你好:</b><img src=""></p>' +'<p>欢迎欢迎<br/></p>' }, success: res => { wx.hideLoading() console.log(res) wx.showToast({ title: '发送成功' }) }, fail: err =>{ wx.hideLoading() console.log(err) } }) } }) [代码] 实现效果图 [图片] [图片] [图片] 以上就完成了使用云开发实现发送邮件功能。 有不懂的欢迎评论留言。 老规矩结尾的代码片段 没了 😂 。 代码仓库地址:https://github.com/minchangyong/wx-cloud-demo 最后感谢李东bbsky 大佬指导。
2020-07-09 - 【高校开发者】双生日记开发经验分享
双生日记开发经验分享 Hello,我是双生日记的 Founder & Developer Airing。该项目的小程序端获得了 2018 C4——微信小程序应用开发赛的一等奖,而 iOS 端则获得了 2018 C4——移动应用创新赛的一等奖,目前累计注册用户已达 1 万+,并仍在不断开发维护中~ 本文将简要概括我们团队在产品的整个研发流程中的所做的工作,更侧重于介绍产品研发与团队管理的方法。 我将整个产品的研发分为以下四步: 立项 设计 开发 维护 [图片] 可以看到,以上四步形成了项目流程的闭环,使得产品能够良性发展。接下来我来具体谈谈这四步工作的内容。 1. 立项 项目立项是所有环节最开始的部分,我觉得也是最重要的部分,它的工作内容类似于“产品经理”的职责。虽然我是 Founder,但产品的探讨还是与大家共同完成的。具体而言,这个环节有两个内容: 产品脑暴 文档整理 1.1 产品脑暴 首先,我会先在团队中提出我的想法,并创建一个讨论区供大家讨论。我们是一个非常大的兴趣团队,虽然参与双生研发的只有寥寥三人,但是在产品脑暴的时候,团队的成员都提出了各自的见解与建议。例如,下图是我们在团队研发中讨论的内容。 [图片] 这里我们团队用的是产品是“语雀”,当然工具是随意的,用腾讯文档我觉得也非常方便,重要的是一定要形成电子版记录材料,如果只是在微信群里讨论或者线下简单聊聊,那讨论了、忘记了,那就相当低效,约等于没有讨论。 1.2 文档整理 第二步,整理脑暴的文档并撰写相关的研发文档,具体来说,包括但不限于: 需求文档 产品文档 模型文档 接口文档 [图片] PS. 这是我们团队的文档库,仅供参考:零熊 | 语雀 [图片] 2. 设计 设计工具我们用的 Sketch,但是不会把源文件直接发给研发同学,因为正版 Sketch 挺贵的,而且只支持 mac 系统。这里我们使用的工具是蓝湖,开始用的也是语雀的画板,但是发现实在是太难用了…另外,在蓝湖中的设计稿是可以分享的,并且邀请团队里的同学进行点评。 设计稿的内容具体包括: 规范 原型 UI 切图 规范重点是色彩规范、组件规范、和字体规范。原型更多的是交互说明,这里我们只是用批注的方式在 ui 上详细说明了一下交互,但如果直接用 flinto 去做也是可以的。flinto 的好处是更加直观,但是开发人员不一定能 get 到设计同学的全部内容。 [图片] 3. 开发 本部分分享的是产品研发的核心环节:项目开发。本环节我分享的内容会稍微多一些,但也略微零散,主要包含三个内容: 规划记录 开发工具 建议事项 3.1 规划记录 在开发之前,我习惯于自己先列一个 todolist 去罗列出项目中的各个需求点或技术点,从整体上会有一个直观的感受,也方便我去安排和规划自己的开发任务。这里我使用的工具是 Notion,我先按照重要的模块把产品分割成了 8 个部分,然后再在每个部分里写各自的 todolist,以免单文件 todolist 过长。 [图片] [图片] 当然,todolist 不单单记录待办事项而已,它更多的是承担一个开发日记的作用。我个人倾向于把开发中遇到的难点问题及解决方法,或者用到的资源顺手记录下来。我认为开发是一个学习和成长的过程,而不仅仅只是完成业务需求。 随手记录是方便日后整理为博客或者再遇到类似的问题可以快速定位,若不记录则很容易忘记。因此,做开发日记对学习的成效是非常大的。 [图片] 3.2 开发工具 针对微信小程序开发,我建议对开发很熟悉的同学可以尝试去使用 VS Code + 扩展 + 真机的模式进行开发,个人觉得这套流程既高效又不会出错。“高效”是 VS Code 自身的高效,而“出错”指的则是模拟器有时候效果与真机不同。 这里顺便安利一下我自己的 VS Code 配置: [图片] 我喜欢把资源管理器放在右边,有两个原因:一是左边是人的注意区,故应该放代码编辑器;二是我随时按 Cmd + B 可以隐藏资源管理器而同时不改变编辑器的位置,如果放左边,隐藏的时候编辑器会有一个位移,眼睛会很不舒服。 对于扩展,我这里用了几个比较有意思的: Color Highlight:颜色值高亮可视化为颜色本身,方便前端样式开发 TODO Highlight:高亮 TODO 与 FIXME miniapp:小程序标签与属性自动补全 Bracket Pair Colorizer:括号着色配对,这个特别方便。 Image preview:方便在代码里预览 uri 上的图片,我是用来看看自己资源路径有没有引错。 REST Client:HTTP 测试,方便开发、分享与 mock。 主题我用的是 Winter is Coming Theme + Material Icon Theme,我个人觉得黑色默认也非常好看。 3.3 注意事项 如果是协同开发我推荐搭配 Git History + Eslint 插件,当然如果自己开发,也免不了 Eslint。Git Commit 规范我们用的是这套: Commit 提交规范 [图片] 开发的时候也别忘记埋点,做一些打点统计,需要打点的地方根据项目需要检测的内容来定。如 PV、UV 这些小程序自带帮你统计了你可以不用打,但其他项目还是要统计的,或者直接规划好 Nginx 的日志,再对日志做分析也是 ok 的~ 如果前后端分离开发,前端同学可以自己接 mockjs 做一套符合接口文档规范的 mock 接口。 4. 维护 对于用户的反馈,我们智能筛选后自动提交到 github issue,再针对 issue 进行 label 和优先级分配。这是我们项目开源的主地址:oh-bear/2life。 [图片] 可以看到 issue 是比较杂乱的,所以还需要 github 的 project 去做一个任务画板。 [图片] by the way,安利一下小工具Devhub,可以很方便的检测自己负责项目的 issue。 [图片] 针对这些 issue,可以做一个阶段性的文档,回归到“立项”步骤,进行下一个小版本的开发。 [图片] 可以发现,我始终没有去选择使用甘特图软件,虽然甘特图更加直观,但是我不太喜欢把任务排的满满的、紧紧的,这样会不自觉地产生工作压力。最重要的是,我们毕竟不是工作嘛,只是一个兴趣开发,所以还是遵循自己的喜好来便好~ 好了,这次的分享就到这里。我是 Airing,我的个人博客是:https://me.ursb.me,欢迎大家来访交流~
2019-05-14