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接口,包括创建订单和处理回调。这样用户在你的应用中进行支付时,就可以享受到更加便捷的支付体验。务必注意处理好各类异常和支付安全问题,以确保交易的安全性。