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

5 篇文章 0 订阅
3 篇文章 0 订阅

微信支付所需要的数据

公众号/商户号

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

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

  • v3证书

https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay6_0.shtml
微信提供了微信支付平台证书下载工具,根据需要的商户号和公司名称下载证书(发红包/企业付款/退款等操作需要用到微信支付API证书)
在这里插入图片描述
以上可获得证书

  • 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下
在这里插入图片描述
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拿过来

在这里插入图片描述

代码实现

WxPayV3Controller

  1. 生成platformCert.pem

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

JSAPI(公众号)下单

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

随便取一个openid调用项目下/v3/jsApiPay接口
返回结果为官方文档(jaspi下单)发描述返回一下结果
在这里插入图片描述
以下为我的生产环境自己调整的返回结果。
在这里插入图片描述
这个接口返回的数据可以让前台调用唤起支付jsapi唤起支付

Native下单

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

调用v3/nativePay接口
按照官方文档描述只要返回以下信息,native接口即调用成功在这里插入图片描述
以下为我的生产环境自己调整的返回结果。
在这里插入图片描述
完结撒花,所有的支付都可以按照这个逻辑来
IJpay包含了微信支付,京东支付,支付宝支付等一系列支付。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信开发使用的cert,里面微信支付API共四份(证书pkcs12格式、证书pem格式、证书密钥pem格式、CA证书),为接口中强制要求时需携带的证书文件。 证书属于敏感信息,请妥善保管不要泄露和被他人复制。 不同开发语言下的证书格式不同,以下为说明指引: 证书pkcs12格式(apiclient_cert.p12) 包含了私钥信息的证书文件,为p12(pfx)格式,由微信支付签发给您用来标识和界定您的身份 部分安全性要求较高的API需要使用该证书来确认您的调用身份 windows上可以直接双击导入系统,导入过程中会提示输入证书密码,证书密码默认为您的商户ID(如:10010000) 证书pem格式(apiclient_cert.pem) 从apiclient_cert.p12中导出证书部分的文件,为pem格式,请妥善保管不要泄漏和被他人复制 部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供 您也可以使用openssl命令来自己导出:openssl pkcs12 -clcerts -nokeys -in apiclient_cert.p12 -out apiclient_cert.pem 证书密钥pem格式(apiclient_key.pem) 从apiclient_cert.p12中导出密钥部分的文件,为pem格式 部分开发语言和环境,不能直接使用p12文件,而需要使用pem,所以为了方便您使用,已为您直接提供 您也可以使用openssl命令来自己导出:openssl pkcs12 -nocerts -in apiclient_cert.p12 -out apiclient_key.pem CA证书(rootca.pem) 微信支付api服务器上也部署了证明微信支付身份的服务器证书,您在使用api进行调用时也需要验证所调用服务器及域名的真实性 该文件为签署微信支付证书的权威机构的根证书,可以用来验证微信支付服务器证书的真实性 某些环境和工具已经内置了若干权威机构的根证书,无需引用该证书也可以正常进行验证,这里提供给您在未内置所必须根证书的环境中载入使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值