Comprehensive Java SDK for integrating with WeChat Pay services including unified orders, refunds, enterprise payments, red packets, profit sharing, and marketing services
—
Webhook processing for payment notifications with automatic signature verification and result parsing for various event types.
Parse and validate XML-based payment notifications.
/**
* Parse payment notification from WeChat Pay API v2
* @param xmlData XML notification data from WeChat
* @return Parsed payment notification result
* @throws WxPayException if parsing or validation fails
*/
WxPayOrderNotifyResult parseOrderNotifyResult(String xmlData) throws WxPayException;Usage Example:
@PostMapping("/payment/notify")
public String handlePaymentNotify(HttpServletRequest request) {
try {
// Read XML data from request
String xmlData = IOUtils.toString(request.getInputStream(), "UTF-8");
// Parse notification
WxPayOrderNotifyResult result = wxPayService.parseOrderNotifyResult(xmlData);
// Verify payment success
if ("SUCCESS".equals(result.getResultCode()) && "SUCCESS".equals(result.getReturnCode())) {
// Process successful payment
String outTradeNo = result.getOutTradeNo();
String transactionId = result.getTransactionId();
Integer totalFee = result.getTotalFee();
// Update order status in your system
updateOrderStatus(outTradeNo, "PAID");
// Return success response to WeChat
return "<xml><return_code><![CDATA[SUCCESS]]></return_code></xml>";
}
} catch (Exception e) {
logger.error("Payment notification processing failed", e);
}
return "<xml><return_code><![CDATA[FAIL]]></return_code></xml>";
}Parse and validate JSON-based payment notifications with enhanced security.
/**
* Parse payment notification from WeChat Pay API v3
* @param jsonData JSON notification data from WeChat
* @param header Signature header for validation
* @return Parsed V3 payment notification result
* @throws WxPayException if parsing or validation fails
*/
WxPayNotifyV3Result parseOrderNotifyV3Result(String jsonData, SignatureHeader header) throws WxPayException;Usage Example:
@PostMapping("/payment/notify/v3")
public String handlePaymentNotifyV3(HttpServletRequest request) {
try {
// Read JSON data
String jsonData = IOUtils.toString(request.getInputStream(), "UTF-8");
// Extract signature headers
SignatureHeader header = new SignatureHeader();
header.setTimeStamp(request.getHeader("Wechatpay-Timestamp"));
header.setNonce(request.getHeader("Wechatpay-Nonce"));
header.setSignature(request.getHeader("Wechatpay-Signature"));
header.setSerial(request.getHeader("Wechatpay-Serial"));
// Parse and validate notification
WxPayNotifyV3Result result = wxPayService.parseOrderNotifyV3Result(jsonData, header);
// Process successful payment
if ("SUCCESS".equals(result.getTradeState())) {
String outTradeNo = result.getOutTradeNo();
String transactionId = result.getTransactionId();
updateOrderStatus(outTradeNo, "PAID");
return "{\"code\": \"SUCCESS\", \"message\": \"成功\"}";
}
} catch (Exception e) {
logger.error("V3 payment notification processing failed", e);
}
return "{\"code\": \"FAIL\", \"message\": \"失败\"}";
}Parse refund status notifications from WeChat Pay.
/**
* Parse refund notification from WeChat Pay API v2
* @param xmlData XML refund notification data
* @return Parsed refund notification result
* @throws WxPayException if parsing fails
*/
WxPayRefundNotifyResult parseRefundNotifyResult(String xmlData) throws WxPayException;
/**
* Parse refund notification from WeChat Pay API v3
* @param jsonData JSON refund notification data
* @param header Signature header for validation
* @return Parsed V3 refund notification result
* @throws WxPayException if parsing fails
*/
WxPayRefundNotifyV3Result parseRefundNotifyV3Result(String jsonData, SignatureHeader header) throws WxPayException;class WxPayOrderNotifyResult extends BaseWxPayResult {
String transactionId; // WeChat transaction ID
String outTradeNo; // Merchant order number
String openid; // User openid
String tradeType; // Payment type
String bankType; // Bank type
Integer totalFee; // Payment amount in cents
String feeType; // Currency type
String timeEnd; // Payment completion time
String attach; // Additional data
}class WxPayNotifyV3Result {
String tradeState; // Payment status
String transactionId; // WeChat transaction ID
String outTradeNo; // Merchant order number
String tradeType; // Payment type
String successTime; // Payment success time
Payer payer; // Payer information
Amount amount; // Amount details
static class Payer {
String openid; // User openid
}
static class Amount {
Integer total; // Total amount in cents
String currency; // Currency code
Integer payerTotal; // Payer amount
String payerCurrency; // Payer currency
}
}class SignatureHeader {
String timeStamp; // Request timestamp
String nonce; // Random nonce
String signature; // Request signature
String serial; // Certificate serial number
String algorithm; // Signature algorithm
}WxPayExceptionreturn_codecode and messageInstall with Tessl CLI
npx tessl i tessl/maven-com-github-binarywang--weixin-java-pay