Java 微信支付 H5支付实现教程

1. 整体流程

首先,我们来了解一下整个实现微信支付 H5支付的流程。下面是一个简单的流程图,展示了从用户下单到完成支付的整个过程。

graph TD
A(用户下单) --> B(生成预支付订单)
B --> C(获取支付参数)
C --> D(调起微信支付)
D --> E(支付结果确认)
E --> F(支付成功)

2. 具体步骤和代码实现

2.1 生成预支付订单

生成预支付订单是指在用户下单之后,向微信支付接口发送请求,生成一个预支付订单,获取到订单号以及相关支付参数。

首先,你需要引入相关的支付SDK,并初始化支付配置:

// 引入微信支付相关SDK
import com.tencent.WXPay;
import com.tencent.WXPayConfig;
import com.tencent.WXPayConfigImpl;
import com.tencent.WXPayConstants;
import com.tencent.WXPayUtil;

// 初始化支付配置
WXPayConfig config = new WXPayConfigImpl();
WXPay wxpay = new WXPay(config);

接下来,你需要构建生成预支付订单的参数,并调用微信支付接口:

// 构建生成预支付订单的参数
Map<String, String> data = new HashMap<String, String>();
data.put("body", "商品描述"); // 商品描述
data.put("out_trade_no", "商户订单号"); // 商户订单号
data.put("total_fee", "订单金额(单位:分)"); // 订单金额
data.put("notify_url", "支付结果回调地址"); // 支付结果回调地址
data.put("trade_type", "MWEB"); // 交易类型,这里使用H5支付
data.put("spbill_create_ip", "用户IP地址"); // 用户IP地址

// 调用微信支付接口生成预支付订单
Map<String, String> result = wxpay.unifiedOrder(data);

2.2 获取支付参数

在生成预支付订单成功后,你需要从返回的结果中解析出支付参数,用于后续调起微信支付。

// 解析生成预支付订单的结果,获取支付参数
String mwebUrl = result.get("mweb_url"); // H5支付链接
String prepayId = result.get("prepay_id"); // 预支付ID

2.3 调起微信支付

获取到支付参数后,你需要在前端页面中调起微信支付,跳转到支付页面。

// 在前端页面中跳转到H5支付链接
response.sendRedirect(mwebUrl);

2.4 支付结果确认

用户完成支付后,微信支付会将支付结果通知到你事先设置的支付结果回调地址。你需要处理支付结果,并返回给微信支付接口。

// 处理支付结果回调
String xmlData = readXmlDataFromRequest(request); // 从请求中读取XML数据
Map<String, String> notifyData = WXPayUtil.xmlToMap(xmlData); // 将XML数据转换为Map

// 校验支付结果
if (wxpay.isPayResultNotifySignatureValid(notifyData)) {
    // 支付结果校验成功,更新订单状态等操作
    // TODO: 处理支付成功逻辑
    String returnXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
    response.getWriter().write(returnXml); // 返回支付结果确认XML
} else {
    // 支付结果校验失败
    // TODO: 处理支付失败逻辑
    String returnXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[Invalid signature]]></return_msg></xml>";
    response.getWriter().write(returnXml); // 返回支付结果确认XML
}

3. 总结

通过以上步骤,我们可以实现 Java 微信支付的 H5支付功能。在生成预支付订单时,需要构建参数并调用微信支付接口;在获取支付参数后,可以跳转到支付页面;在支付结果确认时,需要处理支付结果并返回给微信支付接口。

希望本教程对你有所帮助,祝你实现成功!