java如何借用第三方快速开发微信支付功能(v3)

java如何借用第三方(IJPay)快速开发支付功能

  • 微信支付所需要的数据
    • 公众号/商户号
  • maven,项目配置,配置文件
    • resources
    • pom.xml
    • IJPay源码
  • 代码实现
    • WxPayV3Controller
      • JSAPI(公众号)下单
      • Native下单

微信支付所需要的数据

公众号/商户号

  • 微信公众号申请,类型选择服务号或企业号,订阅号不支持微信支付功能
  • 微信商户帐号申请(需要审核)

以上可以获取到微信公众号的appid和商户号的mchid

  • v3证书

https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay6_0.shtml
微信提供了微信支付平台证书下载工具,根据需要的商户号和公司名称下载证书(发红包/企业付款/退款等操作需要用到微信支付API证书)
java如何借用第三方快速开发微信支付功能(v3)_第1张图片
以上可获得证书

  • api秘钥和apiv3秘钥(微信支付APIv3的下载平台证书接口以及回调通知中,为防止报文被他人其他人恶意篡改,服务器会对数据进行加密。商户收到报文后,要解密出明文,解密过程中用的key就是APIv3密钥)

登录微信支付商户平台,进入【账户中心】->【账户设置】->【API安全】->【APIv3密钥】中设置
以上可获得api秘钥和apiv3秘钥

maven,项目配置,配置文件

:项目的所有实现基于IJpay源码的IJPay-Demo-SpringBoot项目

resources

创建cert文件,将下载的三个证书文件放到cert下面

pom.xml

以下附上我项目中已经应用到生产环境的依赖(包含eureka,oauth2等)

<dependencies>
        <dependency>
            <groupId>org.springframework.security.oauth</groupId>
            <artifactId>spring-security-oauth2</artifactId>
            <version>2.3.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.1.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.1.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.1.4.RELEASE</version>
        </dependency>
        <!-- eureka -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.1.1.RELEASE</version>
        </dependency>
        <!--         sqlserver -->
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>sqljdbc4</artifactId>
            <version>4.0</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/libs/sqljdbc4-4.0.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-dts</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.dachao.parameter</groupId>
            <artifactId>parameter</artifactId>
            <version>1.0.1-SNAPSHOT</version>
        </dependency>
        <!--        // 扩展包-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-extension</artifactId>
            <version>3.2.0</version>
        </dependency>
        <!-- druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.16</version>
        </dependency>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--SpringBoot集成redis依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-redis</artifactId>
            <version>1.3.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>


        <!-- IJPay -->
        <dependency>
            <groupId>com.github.javen205</groupId>
            <artifactId>IJPay-All</artifactId>
            <version>${ijapy.version}</version>
        </dependency>
        <dependency>
            <groupId>com.github.xkzhangsan</groupId>
            <artifactId>xk-time</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.7</version>
        </dependency>
        <dependency>
            <groupId>com.youxuewang</groupId>
            <artifactId>yxwApi</artifactId>
            <version>1.1.0-SNAPSHOT</version>
        </dependency>
        <!-- hutool工具 -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.2.5</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.51</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.51</version>
        </dependency>
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier><!-- jdk版本 -->
        </dependency>
    </dependencies>

IJPay源码

https://gitee.com/javen205/IJPay
可以下载源码读一下,了解一下实现原理,封装了调用微信的api,需要下载,从源码中粘一部分代码进行修改

先完成准备工作,将源码IJPay-Demo-SpringBoot中的wxpay_v3.properties放到自己项目中的resources下
java如何借用第三方快速开发微信支付功能(v3)_第2张图片
domain为微信已经授权的域名,详情请参考官方文档微信支付开发文档

v3.appId=公众号id
v3.keyPath=key.pem(resources文件下cert该文件的绝对路径,建议本地完成以后,放在服务器文件夹下访问)
v3.certPath=cert.pem (如上)
v3.certP12Path=cert.p12(如上)
v3.platformCertPath=wx_cert.pem(调用 WxPayV3Controller 中的 get接口生成)
v3.mchId=商户id
v3.apiKey3= 自定义 apiv3 秘钥
v3.apiKey= 自定义 apiv 秘钥
v3.domain= 微信授权域名

将以上拿到的appid,mchid等一些数据配置在这里,将WxPayV3Bean拿过来

java如何借用第三方快速开发微信支付功能(v3)_第3张图片

代码实现

WxPayV3Controller

  1. 生成platformCert.pem

将源码下的com.ijpay.demo.controller.wxpay.WxPayV3Controller文件Copy到自己的项目下,配置依赖使项目运行
调用get方法生成platformCert.pem文件。

JSAPI(公众号)下单

JSAPI支付是指商户通过调用微信支付提供的JSAPI接口,在支付场景中调起微信支付模块完成收款。

随便取一个openid调用项目下/v3/jsApiPay接口
返回结果为官方文档(jaspi下单)发描述返回一下结果
java如何借用第三方快速开发微信支付功能(v3)_第4张图片
以下为我的生产环境自己调整的返回结果。
java如何借用第三方快速开发微信支付功能(v3)_第5张图片
这个接口返回的数据可以让前台调用唤起支付jsapi唤起支付

Native下单

商户Native支付下单接口,微信后台系统返回链接参数code_url,商户后台系统将code_url值生成二维码图片,用户使用微信客户端扫码后发起支付。

调用v3/nativePay接口
按照官方文档描述只要返回以下信息,native接口即调用成功java如何借用第三方快速开发微信支付功能(v3)_第6张图片
以下为我的生产环境自己调整的返回结果。
java如何借用第三方快速开发微信支付功能(v3)_第7张图片
完结撒花,所有的支付都可以按照这个逻辑来
IJpay包含了微信支付,京东支付,支付宝支付等一系列支付。

你可能感兴趣的:(SpringBoot,SpringCloud,maven,java,微信,spring,cloud)