曾有一段时间,一个叫”包你说”的小程序风靡微信平台,据产品大佬们的调查分析,日流水近百万,每日纯利润达十万~如此可观的收益,公司自然是想着要”截流”了~于是乎…这个重任就落到了本菜菜身上…如果你还不知道”包你说”的话…建议你先尝试着体验下,体验后你就发现,所谓的包你说,最大的难点无非就是在那个语音识别上…其它地方一如正常的CRUD…当然还有微信的小程序支付…让我郁闷了一阵

踩坑一:微信小程序支付

先说简单的小程序支付吧…如果你对支付类业务比较熟悉,你总是能够发现,无论是原生支付,还是第三方支付…无论哪个平台…其最核心的步骤无外乎两步:下单 and 通知

根据不同的支付文档,有时需要客户端访问商户系统,由商户后端下单,成功后返回客户端,有时这是由商户系统生成下单参数,由客户端去请求下单。而微信的小程序支付则是后一种…嗯,这到没什么…不过需要注意的是…微信的小程序支付文档上有个再签名过程,同时,一定要注意字段名字段示例值 !!!我就是被可恶的微信字段名坑得不浅…当然这也怨我自己粗心大意…其它诸如签名算法并没有什么难度的…贴一张图以示提醒了小程序支付流程 小程序支付参数

看到了吗…那个字段的示例值…更可恶的是…下单时的文档参数说明使用的是snakeCase,到了这里…全部变成camelCase…完全看心情有木有…没办法…也怨我看文档不仔细吧…

踩坑二:微信语音识别

在完成大概所有的CRUD和支付功能后…开始去玩…看起来最高大上的”语音识别”功能…我们最终选取的语音识别平台是百度…原因嘛…因为它免费…不过话又说起来…百度的语音识别接起来…还真挺简单的…直接提供了pip包,非常方便集成在flask框架中,我按照了示例…自己测试了文件上传…又调用百度语音识别api成功后…觉得自己大事已成…万万没想到的是…微信的语音文件格式并不可以被百度语音直接识别…WTF!怎么办…当时考虑使用讯飞…以为它可以转万能的语音格式…官方查阅之…原来不是…那就只有一种办法了…自行转码…于是又去搜索python的音频转码库…然而都没有对微信那种语音文件格式的支持…所以没办法了…到了这里…要么使用C语言…自己编写转码库和程序…让C调用…要么…嗯…使用第三方外部转码程序…好在Python和Unix/Linux对调用第三方应用支持比较好,这点没什么难度…那么话又说回来了…微信的语音文件到底是什么格式呢?百度之…大佬们众说纷坛…不过一个比较可信的主流的观点是SILK文件格式…嗯…于是各种搜索…终于让我找到了一款神器:ffmpeg万能解码器,支持丰富cli处理!在研究使用ffmpeg的时候…发现了 一个有趣的词…Hall of Shame有兴趣的朋友们可以自己去看看鹅厂的黑历史…然鹅…一番折腾后发现…ffmpeg并没有支持silk音频的解码库…需要自己额外下载…WTF!后来我又百度之…终于…发现了这位大佬,传送门,于是我按照文档…发现…居然告诉我这个转码错误

WTF!不是标准SILK格式,那是什么?!千翻查找…叫我发现了这个…传送门,原来是在文件头信息中多了一个无用的空字节…于是…我在自己的mac中搜索微信接收到的语音文件,发现是.aud.silk结尾…嗯,应该称之为silk变种文件比较合适。于是按照思路…先去掉第一个字符…然后转码…这次果然有效!!!然后再调用百度语音识别,居然…成功了!不过值得一提的是…我在转码时,没有使用那个Shell脚本,而是用到了这个,这份转码库的用法很简单:download下来后,进入ARM平台,然后make编译出可执行程序…编译过程可能会提示你安装一些编译的工具…(如果你没安装的话)之后就可以使用python去调用这个外部的第三方的程序了。这样就实现了微信的语音文件从上传到转码再到识别的过程,初步完成该核心功能,后续的识别率优化…可以考虑比对拼音…这样就可以避免同音不同字的识别尴尬,在一定程度上…提高识别率。

踩坑三:微信小程序的通知

用过摩拜单车小程序的童鞋们肯定都知道,摩拜单车在解锁和开锁后都会向用户发送一条通知。好吧,其实这个通知没什么难度,唯一觉得比较不舒服的是它的参数…嗯,尤其你要注意对于微信的access_token间断刷新…这个使用定时任务+redis就可以很好处理。接下来就是通知的核心参数form_id对于该参数…如果有支付过程的话,这个参数就会好拿很多…如果没有的话…那就会稍稍麻烦…当然我也只是研究使用了…支付情形…剩下的情形留着以后再去考虑吧

留言

⬆︎TOP