MaxPay 支付接口文档
本文档提供了MaxPay支付平台所有接口的详细说明和使用方法,包括代收、代付、订单查询及回调处理等核心功能。
4. 代付订单查询接口
POST
https://{请联系客服}/api/transfer/query
application/json
输入参数
参数名 | 是否可空 | 类型 | 描述 |
---|---|---|---|
merchant |
N | string | 商户id |
outtransferno |
N | string | 商户代付订单号 |
sign |
N | string | 签名 |
输入参数示例
JSON 示例
{ "outtransferno": "TEST122", "merchant": "1904572121431658498", "sign": "sign" }
接口返回示例
JSON 返回
{ "code": 0, "results": { "transferno": "1342123134", "outtransferno": "TEST122", "tradeamount": 1000.2, "transferamount": 1000, "endtime": "2023-12-12 23:12:32", "remark": "备注", "status": "1", "sign": "sign1", "fee": 2, "rate": 0.02, "bankfee": 0, "totalfee": 2.2 }, "uid": "" }
返回参数
参数名 | 类型 | 描述 |
---|---|---|
transferno |
string | 订单号 |
outtransferno |
string | 商户订单号 |
tradeamount |
number | 商户账户扣除金额 |
transferamount |
number | 代付金额 |
endtime |
string | 支付时间 |
remark |
string | 备注 |
status |
string | 订单状态
0: 未结算 1: 已结算 2: 结算中 3: 结算异常 4: 已撤销 |
sign |
string | 签名 |
fee |
number | 单笔手续费 |
rate |
number | 手续费率 |
bankfee |
number | 银行手续费 |
totalfee |
number | 总手续费 |
Java 示例
Java 示例代码
import com.google.gson.Gson; import com.google.gson.JsonObject; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; //代付订单查询接口 public class TransferQueryExample { public static void main(String[] args) { String merchantId = "1904572121431658498"; String secret = "your_secret_key"; // 替换为你的密钥 String apiUrl = "https://{请联系客服}/api/transfer/query"; String transferId = "TRANSFER_1753034"; Mapparams = new HashMap<>(); params.put("merchant", merchantId); params.put("outtransferno", transferId); // 生成签名 String sign = generateSign(params, secret); params.put("sign", sign); // 发送请求 try { String response = sendPostRequest(apiUrl, params); System.out.println("API响应: " + response); // 解析响应 JsonObject json = new Gson().fromJson(response, JsonObject.class); if (json.get("code").getAsInt() == 0) { JsonObject results = json.getAsJsonObject("results"); String status = results.get("status").getAsString(); double totalFee = results.get("totalfee").getAsDouble(); System.out.println("订单状态: " + status); System.out.println("总手续费: " + totalFee); } else { System.out.println("查询失败: " + json.toString()); } } catch (Exception e) { e.printStackTrace(); } } private static String generateSign(Map params, String secret) { try { TreeMap sortedParams = new TreeMap<>(); for (Map.Entry entry : params.entrySet()) { if (entry.getValue() != null && !entry.getValue().trim().isEmpty()) { sortedParams.put(entry.getKey(), entry.getValue().trim()); } } StringBuilder sb = new StringBuilder(); for (Map.Entry entry : sortedParams.entrySet()) { if (sb.length() > 0) { sb.append("&"); } // ✅ 编码并转小写(是签名失败的根本) String encoded = URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8).toLowerCase(); sb.append(entry.getKey()).append("=").append(encoded); } sb.append("&secret=").append(secret); return md5(sb.toString()); } catch (Exception e) { throw new RuntimeException("签名生成失败", e); } } private static String md5(String input) { try { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] digest = md.digest(input.getBytes(StandardCharsets.UTF_8)); StringBuilder hexString = new StringBuilder(); for (byte b : digest) { String hex = Integer.toHexString(0xff & b); if (hex.length() == 1) hexString.append("0"); hexString.append(hex); } return hexString.toString(); } catch (Exception e) { throw new RuntimeException("MD5计算失败", e); } } private static String sendPostRequest(String url, Map params) throws Exception { HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/json"); conn.setDoOutput(true); String jsonInputString = new Gson().toJson(params); try (OutputStream os = conn.getOutputStream()) { byte[] input = jsonInputString.getBytes("utf-8"); os.write(input, 0, input.length); } int responseCode = conn.getResponseCode(); if (responseCode != 200) { throw new RuntimeException("HTTP请求失败,响应码:" + responseCode); } try (BufferedReader br = new BufferedReader( new InputStreamReader(conn.getInputStream(), "utf-8"))) { StringBuilder response = new StringBuilder(); String responseLine; while ((responseLine = br.readLine()) != null) { response.append(responseLine.trim()); } return response.toString(); } } }