Comprehensive Java SDK for integrating with WeChat Pay services including unified orders, refunds, enterprise payments, red packets, profit sharing, and marketing services
—
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.
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()
);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);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()
);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);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());
}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());
}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();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();
}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();
}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
}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
}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
}class WxPayNativeOrderResult {
String codeUrl; // QR code URL
String prepayId; // Prepayment ID
}class WxPayH5OrderResult {
String mwebUrl; // H5 payment URL
String prepayId; // Prepayment ID
}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
}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