微信支付作为国内主流的移动支付方式,为开发者提供了完善的Java Demo,帮助快速接入支付功能,本文将从准备工作、环境搭建、核心代码实现、本地测试、上线部署及常见问题六个维度,详细讲解微信支付Java Demo的使用流程。

准备工作:注册与配置
在使用Java Demo前,需完成微信支付商户平台的配置,注册微信商户账号(个人或企业均可),完成实名认证后,登录商户平台进入“产品中心”开通“Native支付”或“JSAPI支付”产品(根据业务需求选择),在“账户中心 > API安全”中设置API密钥(32位),此密钥用于签名校验,需妥善保存。
获取关键配置参数:商户号(mch_id)、AppID(应用ID,JSAPI支付需绑定公众号或小程序)、API密钥(key)、回调URL(支付结果通知地址,需外网可访问),若使用沙箱环境测试,需在“账户中心 > 账户设置”中开启“沙箱模式”,沙箱环境与生产环境参数隔离,可安全调试。
环境搭建:依赖与工具准备
Java Demo基于Java开发,需确保环境满足以下要求:JDK 1.8及以上版本、Maven 3.6+(用于依赖管理)、IntelliJ IDEA或Eclipse等开发工具。
在项目pom.xml中添加微信支付官方SDK依赖(以最新版为例):
<dependency>
<groupId>com.github.wechatpay-java</groupId>
<artifactId>wechatpay-java</artifactId>
<version>0.2.4</version>
</dependency>
需添加JSON处理依赖(如Jackson),用于请求/响应参数的序列化与反序列化:

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
核心代码解析:关键流程实现
微信支付Java Demo的核心流程包括“统一下单”、“签名生成”、“支付回调处理”三部分,以下以Native支付为例展开说明。
初始化配置
创建WeChatPayConfig类,封装商户配置信息:
public class WeChatPayConfig {
private String mchId; // 商户号
private String appId; // 应用ID
private String apiV3Key; // API密钥
private String notifyUrl; // 回调地址
// 构造方法、getter/setter略
}
在启动类中初始化配置,并创建WeChatPayService实例:
WeChatPayConfig config = new WeChatPayConfig("your_mch_id", "your_app_id", "your_api_v3_key", "https://your-domain/notify");
WeChatPayService service = new WeChatPayServiceImpl().config(config);
统一下单
构造统一下单请求参数,调用微信支付统一下单接口(https://api.mch.weixin.qq.com/v3/pay/transactions/native):
NativeTransactionRequest request = new NativeTransactionRequest();
request.setAppid(config.getAppId());
request.setMchid(config.getMchId());
request.setDescription("商品描述");
request.setOutTradeNo("ORDER_" + System.currentTimeMillis()); // 商户订单号
request.setAmount(new Amount());
request.getAmount().setTotal(100); // 金额单位:分
request.setNotifyUrl(config.getNotifyUrl());
// 发起请求并获取支付码
NativeTransactionResponse response = service.createOrder(request);
String codeUrl = response.getCodeUrl(); // 支付二维码链接
支付回调处理
微信支付结果通过异步通知(POST请求)发送至配置的notifyUrl,需实现回调接口并验证签名:

@RestController
@RequestMapping("/notify")
public class NotifyController {
@PostMapping
public String handleNotify(@RequestBody String body, @RequestHeader("Wechatpay-Timestamp") String timestamp,
@RequestHeader("Wechatpay-Nonce") String nonce, @RequestHeader("Wechatpay-Signature") String signature) {
// 验证签名
if (!service.verifySignature(body, timestamp, nonce, signature)) {
return "FAIL";
}
// 解析订单状态
JSONObject json = JSON.parseObject(body);
String tradeState = json.getString("trade_state");
if ("SUCCESS".equals(tradeState)) {
String outTradeNo = json.getString("out_trade_no");
// 更新订单状态(如数据库操作)
orderService.updatePaid(outTradeNo);
}
return "SUCCESS";
}
}
本地测试:模拟与调试
为确保Demo正常运行,需在本地环境进行测试,修改application.properties或application.yml中的配置为沙箱环境参数:
wechatpay.mch-id=your_sandbox_mch_id wechatpay.app-id=your_sandbox_app_id wechatpay.api-v3-key=your_sandbox_api_key wechatpay.notify-url=https://your-sandbox-domain/notify
使用工具(如Postman)模拟支付请求,或通过微信扫码测试工具生成二维码,用微信扫码支付,支付成功后,检查日志输出,确认回调接口是否被正常调用,订单状态是否更新,若遇到签名错误,可对比请求参数与API文档,检查API密钥是否正确、参数是否遗漏。
上线部署:注意事项
本地测试通过后,切换至生产环境配置,需注意以下几点:
- 参数替换:将沙箱环境的商户号、AppID、API密钥替换为生产环境参数,关闭沙箱模式。
- 回调地址:确保生产环境的
notifyUrl外网可访问,且支持HTTPS协议(微信支付要求回调地址使用HTTPS)。 - 异常处理:增加网络超时、重试机制(如统一下单失败后重试3次),并记录错误日志便于排查。
- 安全加固:对API密钥、商户私钥等敏感信息进行加密存储,避免硬编码在代码中(可通过环境变量或配置中心管理)。
常见问题与解决方案
- 签名错误:检查API密钥是否正确,请求参数是否按字典序排序,JSON格式是否规范。
- 回调失败:确认
notifyUrl外网可访问,回调接口返回状态码是否为200,微信支付要求回调接口10秒内响应超时。 - 沙箱环境无法支付:确保沙箱模式已开启,使用沙箱环境的专属商户号和API密钥,生产环境参数在沙箱环境无效。
- 重复通知:微信支付可能重复发送回调,需根据商户订单号(
out_trade_no)判断订单是否已处理,避免重复更新状态。
通过以上步骤,开发者可快速掌握微信支付Java Demo的使用方法,实际开发中,需结合业务需求调整参数(如支付金额、商品描述),并严格遵循微信支付API文档规范,确保支付流程的稳定与安全。















