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

payment-methods.mddocs/

Payment Methods Integration

Support for all WeChat Pay payment methods including JSAPI (Mini Program/Official Account), Native (QR Code), APP, H5 (Mobile Web), Micropay (Barcode), and Face Payment.

Capabilities

JSAPI Payment (Mini Program / Official Account)

Payment within WeChat ecosystem using user's openid. Suitable for Mini Programs and Official Account web pages.

/**
 * Create JSAPI payment order
 * @param request Unified order request with openid
 * @return Order result with payment parameters for frontend
 * @throws WxPayException if order creation fails
 */
WxPayUnifiedOrderResult unifiedOrder(WxPayUnifiedOrderRequest request) throws WxPayException;

/**
 * Generate JSAPI payment parameters for frontend
 * @param result Unified order result
 * @return Payment parameters for WeChat JSAPI
 */
WxPayMpOrderResult createMpOrder(WxPayUnifiedOrderResult result);

Usage Example:

// Create JSAPI payment request
WxPayUnifiedOrderRequest request = WxPayUnifiedOrderRequest.newBuilder()
    .outTradeNo("ORDER_20230101_001")
    .totalFee(100)
    .body("Premium Service")
    .tradeType(WxPayConstants.TradeType.JSAPI)
    .openid("user-openid-from-wechat")
    .notifyUrl("https://your-domain.com/payment/notify")
    .spbillCreateIp("192.168.1.1")
    .build();

// Create order
WxPayUnifiedOrderResult result = wxPayService.unifiedOrder(request);

// Generate payment parameters for frontend
WxPayMpOrderResult mpOrder = result.createMpOrder();

// Return to frontend for WeChat Pay
Map<String, String> payParams = Map.of(
    "appId", mpOrder.getAppId(),
    "timeStamp", mpOrder.getTimeStamp(),
    "nonceStr", mpOrder.getNonceStr(),
    "package", mpOrder.getPackageVal(),
    "signType", mpOrder.getSignType(),
    "paySign", mpOrder.getPaySign()
);

Native Payment (QR Code)

QR code-based payment for web applications and PC environments.

/**
 * Create Native payment order with QR code
 * @param request Unified order request for Native payment
 * @return Order result with QR code URL
 * @throws WxPayException if order creation fails
 */
WxPayUnifiedOrderResult unifiedOrder(WxPayUnifiedOrderRequest request) throws WxPayException;

/**
 * Generate Native payment parameters
 * @param result Unified order result
 * @return Native payment result with QR code
 */
WxPayNativeOrderResult createNativeOrder(WxPayUnifiedOrderResult result);

Usage Example:

// Create Native payment request
WxPayUnifiedOrderRequest request = WxPayUnifiedOrderRequest.newBuilder()
    .outTradeNo("ORDER_20230101_002")
    .totalFee(200)
    .body("Desktop Software License")
    .tradeType(WxPayConstants.TradeType.NATIVE)
    .productId("PRODUCT_001") // Required for Native payments
    .notifyUrl("https://your-domain.com/payment/notify")
    .spbillCreateIp("192.168.1.1")
    .build();

// Create order
WxPayUnifiedOrderResult result = wxPayService.unifiedOrder(request);

// Get QR code URL
String qrCodeUrl = result.getCodeUrl();

// Generate QR code image and display to user
System.out.println("QR Code URL: " + qrCodeUrl);

APP Payment

Payment within mobile applications (Android/iOS).

/**
 * Create APP payment order
 * @param request Unified order request for APP payment
 * @return Order result with payment parameters for mobile app
 * @throws WxPayException if order creation fails
 */
WxPayUnifiedOrderResult unifiedOrder(WxPayUnifiedOrderRequest request) throws WxPayException;

/**
 * Generate APP payment parameters for mobile SDK
 * @param result Unified order result
 * @return APP payment result with SDK parameters
 */
WxPayAppOrderResult createAppOrder(WxPayUnifiedOrderResult result);

Usage Example:

// Create APP payment request
WxPayUnifiedOrderRequest request = WxPayUnifiedOrderRequest.newBuilder()
    .outTradeNo("ORDER_20230101_003")
    .totalFee(500)
    .body("Mobile App Premium Features")
    .tradeType(WxPayConstants.TradeType.APP)
    .notifyUrl("https://your-domain.com/payment/notify")
    .spbillCreateIp("192.168.1.1")
    .build();

// Create order
WxPayUnifiedOrderResult result = wxPayService.unifiedOrder(request);

// Generate payment parameters for mobile app
WxPayAppOrderResult appOrder = result.createAppOrder();

// Return to mobile app for WeChat Pay SDK
Map<String, String> payParams = Map.of(
    "appid", appOrder.getAppId(),
    "partnerid", appOrder.getPartnerId(),
    "prepayid", appOrder.getPrepayId(),
    "package", appOrder.getPackageVal(),
    "noncestr", appOrder.getNonceStr(),
    "timestamp", appOrder.getTimeStamp(),
    "sign", appOrder.getSign()
);

H5 Payment (Mobile Web)

Payment in mobile web browsers outside of WeChat.

/**
 * Create H5 payment order for mobile web
 * @param request Unified order request with scene info
 * @return Order result with H5 payment URL
 * @throws WxPayException if order creation fails
 */
WxPayUnifiedOrderResult unifiedOrder(WxPayUnifiedOrderRequest request) throws WxPayException;

/**
 * Generate H5 payment parameters
 * @param result Unified order result
 * @return H5 payment result with redirect URLs
 */
WxPayH5OrderResult createH5Order(WxPayUnifiedOrderResult result);

Usage Example:

// Create H5 payment request
WxPayUnifiedOrderRequest request = WxPayUnifiedOrderRequest.newBuilder()
    .outTradeNo("ORDER_20230101_004")
    .totalFee(300)
    .body("Mobile Web Purchase")
    .tradeType(WxPayConstants.TradeType.MWEB)
    .notifyUrl("https://your-domain.com/payment/notify")
    .spbillCreateIp("192.168.1.1")
    // Scene info required for H5 payments
    .sceneInfo("{\"h5_info\": {\"type\":\"Wap\",\"wap_url\": \"https://your-domain.com\",\"wap_name\": \"Your Store\"}}")
    .build();

// Create order
WxPayUnifiedOrderResult result = wxPayService.unifiedOrder(request);

// Get H5 payment URL
String h5Url = result.getMwebUrl();

// Redirect user to WeChat Pay H5 page
System.out.println("H5 Payment URL: " + h5Url);

Micropay (Barcode/QR Scanning)

Point-of-sale payment where merchant scans customer's WeChat payment code.

/**
 * Process micropay transaction (barcode/QR scanning)
 * @param request Micropay request with customer's payment code
 * @return Micropay result with transaction details
 * @throws WxPayException if payment processing fails
 */
WxPayMicropayResult micropay(WxPayMicropayRequest request) throws WxPayException;

Usage Example:

import com.github.binarywang.wxpay.bean.request.WxPayMicropayRequest;
import com.github.binarywang.wxpay.bean.result.WxPayMicropayResult;

// Create micropay request
WxPayMicropayRequest request = WxPayMicropayRequest.newBuilder()
    .outTradeNo("MICROPAY_20230101_001")
    .totalFee(150)
    .body("Coffee Shop Purchase")
    .authCode("130061234567890123") // Customer's payment code
    .spbillCreateIp("192.168.1.1")
    .build();

try {
    // Process payment
    WxPayMicropayResult result = wxPayService.micropay(request);
    
    if ("SUCCESS".equals(result.getResultCode()) && "SUCCESS".equals(result.getTradeState())) {
        System.out.println("Payment successful");
        System.out.println("Transaction ID: " + result.getTransactionId());
        System.out.println("Bank Type: " + result.getBankType());
    } else if ("USERPAYING".equals(result.getTradeState())) {
        // User is still paying, need to query order status
        System.out.println("User is paying, please wait...");
    }
} catch (WxPayException e) {
    System.out.println("Payment failed: " + e.getMessage());
}

Face Payment

Facial recognition-based payment for authorized terminals.

/**
 * Process face payment transaction
 * @param request Face payment request with biometric data
 * @return Face payment result with transaction details
 * @throws WxPayException if face payment processing fails
 */
WxPayFacepayResult facepay(WxPayFacepayRequest request) throws WxPayException;

Usage Example:

// Create face payment request
WxPayFacepayRequest request = WxPayFacepayRequest.newBuilder()
    .outTradeNo("FACE_20230101_001")
    .totalFee(200)
    .body("Smart Store Purchase")
    .faceCode("face-recognition-token") // Face recognition result
    .spbillCreateIp("192.168.1.1")
    .build();

// Process face payment
WxPayFacepayResult result = wxPayService.facepay(request);

if ("SUCCESS".equals(result.getResultCode())) {
    System.out.println("Face payment successful");
    System.out.println("Transaction ID: " + result.getTransactionId());
}

Payment Parameter Generation

Generate Payment Parameters

Helper methods to generate frontend payment parameters from order results.

/**
 * Generate payment parameters map
 * @return Payment parameters for frontend integration
 */
Map<String, String> getPayInfo();

/**
 * Create APP payment parameters
 * @return APP-specific payment parameters  
 */
WxPayAppOrderResult createAppOrder();

/**
 * Create Mini Program/Official Account payment parameters
 * @return JSAPI payment parameters
 */
WxPayMpOrderResult createMpOrder();

/**
 * Create Native payment parameters
 * @return Native payment parameters with QR code
 */
WxPayNativeOrderResult createNativeOrder();

/**
 * Create H5 payment parameters
 * @return H5 payment parameters with redirect URLs
 */
WxPayH5OrderResult createH5Order();

Request Types

WxPayMicropayRequest

class WxPayMicropayRequest extends BaseWxPayRequest {
    String outTradeNo;        // Merchant order number
    Integer totalFee;         // Payment amount in cents
    String body;              // Product description
    String authCode;          // Customer's payment code (required)
    String spbillCreateIp;    // Client IP address
    
    // Optional fields
    String detail;            // Product detail
    String attach;            // Additional data
    String feeType;           // Currency type
    String goodsTag;          // Product tag
    String timeStart;         // Payment start time
    String timeExpire;        // Payment expiration time
    
    static WxPayMicropayRequestBuilder newBuilder();
}

WxPayFacepayRequest

class WxPayFacepayRequest extends BaseWxPayRequest {
    String outTradeNo;        // Merchant order number
    Integer totalFee;         // Payment amount in cents
    String body;              // Product description
    String faceCode;          // Face recognition token (required)
    String spbillCreateIp;    // Client IP address
    
    // Optional fields
    String detail;            // Product detail
    String attach;            // Additional data
    String feeType;           // Currency type
    
    static WxPayFacepayRequestBuilder newBuilder();
}

Result Types

WxPayMicropayResult

class WxPayMicropayResult extends BaseWxPayResult {
    String tradeState;        // Payment status
    String transactionId;     // WeChat transaction ID
    String outTradeNo;        // Merchant order number
    Integer totalFee;         // Payment amount in cents
    String bankType;          // Bank type
    String openid;            // User openid
    String timeEnd;           // Payment completion time
    String tradeStateDesc;    // Status description
}

WxPayAppOrderResult

class WxPayAppOrderResult {
    String appId;             // Application ID
    String partnerId;         // Merchant ID
    String prepayId;          // Prepayment ID
    String packageVal;        // Package value
    String nonceStr;          // Random string
    String timeStamp;         // Timestamp
    String sign;              // Signature
}

WxPayMpOrderResult

class WxPayMpOrderResult {
    String appId;             // Application ID
    String timeStamp;         // Timestamp
    String nonceStr;          // Random string
    String packageVal;        // Package value
    String signType;          // Signature type
    String paySign;           // Payment signature
}

WxPayNativeOrderResult

class WxPayNativeOrderResult {
    String codeUrl;           // QR code URL
    String prepayId;          // Prepayment ID
}

WxPayH5OrderResult

class WxPayH5OrderResult {
    String mwebUrl;           // H5 payment URL
    String prepayId;          // Prepayment ID
}

Trade Types and Constants

WxPayConstants.TradeType

class TradeType {
    String JSAPI = "JSAPI";   // Mini Program/Official Account
    String NATIVE = "NATIVE"; // QR Code payment
    String APP = "APP";       // Mobile app payment
    String MWEB = "MWEB";     // H5 mobile web payment
    String MICROPAY = "MICROPAY"; // Barcode scanning
    String FACEPAY = "FACEPAY";   // Face payment
}

Payment Method Selection Guide

  • JSAPI: Use for payments within WeChat ecosystem (Mini Programs, Official Accounts)
  • Native: Best for desktop web applications and POS systems with QR code display
  • APP: Ideal for mobile applications outside WeChat
  • H5 (MWEB): Suitable for mobile web browsers outside WeChat
  • Micropay: Perfect for physical retail locations with barcode scanners
  • Face Payment: Advanced option for authorized smart retail terminals

Each payment method requires specific configuration and has different integration requirements. Choose based on your platform and user experience needs.

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