时序图

在微信支付的官方文档中(https://pay.weixin.qq.com/doc/v3/merchant/4012791861),介绍了微信服务器发送的支付结果通知消息包含了哪些内容。其中比较重要的几个参数,我列到下面的表格中了。
除了上述这几个我们能用上的参数之外,通知消息中还包含了数字签名。我们接收到通知消息之后,为了检验是否为微信服务器发送的,而不是其他人伪造的消息。我们可以用本地的微信支付密钥和数字证书,对接收到的消息重新计算数字签名,如果这个数字签名与消息附带的数字签名一致,说明该消息是微信服务器发送的。
在 orderDao.xml
文件中,声明SQL语句,更新订单为已付款状态。
1 |
文档地址:https://pay.weixin.qq.com/doc/v3/merchant/4013053420
在 OrderController
中,编写接收微信支付通知的接口。
1 | /** |
其实商品快照就是订单商品的当前信息,我们把该商品信息从 tb_goods 表中读取出来,然后存储到快照表中。你用MSQL中的数据表存储快照也是可以的,但是日积月累快照记录越来越多(2000万以上),MySQL数据表就显得很吃力了。因此我们可以选择适合存储海量数据(TB级别)的MongoDB数据库,而且它的读写速度比MySQL快多了。当然了,还有比MongoDB存储更多数据(PB级别)的HBase数据库,但是用在我们的项目上就显得大材小用了。
由于MongoDB没有数据表结构,也不支持SQL语句。它里面的数据是JSON格式的,被称作文档,然后保存在集合中。也就是说,集合相当于MySQL的数据表,文档相当于数据记录。
把下载的 apiclient cert.p12 数字证书文件,放入后端Java项目的 resources 目录中。
在Java项目的 application.yml 文件中,填写微信支付接口的相关配置信息。
1 | wechat: |
也许有的同学觉得前后端项目都部署在同一台服务器主机上面,前后端项目之间不需要使用HTTPS协议,其实不然。如果前后端项目都部署在同一台主机上面,该主机的负载会偏大,所以通常的做法是把前后端项目部署在不同主机上面。这种情况下,局域网之内的数据传输也应该加密,所以给后端项目配置HTTPS协议是必要的。
我们将来要写很多Web方法,而且这些方法都要向前端返回JSON格式的数据。那么我们能不能约定好JSON对象中的公共属性呢?
给后端Java项目添加线程池功能,将来有些复杂耗时的任务,我们可以交给线程池去做。比如说生成体检报告这种事情就非常耗时,如果用上了线程池,每天的体检报告用多线程去生成,速度肯定比单线程快很多。