查看原文
其他

为了写这个Java微信支付V3开发包,我找出了微信支付文档至少六个错误

码农小胖哥 码农小胖哥 2021-05-26

1. 前言

最近忙的一批,难得今天有喘气的机会就赶紧把最近在开发中的一些成果分享出来。前几日分享了自己写的一个微信支付 V3 的开发包payment-spring-boot-starter,就忙里偷闲完善了一波。

项目地址:https://github.com/NotFound403/payment-spring-boot

别忘记给个Star啊

期间给微信支付文档提交了6个BUG,跟微信支付的产品经理友好地“交流了好几天。

那么都完善了哪些内容呢?胖哥来一一介绍。

2. Maven 中央仓库

是的,不用再自行编译打包部署了,我已经提交到 Maven 中央仓库了。最新的坐标是:

<dependency>
    <groupId>cn.felord</groupId>
    <artifactId>payment-spring-boot-starter</artifactId>
    <version>1.0.1.RELEASE</version>
</dependency>

这才算有了点正经开源项目的样子。

3. 功能更加完善

在上次分享中仅仅实现了微信支付的代金券能力,这次加入了更多的微信支付能力:

  • 微信支付 V3 的基础支付-直连模式优化。
  • 实现微信支付 V3 的合单支付。

同时自行实现了多商户、多 APPID 的多租户模式。后续微信支付分等功能也将接入进来。

4. 完善样例

大部分还是喜欢拿来就用,那么我编写了一个 DEMO 项目,比如微信支付回调的控制器代码:

    /**
     * 微信支付成功回调.
     * <p>
     * 无需开发者判断,只有扣款成功微信才会回调此接口
     *
     * @param wechatpaySerial    the wechatpay serial
     * @param wechatpaySignature the wechatpay signature
     * @param wechatpayTimestamp the wechatpay timestamp
     * @param wechatpayNonce     the wechatpay nonce
     * @param request            the request
     * @return the map
     */

    @SneakyThrows
    @PostMapping("/transaction")
    public Map<String, ?> transactionCallback(
            @RequestHeader("Wechatpay-Serial") String wechatpaySerial,
            @RequestHeader("Wechatpay-Signature") String wechatpaySignature,
            @RequestHeader("Wechatpay-Timestamp") String wechatpayTimestamp,
            @RequestHeader("Wechatpay-Nonce") String wechatpayNonce,
            HttpServletRequest request) {
        String body = request.getReader().lines().collect(Collectors.joining());
        // 对请求头进行验签 以确保是微信服务器的调用
        ResponseSignVerifyParams params = new ResponseSignVerifyParams();
        params.setWechatpaySerial(wechatpaySerial);
        params.setWechatpaySignature(wechatpaySignature);
        params.setWechatpayTimestamp(wechatpayTimestamp);
        params.setWechatpayNonce(wechatpayNonce);
        params.setBody(body);
        return wechatApiProvider.callback(TENANT_ID).transactionCallback(params, data -> {
            //TODO 对回调解析的结果进行消费
        });
    }

基本就是抄过来就能用的。还有更多请参阅 payment-spring-boot-samples项目:

地址:https://github.com/NotFound403/payment-spring-boot-samples

5. 文档

写文档确实是一个枯燥的事情,参考了其它一些开源项目的样子弄了个像模像样的文档:

地址是:https://notfound403.github.io/payment-spring-boot

文档封面

快速接入指南、JavaDoc、踩坑分享都在文档里面了。如果有什么需要完善的地方可以提交 ISSUE。我将持续维护这个工具包。

今天的分享就到这里,如果你在微信支付中遇到了什么问题可以留言提问,分享使我快乐。

Spring Security 实战干货:OAuth2授权回调的核心认证流程

2020-12-07

对比了几种分布式事务方案,我选择了Seata

2020-12-08


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存