CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-com-github-binarywang--weixin-java-pay

Comprehensive Java SDK for integrating with WeChat Pay services including unified orders, refunds, enterprise payments, red packets, profit sharing, and marketing services

Pending
Overview
Eval results
Files

notification-processing.mddocs/

Notification Processing

Webhook processing for payment notifications with automatic signature verification and result parsing for various event types.

Capabilities

Payment Notifications (API v2)

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>";
}

Payment Notifications (API v3)

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\": \"失败\"}";
}

Refund Notifications

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;

Notification Result Types

WxPayOrderNotifyResult (API v2)

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
}

WxPayNotifyV3Result (API v3)

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
    }
}

SignatureHeader

class SignatureHeader {
    String timeStamp;         // Request timestamp
    String nonce;             // Random nonce
    String signature;         // Request signature
    String serial;            // Certificate serial number
    String algorithm;         // Signature algorithm
}

Important Notes

Security Validation

  • All notifications are automatically signature-validated
  • V3 notifications include additional timestamp validation
  • Invalid signatures will throw WxPayException

Response Requirements

  • API v2: Return XML format with return_code
  • API v3: Return JSON format with code and message
  • Always return success response to prevent WeChat retry

Error Handling

  • Process notifications idempotently (handle duplicates)
  • Log all notification processing for audit trails
  • Return appropriate error responses for WeChat retry logic

Install with Tessl CLI

npx tessl i tessl/maven-com-github-binarywang--weixin-java-pay

docs

advanced-services.md

configuration-security.md

core-payment.md

enterprise-services.md

index.md

notification-processing.md

payment-methods.md

refund-management.md

tile.json