springboot整合微信支付

讲解微信支付V3接口真实开发代码,非demo

使用微信支付需要开通微信支付商户号:微信支付 - 中国领先的第三方支付平台 | 微信支付提供安全快捷的支付方式

微信支付提供多种支付功能,包括【JSAPI支付、APP支付、H5支付、Native支付、小程序支付、合单支付】

本贴将讲述JSAPI支付、Native支付、小程序支付、支付成功回调、退款成功回调、订单超时未支付优雅的处理方案

JSAPI支付、小程序支付的作用:

在小程序、公众号、微信浏览器中调用微信指定的函数,发起调用页面

例如在小程序中的付款按钮事件中调用wx.requestPayment函数,就可以唤起微信支付页面进行支付

Native支付的作用:

PC网站,生成二维码,用户打开微信扫一扫进行支付

 准备工作:

  • mchId

        微信支付平台开通的商户号

        登录商户号:微信支付 - 中国领先的第三方支付平台 | 微信支付提供安全快捷的支付方式,产品中心->开发配置中查看商户号

  • appId

        JSAPI支付在公众号中使用,需要公众号的appid,需要在微信开放平台开通服务号或者公众号类型的账号,如果是在小程序中使用,需要在微信开放平台开通小程序类型的账号:微信开放平台

  • v3 appKey

        微信支付v3版本的appkey

        登录商户号:微信支付 - 中国领先的第三方支付平台 | 微信支付提供安全快捷的支付方式,账户中心->API安全->APIv3密钥进行设置 

  • API证书

        微信支付接口每一步都需要的证书,用于验证

        登录商户号:微信支付 - 中国领先的第三方支付平台 | 微信支付提供安全快捷的支付方式,账户中心->API安全->申请API证书,进行获取

  • 微信平台证书

        微信支付成功时的回调,验签回调返回的密文时使用

        获取步骤:GitHub - wechatpay-apiv3/CertificateDownloader: Java 微信支付 APIv3 平台证书的命令行下载工具,下载CertificateDownloader源码,导入到开发工具中,打开com.elias.test.CertificateDownloaderTest类,填写相关信息,run运行

         然后就会在指定的目录下生成一个.pem文件

  • 配置回调域名

        假如你有一个域名:http://027.com

        登录商户号:微信支付 - 中国领先的第三方支付平台 | 微信支付提供安全快捷的支付方式,产品中心->开发配置->支付配置

        

开始:---------------------------------------------------------------------------------

上代码:

首先你有一个springboot项目

 在pom.xml中添加 http和生成二维码需要的jar包

<!-- http工具包 -->
<dependency>
	<groupId>cn.hutool</groupId>
	<artifactId>hutool-http</artifactId>
	<version>latest-version</version>
</dependency>

<!-- 二维码 -->
<dependency>
	<groupId>com.google.zxing</groupId>
	<artifactId>javase</artifactId>
	<version>latest-version</version>
</dependency>
<dependency>
	<groupId>com.google.zxing</groupId>
	<artifactId>core</artifactId>
	<version>latest-version</version>
</dependency>

把我们准备工作中获取到的证书,添加到项目中,这里我们放在 resources/cert 目录中

 添加微信配置,这里我们放在 resources/pay 目录中

 wxpay_v3.properties 文件中的配置

### 商户号/服务号/公众号appid,
v3.appId=**************

### 小程序appId
v3.appletId=*************

### 商户号
v3.mchId=*************

###v3 的 apiKey密钥
v3.apiKey3=**********************

###apiclient_key.pem文件的路径,使用这种路径写法,后续不会出现idea和jar包两种启动方式jar找不到文件的错误
v3.keyPath=cert/apiclient_key.pem

###apiclient_cert.pem文件的路径
v3.certPath=cert/apiclient_cert.pem

###apiclient_cert.p12文件的路径
v3.certP12Path=cert/apiclient_cert.p12

### 微信 平台证书路径
v3.platformCertPath=cert/wechatpay_72E89C7A03483426DA8028.pem

### 微信 回调域名
v3.domain=http://027.com

创建读取 wxpay_v3.properties 配置文件的类

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

/**
 * 微信支付V3 配置信息
 *
 * @author lixx
 * @version 1.0
 * @since 2021-08-13 14:49
 */
@Data
@Component
@PropertySource("classpath:pay/wxpay_v3.properties")
@ConfigurationProperties(prefix = "v3")
public class WxPayV3Property {

	/**
	 * 商户号appId
	 */
	private String appId;

	/**
	 * 小程序appId
	 */
	private String appletId;

	/**
	 * 商户号
	 */
	private String mchId;

	/**
	 * v3 的 apiKey密钥
	 */
	private String apiKey3;

	/**
	 * key.pem文件的路径
	 */
	private String keyPath;

	/**
	 * cert.pem文件的路径
	 */
	private String certPath;

	/**
	 * cert.p12文件的路径
	 */
	private String certP12Path;

	/**
	 * 平台证书文件的路径
	 */
	private String platformCertPath;

	/**
	 * 回调域名
	 */
	private String domain;

}

签名生成:

以微信文档里的示例/v3/certificates接口为例

准备微信支付常量类

public class WxPayConstant {

	/**
	 * 域名
	 */
	public interface Domain {
		/**
		 * 中国国内
		 */
		String CHINA = "https://api.mch.weixin.qq.com";

		/**
		 * 中国国内(备用域名)
		 */
		String CHINA2 = "https://api2.mch.weixin.qq.com";

		/**
		 * 东南亚
		 */
		String HK = "https://apihk.mch.weixin.qq.com";

		/**
		 * 其它
		 */
		String US = "https://apius.mch.weixin.qq.com";

		/**
		 * 获取公钥
		 */
		String FRAUD = "https://fraud.mch.weixin.qq.com";

		/**
		 * 活动
		 */
		String ACTION = "https://action.weixin.qq.com";

		/**
		 * 刷脸支付
		 * PAY_APP
		 */
		String PAY_APP = "https://payapp.weixin.qq.com";

	}

	/**
	 * 属性
	 */
	public interface Attribute {

		/**
		 * 认证类型,目前为固定值 WECHATPAY2-SHA256-RSA2048
		 */
		String AUTH_TYPE = "WECHATPAY2-SHA256-RSA2048";

		/**
		 * 微信支付,二维码图片存放的目录名称
		 */
		String DIRECTORY = "WxPayQrCodeTempFiles";

		/**
		 * 符合ISO 4217标准的三位字母代码,目前只支持人民币:CNY。
		 */
		String CURRENCY = "CNY";
	}

	/**
	 * url 接口地址
	 */
	public interface Api {

		/**
		 * 支付回调地址
		 */
		String CALL_BACK_NOTIFY = "/wx/pay/callBackNotify";

		/**
		 * 退款回调地址
		 */
		String CALL_BACK_REFUND_NOTIFY = "/wx/pay/callBackRefundNotify";

		/**
		 * 获取商户平台证书
		 */
		String V3_CERTIFICATES = "/v3/certificates";

		/**
		 * 微信支付订单号查询
		 * <p>
		 * 第一个%s:订单号
		 * 第二个%s: 商户号
		 */
		String V3_PAY_ID = "/v3/pay/transactions/id/%s?mchid=%s";

		/**
		 * JSAPI下单
		 */
		String V3_PAY_JSAPI = "/v3/pay/transactions/jsapi";

		/**
		 * native下单
		 */
		String V3_PAY_NATIVE = "/v3/pay/transactions/native";

		/**
		 * h5 下单
		 */
		String V3_PAY_H5 = "/v3/pay/transactions/h5";

		/**
		 * 退款接口
		 */
		String V3_REFUND = "/v3/refund/domestic/refunds";

		/**
		 * 退款订单查询
		 */
		String V3_REFUND_ID = "/v3/refund/domestic/refunds/%s";

	}

}

创建一个注解工具类

@Component
public class WxPayBean {

	@Autowired
	private WxPayV3Property v3Property;

	/**
	 * 构建微信支付签名
	 *
	 * @param method    {@link RequestMethod} 请求方法
	 * @param urlSuffix 可通过 {@link WxPayConstant.Api} 来获取,URL挂载参数需要自行拼接
	 * @param body      接口请求参数,***注意*** 如果无参数,要传入""字符串,不能传null
	 * @return {@link String} 返回 v3 所需的 Authorization
	 * @throws Exception 异常信息
	 */
	public String buildAuthorization(RequestMethod method, String urlSuffix, String body) throws Exception {
		return WxPayUtils.buildAuthorization(method, urlSuffix, v3Property.getMchId(), body, v3Property.getKeyPath(), v3Property.getCertPath());
	}

}

创建一个接口调用测试一下

	@Autowired
	private WxPayBean wxPayBean;

	/**
	 * 生成微信支付签名 test
	 */
	@GetMapping("test")
	public void getSign() throws Exception {
		String authorization = wxPayBean.buildAuthorization("get", WxPayConstant.Api.V3_CERTIFICATES, "");
		System.err.println(authorization);
	}

打印签名结果如下

 使用 postman 测试一下

代码已经写好了,大家可以下载到自己的电脑上,copy自己需要的功能到自己的项目中使用

代码下载地址微信扫一扫登录、微信支付、springsecurity&oauth2-Java文档类资源-CSDN下载项目中使用到的技术包含SpringBoot、SpringSecurity&oauth2(安全更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/a1053765496/24871993

代码中使用的版本:springboot2.3.12.RELEASE、maven3.5+、mysql5.7、mybatis-plus3.4.3.3、

JDK1.8、flywaydb6.5.7

代码中使用的技术:SpringBoot、SpringSecurity&oauth2(安全资源和授权中心模式、包括登录接口自定义返回字段、自定义手机号+密码登录、自定义免密登录)、Queue队列、线程池、xss攻击配置、SpringCache、Mybatis-Plus、Validation、各种自定义aop、发送邮件、Redis、Lombok、flywaydb(自动生成数据库表和初始化数据)、生成二维码、execl、跨域、全局异常处理、i18n国际化、图片滑块验证码、数据库敏感数据加密、字段脱敏、微信支付、微信扫一扫登录

 

 

五星 好评,放心下载

  • 9
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又逢乱世

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值