开发微信支付服务复盘

        我是去年2022年6月29日大三暑假的时候,为一家初创公司开发《智能自习室》微信小程序以及H5平台的项目,由于这家初创公司是硬件与网络提供商(加上两名财务和我就7个底层员工),之前没有涉足过软件领域,所以算是有人出资让我开发独立项目的机会,当时整体的开发人员就我一个人(前后端全干,甚至连配置部署服务器、域名、维护设施都是我,最后实地安装网络继电器,搭建网线电路都有我参与),开发这一套软件项目的原因是接了私活,这家公司是网络以及物联网硬件解决方案服务商,也就是包含软件定制的全包自习室建设,甲方当时直接与我对接需求,项目时间短(当然去掉陪甲方喝酒周旋的时间,毕竟甲方想让我多加点东西,例如公司让我给微信商户做成服务商子账户模式,甲方想要直连模式,所以跑不了与我喝点)。于是两个月的时间我仓促的帮助这家公司落地了微信小程序的开发(准备开发前端H5的时候,我拿到了上海公司的实习生offer跑路了),其中包含微信授权登录,微信支付(酒陪好了,我做的甲方想要的直连模式)、退款、对账,网络继电器的平台控制集成实现控制电路端口通断,订单业务,套餐设置等。

        关于仓促完成微信支付功能的总结文档在这里:http://t.csdnimg.cn/5wDvM

        关于物联网控制网络继电器集成控制电路端口通断的总结文档在这里:http://t.csdnimg.cn/CXfsV

1、资质

        办理认证微信商户,才能具备采用微信商户支付的资质,这里需要的选择是:直连商户服务商子商户两种模式,其中区别我看来是单一现金流与总分现金流区别,直营与连锁。

2、支付与退款

        两种模式的支付基本一致,无非是服务商子商户的支付现金流是先向总账户转账,后经过周期现金流向子账户。但是退款业务是直接由最终收到现金流的账户发起的。所以这里一定需要处理好服务商与子商户信息的绑定关系,可以通过apllo走配置,也可以做绑定关系表,但是任何与金额有关的业务一定要先走业务单据再走结算单据再走真正的转账接口,尤其是不能耦合在单据流转逻辑里让程序自动发起退款。

3、微信回调

        一般情况下操作成功后微信是会给回调通知的,服务端能够得知本次操作的结果,这里是需要走rpc调用还是记录日志都由开发人员斟酌,但是不建议在这部分回调业务逻辑里直接修改订单状态,如果想修改也可以判断是否修改过再修改,也可采取分布式锁(必须考虑幂等,哪怕不会重复回调)。在我看来如果需要走rpc调用,较好的方式不是直调,而是通知,那么通知的方式就少不了采用MQ的方式发消息,这里如何保证消息不重复发送,以及避免重复回调导致幂等性问题就不再讨论了。

4、订单支付超时

        一般情况下,下单后会有一段时间的支付倒计时,这是订单单据已经产生且存在过期逻辑,这里需要注意的是这是一个业务下单的过程,真正的支付下单在支付的操作上,二者不能放在一起或倒反,也尽量不要采取先下流水单,在支付成功之后落业务单的方式,这样业务单状态基本无意义,反而流水单状态具备了真正的鉴别是否支付的意义,且关乎金额的一环应当放在最后,只需要在回调时修改业务单状态即可。

        至于订单支付超时,完全就不用管,直接创新建单,微信后台也不会允许同一个业务单号调用两次请求(创建预付单,就是让你确认支付之前的付款信息所属单)。

你可能感兴趣的:(web学习,springboot,springcloud,微信)