Java对接微信支付SDK接口

微信支付是当前非常流行的一种支付方式,尤其是在移动端。本文将介绍如何在Java项目中对接微信支付SDK接口,包括基本配置、请求参数的构造及如何处理返回结果。

一、环境准备

在开始之前,你的项目中需要包含以下依赖库,通常使用Maven管理依赖。在pom.xml中添加微信支付SDK和其他必需库的依赖。

<dependency>
    <groupId>com.github.wxpay</groupId>
    <artifactId>wxpay-sdk-java</artifactId>
    <version>1.4.0</version> <!-- 请根据官网提供的最新版本调整 -->
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.30</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.30</version>
</dependency>

二、配置微信支付参数

在使用微信支付之前,首先需要进行相关参数的配置。通常这些参数会放在一个配置文件中,或者在application.properties文件中。

import java.util.HashMap;
import java.util.Map;

public class WxPayConfig {
    // 微信支付商户号
    private static final String MCH_ID = "YOUR_MCH_ID";
    // 微信支付密钥
    private static final String KEY = "YOUR_SECRET_KEY";
    // 微信支付证书路径
    private static final String CERT_PATH = "/path/to/your/cert.p12";

    public static Map<String, String> getConfig() {
        Map<String, String> config = new HashMap<>();
        config.put("mch_id", MCH_ID);
        config.put("key", KEY);
        config.put("cert_path", CERT_PATH);
        return config;
    }
}

三、创建支付订单

接下来,我们需要调用微信接口创建支付订单。这通常通过HTTP POST请求的形式发送参数到微信支付API。

import com.github.wxpay.sdk.WXPay;
import com.github.wxpay.sdk.WXPayUtil;

import java.util.HashMap;
import java.util.Map;

public class WeChatPay {
    private WXPay wxPay;

    public WeChatPay() throws Exception {
        this.wxPay = new WXPay(WxPayConfig.getConfig());
    }

    public Map<String, String> createOrder(String orderNo, String body, String totalFee, String notifyUrl) throws Exception {
        Map<String, String> data = new HashMap<>();
        data.put("body", body);
        data.put("out_trade_no", orderNo);
        data.put("total_fee", totalFee);
        data.put("spbill_create_ip", "YOUR_SERVER_IP"); // 服务器IP
        data.put("notify_url", notifyUrl);
        data.put("trade_type", "APP"); // 这里使用APP支付

        // 调用统一下单接口
        Map<String, String> result = wxPay.unifiedOrder(data);
        if ("SUCCESS".equals(result.get("return_code"))) {
            // 返回给前端需要的参数
            Map<String, String> responseData = new HashMap<>();
            responseData.put("appid", result.get("appid"));
            responseData.put("partnerid", result.get("mch_id"));
            responseData.put("prepayid", result.get("prepay_id"));
            responseData.put("noncestr", WXPayUtil.generateNonceStr());
            responseData.put("timestamp", String.valueOf(System.currentTimeMillis() / 1000));
            responseData.put("sign", WXPayUtil.generateSignature(responseData, WxPayConfig.getConfig().get("key")));

            return responseData;
        } else {
            throw new Exception("下单失败:" + result.get("return_msg"));
        }
    }
}

四、处理回调

处理微信支付的异步通知回调是保证支付结果准确的重要环节。当用户完成支付后,微信会向我们通知支付结果,我们需要在服务器端对该通知进行验证和处理。

import javax.servlet.http.HttpServletRequest;

public void handlePayCallback(HttpServletRequest request) {
    try {
        Map<String, String> data = WXPayUtil.xmlToMap(request.getInputStream());
        // 验证签名
        if (wxPay.isPayResultNotifySignatureValid(data)) {
            // 验证成功,处理业务逻辑
            String orderNo = data.get("out_trade_no");
            String status = data.get("return_code");
            if ("SUCCESS".equals(status)) {
                // 更新订单状态,发送通知等
            }
        }
    } catch (Exception e) {
        e.printStackTrace(); // 错误处理
    }
}

总结

通过以上步骤,我们在Java项目中成功对接了微信支付SDK接口,包括创建订单和处理回调。这样用户在你的应用中进行支付时,就可以享受到更加便捷的支付体验。务必注意处理好各类异常和支付安全问题,以确保交易的安全性。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部