Java 微信支付接口(统一下单,异步回调,订单退款,取消订单)
Java 微信支付接口详细描述
一. 准备工作在开始使用微信支付接口之前,我们需要准备一些必要的工作:
1. APP绑定微信商户平台
* 在微信商户平台中创建一个新的商户账号。
* 绑定你的APP,获取商户ID(mchID)。
2. 获取证书
* 商户后台下载证书文件(.pem或.cer格式)。
3. 导入微信支付SDK
* 在项目中添加微信支付SDK依赖。
4. 配置API密钥
* 在微信商户平台中创建一个新的API密钥。
二. 统一下单接口统一下单接口用于生成预付款订单
1. 请求参数| 参数名称 | 类型 | 必填 | 描述 |
| --- | --- | --- | --- |
| appid | String | 是 | APPID |
| mch_id | String | 是 | 商户ID |
| nonce_str | String | 是 | 随机字符串 |
| body | String | 是 | 商品描述 |
| detail | String | 否 | 商品详情 |
| out_trade_no | String | 是 | 商户订单号 |
| total_fee | Integer | 是 | 总金额(分) |
2. 请求示例```javaString appid = "your_app_id";
String mch_id = "your_mch_id";
String nonce_str = UUID.randomUUID().toString();
String body = "测试商品";
String detail = "";
String out_trade_no = "your_out_trade_no";
int total_fee =100;
Map
params.put("appid", appid);
params.put("mch_id", mch_id);
params.put("nonce_str", nonce_str);
params.put("body", body);
params.put("detail", detail);
params.put("out_trade_no", out_trade_no);
params.put("total_fee", String.valueOf(total_fee));
//生成签名String sign = getSign(params);
// 组装请求参数Map
requestParams.put("appid", appid);
requestParams.put("mch_id", mch_id);
requestParams.put("nonce_str", nonce_str);
requestParams.put("sign", sign);
requestParams.put("body", body);
requestParams.put("detail", detail);
requestParams.put("out_trade_no", out_trade_no);
requestParams.put("total_fee", String.valueOf(total_fee));
// 发起请求String url = " connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.writeBytes(getUrlParams(requestParams));
out.flush();
out.close();
// 获取响应结果int responseCode = connection.getResponseCode();
String result = "";
if (responseCode ==200) {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
result += inputLine;
}
in.close();
} else {
System.out.println("请求失败,状态码:" + responseCode);
}
// 解析响应结果Map
System.out.println("统一下单接口返回结果:");
for (String key : resultMap.keySet()) {
System.out.println(key + ":" + resultMap.get(key));
}
```
三. 异步回调接口异步回调接口用于处理支付结果
1. 请求参数| 参数名称 | 类型 | 必填 | 描述 |
| --- | --- | --- | --- |
| appid | String | 是 | APPID |
| mch_id | String | 是 | 商户ID |
| notify_url | String | 是 | 回调地址 |
2. 请求示例```javaString appid = "your_app_id";
String mch_id = "your_mch_id";
String notify_url = " String> params = new HashMap<>();
params.put("appid", appid);
params.put("mch_id", mch_id);
params.put("notify_url", notify_url);
//生成签名String sign = getSign(params);
// 组装请求参数Map
requestParams.put("appid", appid);
requestParams.put("mch_id", mch_id);
requestParams.put("sign", sign);
requestParams.put("notify_url", notify_url);
// 发起请求String url = " connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.writeBytes(getUrlParams(requestParams));
out.flush();
out.close();
// 获取响应结果int responseCode = connection.getResponseCode();
String result = "";
if (responseCode ==200) {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
result += inputLine;
}
in.close();
} else {
System.out.println("请求失败,状态码:" + responseCode);
}
// 解析响应结果Map
System.out.println("异步回调接口返回结果:");
for (String key : resultMap.keySet()) {
System.out.println(key + ":" + resultMap.get(key));
}
```
四. 订单退款接口订单退款接口用于退还用户的支付金额
1. 请求参数| 参数名称 | 类型 | 必填 | 描述 |
| --- | --- | --- | --- |
| appid | String | 是 | APPID |
| mch_id | String | 是 | 商户ID |
| out_trade_no | String | 是 | 商户订单号 |
| refund_fee | Integer | 是 |退款金额(分) |
2. 请求示例```javaString appid = "your_app_id";
String mch_id = "your_mch_id";
String out_trade_no = "your_out_trade_no";
int refund_fee =100;
Map
params.put("appid", appid);
params.put("mch_id", mch_id);
params.put("out_trade_no", out_trade_no);
params.put("refund_fee", String.valueOf(refund_fee));
//生成签名String sign = getSign(params);
// 组装请求参数Map
requestParams.put("appid", appid);
requestParams.put("mch_id", mch_id);
requestParams.put("sign", sign);
requestParams.put("out_trade_no", out_trade_no);
requestParams.put("refund_fee", String.valueOf(refund_fee));
// 发起请求String url = " connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.writeBytes(getUrlParams(requestParams));
out.flush();
out.close();
// 获取响应结果int responseCode = connection.getResponseCode();
String result = "";
if (responseCode ==200) {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
result += inputLine;
}
in.close();
} else {
System.out.println("请求失败,状态码:" + responseCode);
}
// 解析响应结果Map
System.out.println("订单退款接口返回结果:");
for (String key : resultMap.keySet()) {
System.out.println(key + ":" + resultMap.get(key));
}
```
五. 取消订单接口取消订单接口用于取消用户的支付订单
1. 请求参数| 参数名称 | 类型 | 必填 | 描述 |
| --- | --- | --- | --- |
| appid | String | 是 | APPID |
| mch_id | String | 是 | 商户ID |
| out_trade_no | String | 是 | 商户订单号 |
2. 请求示例```javaString appid = "your_app_id";
String mch_id = "your_mch_id";
String out_trade_no = "your_out_trade_no";
Map
params.put("appid", appid);
params.put("mch_id", mch_id);
params.put("out_trade_no", out_trade_no);
//生成签名String sign = getSign(params);
// 组装请求参数Map
requestParams.put("appid", appid);
requestParams.put("mch_id", mch_id);
requestParams.put("sign", sign);
requestParams.put("out_trade_no", out_trade_no);
// 发起请求String url = " connection = (HttpURLConnection