Java接入微信支付超级详细教程——从入门到精通

源码下载

一、准备开发所需的账号以及配置信息

上面两个平台注册完成之后就需要把配置信息拿到了:

图1

2、Api_key: 应用密钥,查看 ”图1“

3、mch_Id:商户ID (收钱的商家ID),查看 ”图2“

图2

二、准备环境

项目采用SpringBoot

1、导入jar包

1.2导入hutool工具类jar包

<!-- hutool -->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.7.2</version>
</dependency>

2、设置开发参数

在application.yml,设置号开发参数

3、参数注入到payProperties类中

三、预下单

本项目返回参数为了方便我都是用的Map(实际开发中禁用),我这是为了方便不想写实体类,嘿嘿…

要完成支付那肯定我们需要先下一笔订单把,没订单客户咋付钱,所以先“预下单”

官方文档:

2、预下单接口封装服务类

解释:

这样接口层就写好了,接下来可以使用 进行调用了

3、测试调用“预下单”

本次交易类型为:NATIVE-二维码支付

参数疑惑解释:

Sub_mch_id:子商户的商户号(真正收钱的商家),这个参数只在”服务商模式“下需要传输,不懂什么是”服务商模式“看下方文章

第一篇:

第二篇:

如果你不是“服务商模式”,这个字段注释掉就行了

3.1返回结果

四、查询订单交易状态

官方文档:

上面我们已经完成了“下单”操作,那现在我们要来完成“查询订单交易状态”的操作,在我们下单成功之后我们肯定要查询这个订单交易成功了没有对吧,要不然客户也不知道这个订单是支付成功了还是失败了。

1、将下方代码放入 com.maomao.pay.web.service.WeChatPayService中

2、调用“查询交易状态”接口

将下方代码放入com.maomao.pay.weChatPayTest,运行

2.1返回结果

{
          
   
    "msg":"未支付",
    "code":0,
    "daata":{
          
   
        "nonce_str":"w1EBrnqCnoZl0aWM",
        "trade_state":"NOTPAY",
        "sign":"3BC73DB4205FBA7F835FD534C921BC2F",
        "return_msg":"OK",
        "mch_id":"1603076382",
        "sub_mch_id":"1603126310",
        "sub_appid":"wx609af6beda27e69d",
        "device_info":"",
        "out_trade_no":"a1fa1f29a4e6402296eae4c8323c6120",
        "appid":"wxea266a95de9e87a9",
        "total_fee":"1",
        "trade_state_desc":"订单未支付",
        "result_code":"SUCCESS",
        "return_code":"SUCCESS"
    }
}

五、前端整合调用支付

1、接口代码

2、前端代码

完成上面的代码,简单的一个支付实现就完成了。

六、异步回调通知

官方文档:

上诉代码,我们已经弄完了前端和后端的交互流程,前端页面也告诉了用户这笔订单的状态。但是。。。。。但是… ,我们后端不知道啊,我这么说你们肯定有疑问了,-那我们刚刚不是有一个“查询交易状态”的接口不是已经知道用户支付成功了吗?,为什么还要弄一个异步回调接口呢。你要是这么想的话,那你就肤浅了。。。。

1、什么是异步回调接口???

2、为什么我们要弄一个异步回调接口???

1、花生壳:(免费)

2、natapp:(免费),但是每次启动域名会变

1、回调接口服务层

将下方代码放入:com.maomao.pay.web.service.WeChatPayService

2、回调接口控制层

将下方代码放入:com.maomao.pay.web.controller.WeiXinPayController

returnWeChat实例值:

<xml>
  <return_code><![CDATA[SUCCESS]]></return_code>
  <return_msg><![CDATA[OK]]></return_msg>
</xml>

3、预下单接口设置回调地址

在“预下单”接口控制层传入,回调地址(公网可以访问),也可以放入 yml文件中通过payProperties类进行注入(我这里就不演示了)

4、演示效果

走到这里就代表回调处理成功了,这样子你的真个流程就走完了。

在这里你需要做”验签“保证系统的安全性,防止不法分子仿造数据调用你的接口。记住处理你的项目业务逻辑的代码只能再这里进行,不要去“查询交易状态”接口中进行,要保证系统的安全性以及一致性,要不然用户支付成功了,你最后没给别人发货,那谁还敢用你的平台,其次当如果一个回调过来了,你要先查一下这个订单有没有支付过,如果是重复支付那你就要给用户进行退款处理。(退款的代码我就不放在这里演示了),我会放在项目源码里面。

七、源码下载

源码获取:

经验分享 程序员 微信小程序 职场和发展