weixin-java-pay对接微信V3支付记录

2021-10-16 23:49:37 1648

https://github.com/binarywang/weixin-java-pay-demo

这个demo里, 没有v3版本的配置, 这里记录一下

v3支付, 相对之前的版本来说, 更为安全, 也相对繁琐一些, 而且请求和响应都使用了json格式的数据

1. 配置

发起支付所需的配置有三个证书文件, 在商户后台申请

apiclient_cert.p12

apiclient_key.pem

apiclient_cert.pem

完整配置

@Bean
@ConditionalOnMissingBean
public WxPayService wxService() {
    WxPayConfig payConfig = new WxPayConfig();
    payConfig.setAppId(StringUtils.trimToNull(this.properties.getAppId()));
    payConfig.setMchId(StringUtils.trimToNull(this.properties.getMchId()));
    payConfig.setKeyPath(StringUtils.trimToNull(this.properties.getKeyPath()));
    payConfig.setPrivateKeyPath(StringUtils.trimToNull(this.properties.getPrivateKeyPath()));
    payConfig.setPrivateCertPath(StringUtils.trimToNull(this.properties.getPrivateCertPath()));
    payConfig.setApiV3Key(StringUtils.trimToNull(this.properties.getApiV3Key()));

    WxPayService wxPayService = new WxPayServiceImpl();
    wxPayService.setConfig(payConfig);
    return wxPayService;
}

2. 发起支付

小程序端 https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_1.shtml
WxPayUnifiedOrderV3Request request = new WxPayUnifiedOrderV3Request();
WxPayUnifiedOrderV3Result.JsapiResult result =  wxService.createOrderV3(TradeTypeEnum.JSAPI, request);
System.out.println(result);

3. 回调处理

文档 https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_5.shtml
WxPayOrderNotifyV3Result result = wxService.parseOrderNotifyV3Result("notifyData", new SignatureHeader());

WxPayOrderNotifyV3Result.DecryptNotifyResult notifyResult = result.getResult();

WxPayNotifyResponse.success("成功");

SignatureHeader内的属性都可以在文档内找到获取方法

注意

支付通知http应答码为200或204才会当作正常接收,当回调处理异常时,应答的HTTP状态码应为500,或者4xx。

这个是官方文档原文, 如果应答报文codefail, 但http状态码为200, 微信也认为你是正常处理, 不会重试回调

没什么好说的, v3支付使用json进行数据交互, 但weixin-java-pay提供的应答方法是以xml格式返回的, 可以自定义对象返回json

注意微信回调并非100%可靠, 需要补偿机制

最坑的第三方支付-华云聚付

华云聚付提供的是大额付款解决方案, 使用华云付本质是在厦门国际银行开电子账户, 支付就是电子账户之间相互转账这个第三方支付的坑包括但不限于文档各种遗漏, 且托管在第三方(语雀, 最近崩了十几个小时)文档说对称加密使用AES, 但完全不写是AES哪种算法测试环境基本不可用测试环境公钥给错, 导致验签卡
2023-08-25

weixin-java-pay对接微信V3支付记录

https://github.com/binarywang/weixin-java-pay-demo这个demo里, 没有v3版本的配置, 这里记录一下v3支付, 相对之前的版本来说, 更为安全, 也相对繁琐一些, 而且请求和响应都使用了json格式的数据1. 配置发起支付所需的配置有三个证书文件,
2021-10-16

freemarker 时间显示不正常 设置时区

项目在本地开发的时候显示正常,部署上服务器就一直差8个小时,最后发现freemarker官方文档有这样的说明time_zone:时区的名称来显示并格式化时间。 默认情况下,使用JVM的时区。 也可以是 Java 时区 API 接受的值,或者 "JVM default" (从 FreeMarker 2
2020-03-28
IDEA 2019.1 xml 不高亮

IDEA 2019.1 xml 不高亮

前几天更新了idea后,发现xml里的代码都没有了高亮,变得跟记事本一个德性了打开setting ,搜索 File Types,找到xml项, 查看下方的匹配格式,果然没有xml,(idea真是厉害)点击右方的+,输入*.xml,点击ok,解决问题
2020-03-28

npm install 淘宝镜像

npm install --registry=https://registry.npm.taobao.org
2020-03-28
Java中方法的参数传递机制

Java中方法的参数传递机制

来看一段代码 public class Man { private String name; private Integer age; public String getName() { return name; } publi
2020-03-28
基于自定义注解手写权限控制

基于自定义注解手写权限控制

方法一: AOP 方法二: 拦截器项目结构项目依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-w
2020-03-28

Docker 部署 详细全过程 附代码

Docker 部署本站 全过程环境:CentOS7.61. 安装Docker其他版本CentOS可以参考这个https://help.aliyun.com/document_detail/187598.html查看本机内核版本,内核版本需高于 3.10uname -r 确保 yum 包最新yum u
2020-03-28

SpringBoot 启动普通java工程

引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.0.9</version> </dependency>
2020-03-28

Vue.js DOM操作

<template> <input type="button" @click="reply($event)" value="回复"> </template> export default { methods: { replyFun(e) {
2020-03-29
CentOS7编译调试OpenJDK12

CentOS7编译调试OpenJDK12

1. 下载源码https://hg.openjdk.java.net/jdk/jdk12点击左侧的browse,再点击zip,就可以下载zip格式的源码压缩包。unzip xxx.zip 解压文件2. 安装jdkyum install java-11-openjdk-devel -y3. 运行con
2020-04-23
编写自己的Spring Boot Starter

编写自己的Spring Boot Starter

1.新建一个maven项目命名规则统一是xxx-spring-boot-starter完整pom.xml<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"
2020-06-29