讲解微信支付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自己需要的功能到自己的项目中使用
代码中使用的版本: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国际化、图片滑块验证码、数据库敏感数据加密、字段脱敏、微信支付、微信扫一扫登录
五星 好评,放心下载
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/72543.html