森泥.酷哦

加油,小可耐!

开发微信公众号那些事儿

H5 2 评 104 度
一、项目实现方式

先交代一下这个项目的主要实现方式:腾讯云开发模式。就是注册一个微信小程序,开通一下云开发模式,就可以免费使用数据存储空间了,数据库有了,还少个服务器,那就来个 node 吧。

二、项目实现的一些细节

​ 注册一个微信公众号和一个小程序,本项目是一个微信公众号项目,而小程序是为公众号服务的,感觉路走的有点绕~

2.1、node 对接云存储

​ 操作云数据库有两种方式,一种是直接在小程序里写云函数操作,还有就是通过node服务操作,node 服务不仅可以直接操作云数据库也可以通过调用云函数间接的操作云数据库。
要想操作云数据库,对于 node 来说用到两步:1)引入node.js SDK;2) 初始化资源,在 node下初始化资源需要 secretId 和 secretKey(可以在小程序开发者设置里获取),小程序端的云函数初始化不需要,毕竟 node 是第三方服务;其次小程序云开发可以设置两个环境,我们正常开发测试一个环境,线上一个环境,所以初始化的时候可以根据当前环境传入 env 的值。

2.2、node 对接微信服务

毕竟是微信公众号里的项目,想要获取微信公众号的一些调取接口权限只需要微信爸爸的授权,但是想要获取微信用户的信息不仅需要微信爸爸的授权还需要用户同意。node对接微信的所有服务都仅在 node 层,node 作为中转层返回给 web 端必要信息。

node服务主要做的关键几件事:

1、用微信公众号的 appid 和 secret 调取微信服务接口,获取调取公众号接口的凭证 access_token,并按一定时间更新存储(每个 token 的实效是7200秒);

2、通过微信给出的规则来获取微信授权的 code,并返回给 web 端;

3、当用户同意授权后,通过 code 和微信公众号的 appid 和 secret 调取微信服务接口获取调用用户信息接口的凭证 access_token 和 openid,然后通过 access_token 和 openid 获取用户信息;

4、通过微信提供的签名算法,获取 JS-SDK 的使用权限;

关于微信支付:

 1、得有资格开通支付的商户号;
 2、该项目用了第三方的库 tenpay,里面封装好了关于调取微信支付的规则;
 3、微信的金额是以分为单位的;
 4、支付成功或失败微信会通过配置的 notify_url 通知 node 服务,然后服务收到通知在返回给微信,如果微信没有收到返回的通知,那么微信就会每隔一段时间通知一次;(之前就是在这里写了个 bug,导致项目的小伙伴找了好久)

2.3、node 基本业务 API 处理

处理好微信和云存储的对接,那么对于业务层的 API 接口也需要一个基本的 token 校验,本项目用的是jsonwebtoken 这个库。

三、总结

​ 本文主要讲的是对接微信服务以及云存储的一些关键性流程,算是对整个项目的流程梳理,目的是为了日后开发类似项目的时候有个对照。

在本次实际开发中挖的坑:

  1. 用户拒绝授权后没有做处理,对于web微信没有提供相关的回调函数;
  2. 在微信支付成功失败的通知的接口里写了 bug,导致流程阻断,微信没收到回应会继续通知,导致金额累加出错;
  3. 数据库查询对于 node 只能查 100 条每次,小程序云函数只能查20条每次,然后在批量操作数据的时候,超过了一天的限额次数,还好在开发环境;
2021 Flag