TypechoJoeTheme

至尊技术网

登录
用户名
密码

Java实现微信支付接口对接全流程详解

2025-12-09
/
0 评论
/
56 阅读
/
正在检测是否收录...
12/09

正文:

在移动支付普及的今天,微信支付作为国内主流支付方式之一,成为开发者必须掌握的技能。本文将手把手教你用Java实现微信支付接口对接,从申请到代码落地,避开常见坑点。


一、前期准备工作

  1. 申请微信支付商户号
    微信支付官网注册商户账号,提交营业执照等资质,获取以下关键信息:



    • appid:应用唯一标识
    • mch_id:商户号
    • api_key:32位密钥(用于签名)
  2. 配置支付域名
    在商户平台设置支付回调域名(如https://yourdomain.com/pay/callback),仅支持已备案域名。


二、引入SDK与依赖

推荐使用微信支付官方提供的Java SDK,或通过Maven引入依赖:
xml <dependency> <groupId>com.github.wechatpay-apiv3</groupId> <artifactId>wechatpay-java</artifactId> <version>0.4.2</version> </dependency>


三、核心代码实现

1. 统一下单接口

微信支付的核心接口是unifiedorder,用于生成预支付订单。以下是关键代码片段:

  
// 构建请求参数  
Map<String, String> params = new HashMap<>();  
params.put("appid", appid);  
params.put("mch_id", mch_id);  
params.put("nonce_str", generateNonceStr()); // 随机字符串  
params.put("body", "测试商品");  
params.put("out_trade_no", "ORDER_" + System.currentTimeMillis());  
params.put("total_fee", "100"); // 单位:分  
params.put("spbill_create_ip", "用户IP");  
params.put("notify_url", "https://yourdomain.com/callback");  
params.put("trade_type", "JSAPI"); // JSAPI/NATIVE/APP  

// 生成签名并封装XML  
String sign = generateSign(params, api_key);  
params.put("sign", sign);  
String xmlData = mapToXml(params);  

// 发送HTTP请求  
CloseableHttpClient client = HttpClients.createDefault();  
HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/pay/unifiedorder");  
httpPost.setEntity(new StringEntity(xmlData, "UTF-8"));  
CloseableHttpResponse response = client.execute(httpPost);  
String result = EntityUtils.toString(response.getEntity());  

2. 签名生成方法

微信支付要求所有请求参数按ASCII排序后拼接签名:

  
private String generateSign(Map<String, String> params, String key) {  
    List<String> keys = new ArrayList<>(params.keySet());  
    Collections.sort(keys);  
    StringBuilder sb = new StringBuilder();  
    for (String k : keys) {  
        if (!k.equals("sign") && !params.get(k).isEmpty()) {  
            sb.append(k).append("=").append(params.get(k)).append("&");  
        }  
    }  
    sb.append("key=").append(key);  
    return DigestUtils.md5Hex(sb.toString()).toUpperCase();  
}  


四、处理支付回调

微信支付成功后,会异步通知到notify_url,需验证签名并返回处理结果:

  
@RequestMapping("/callback")  
public String payCallback(HttpServletRequest request) {  
    // 解析XML数据  
    Map<String, String> params = xmlToMap(request.getInputStream());  
    // 验证签名  
    if (!verifySign(params, api_key)) {  
        return "<xml><return_code>FAIL</return_code></xml>";  
    }  
    // 处理业务逻辑(如更新订单状态)  
    return "<xml><return_code>SUCCESS</return_code></xml>";  
}  


五、常见问题与调试

  1. 签名失败:检查参数是否按ASCII排序,或API_KEY是否正确。
  2. 回调未触发:确认域名已备案且与商户平台配置一致。
  3. 跨域问题:前端调起支付时,需确保域名在白名单内。

通过以上步骤,你已完成了微信支付的核心对接流程。实际开发中建议封装支付工具类,并加入日志监控,确保支付稳定性。

微信支付支付接口JavaSDKAPI对接
朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/40830/(转载时请注明本文出处及文章链接)

评论 (0)