当前位置: 首页 > article >正文

Java微信支付接入(4) - API V3 API字典和相关工具

1. API列表

Native下单 - Native支付 | 微信支付商户文档中心 (qq.com)

以下是微信提供的 Native 支付的相关 API

        微信提供了详细的请求接口和参数

2.接口规则

概述 - 通用规则 | 微信支付商户文档中心 (qq.com)

微信支付 APIv3 使用 JSON 作为消息体的数据交换格式。

JSON处理依赖

<!--json处理-->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
</dependency>

3.定义枚举

        我们可以将微信提供的接口以及各种状态都定义到枚举类中

WxApiType(微信接口枚举):

package com.atguigu.paymentdemo.enums.wxpay;

import lombok.AllArgsConstructor;
import lombok.Getter;

@AllArgsConstructor
@Getter
public enum WxApiType {

	/**
	 * Native下单
	 */
	NATIVE_PAY("/v3/pay/transactions/native"),

	/**
	 * Native下单
	 */
	NATIVE_PAY_V2("/pay/unifiedorder"),

	/**
	 * 查询订单
	 */
	ORDER_QUERY_BY_NO("/v3/pay/transactions/out-trade-no/%s"),

	/**
	 * 关闭订单
	 */
	CLOSE_ORDER_BY_NO("/v3/pay/transactions/out-trade-no/%s/close"),

	/**
	 * 申请退款
	 */
	DOMESTIC_REFUNDS("/v3/refund/domestic/refunds"),

	/**
	 * 查询单笔退款
	 */
	DOMESTIC_REFUNDS_QUERY("/v3/refund/domestic/refunds/%s"),

	/**
	 * 申请交易账单
	 */
	TRADE_BILLS("/v3/bill/tradebill"),

	/**
	 * 申请资金账单
	 */
	FUND_FLOW_BILLS("/v3/bill/fundflowbill");


	/**
	 * 类型
	 */
	private final String type;
}

WxNotifyType(通知接口枚举)(微信要回调这些接口来发送通知) 

@AllArgsConstructor
@Getter
public enum WxNotifyType {

	/**
	 * 支付通知
	 */
	NATIVE_NOTIFY("/api/wx-pay/native/notify"),

	/**
	 * 支付通知
	 */
	NATIVE_NOTIFY_V2("/api/wx-pay-v2/native/notify"),


	/**
	 * 退款结果通知
	 */
	REFUND_NOTIFY("/api/wx-pay/refunds/notify");

	/**
	 * 类型
	 */
	private final String type;
}

WxRefundStatus (退款状态枚举)

@AllArgsConstructor
@Getter
public enum WxRefundStatus {

    /**
     * 退款成功
     */
    SUCCESS("SUCCESS"),

    /**
     * 退款关闭
     */
    CLOSED("CLOSED"),

    /**
     * 退款处理中
     */
    PROCESSING("PROCESSING"),

    /**
     * 退款异常
     */
    ABNORMAL("ABNORMAL");

    /**
     * 类型
     */
    private final String type;
}

WxTradeState 支付状态枚举

package com.atguigu.paymentdemo.enums.wxpay;

import lombok.AllArgsConstructor;
import lombok.Getter;

@AllArgsConstructor
@Getter
public enum WxTradeState {

    /**
     * 支付成功
     */
    SUCCESS("SUCCESS"),

    /**
     * 未支付
     */
    NOTPAY("NOTPAY"),

    /**
     * 已关闭
     */
    CLOSED("CLOSED"),

    /**
     * 转入退款
     */
    REFUND("REFUND");

    /**
     * 类型
     */
    private final String type;
}

4.定义工具类

HttpUtils (将微信传来的通知参数转化为字符串)

package com.atguigu.paymentdemo.util;

import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;


public class HttpUtils {

    /**
     * 将通知参数转化为字符串
     * @param request
     * @return
     */
    public static String readData(HttpServletRequest request) {
        BufferedReader br = null;
        try {
            StringBuilder result = new StringBuilder();
            br = request.getReader();
            for (String line; (line = br.readLine()) != null; ) {
                if (result.length() > 0) {
                    result.append("\n");
                }
                result.append(line);
            }
            return result.toString();
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

OrderNoUtils (用于生成订单号)

package com.atguigu.paymentdemo.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * 订单号工具类
 *
 * @author qy
 * @since 1.0
 */
public class OrderNoUtils {

    /**
     * 获取订单编号
     * @return
     */
    public static String getOrderNo() {
        return "ORDER_" + getNo();
    }

    /**
     * 获取退款单编号
     * @return
     */
    public static String getRefundNo() {
        return "REFUND_" + getNo();
    }

    /**
     * 获取编号
     * @return
     */
    public static String getNo() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String newDate = sdf.format(new Date());
        String result = "";
        Random random = new Random();
        for (int i = 0; i < 3; i++) {
            result += random.nextInt(10);
        }
        return newDate + result;
    }

}


http://www.kler.cn/news/342802.html

相关文章:

  • Spring Boot洗衣店订单系统:提高工作效率
  • 新电脑 Windows 系统初始配置
  • JavaScript七大常见陷阱深度解析
  • 电商商品API接口系列(商品详情数据)商品比价、数据分析、自营商城上货
  • Android Framework AMS(03)AMS关键类解读
  • 使用ruo-yi框架增加部门展示(非树)示例
  • 单表2000万要考虑分表?三层B+树大概能存多少数据量?
  • k8s、prometheus、grafana数据采集和展示的链路流程
  • Java Python 开发效率利器:IDEA、PyCharm 与 通义灵码深度融合
  • JavaEE中记录日志
  • 【论文阅读】Learning a Few-shot Embedding Model with Contrastive Learning
  • android广播实现PIN码设置
  • 禁止浏览器扩展插件自动更新(以EDGE和IDM为例)
  • Qt_软件添加版本信息
  • 诺贝尔物理学奖
  • 【计算机网络 - 基础问题】每日 3 题(三十五)
  • iOS--理解MVC与MVVM
  • Python编程:创意爱心表白代码集
  • 学习博客写作
  • 大语言模型(LLM)综述