法币代付订单查询
# 请求地址
- POST https://test2-openapi.91fafafa.com/api/payout/brazil/order/query
# 请求参数
参数 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|
appId | string | Y | 商户appId | B2iwKFIM4tvo |
merchantId | string | Y | 商户id | CH10001165 |
orderNo | string | Y | 订单号 | 1768261003399663616 |
orderNoType | string | Y | 订单号类型 默认:merchant merchant-商户订单号 platform-平台订单号 | platform |
timestamp | long | Y | 时间戳(毫秒) | 1710385869989 |
sign | string | Y | 签名 | KDvgD7z+ER5uNnR/IiiShow SaGXkYxaBXxRtg+25Q1atUU cu/zikMfSDUJxBXIdNo9Bdk 7QbjWFjHe/l4j6mR3wYJit0 NRmeql7VW1VB4GUEpRE/zij X2JLhag0bvhBYZr3VrlGvIl JUA+Dms0PmliUJBrAFqGtR/ SOYM6wSRaNgtg9zNPZKuSf4 PT1qxWh7Bd5Kxs06crExm4I w/+2aJiGwprdUvo8veJkHln oMeG7KWila8J/Fjot+TSN+3 7VXwfUYzC4sNysm4SLoXLnQ sqF7GBNAXImkokeRfPcFCCx VDlPbizMZt35mVBh7u5bAoY 4cZYZV5eMPw8ocyiEMZw== |
# 请求报文示例
{
"appId": "B2iwKFIM4tvo",
"merchantId": "CH10001165",
"orderNo": "1768261003399663616",
"orderNoType": "platform",
"timestamp": "1710385869989",
"sign": "KDvgD7z+ER5uNnR/IiiShowSaGXkYxaBXxRtg+25Q1atUUcu/zikMfSDUJxBXIdNo9Bdk7QbjWFjHe/l4j6mR3wYJit0NRmeql7VW1VB4GUEpRE/zijX2JLhag0bvhBYZr3VrlGvIlJUA+Dms0PmliUJBrAFqGtR/SOYM6wSRaNgtg9zNPZKuSf4PT1qxWh7Bd5Kxs06crExm4Iw/+2aJiGwprdUvo8veJkHlnoMeG7KWila8J/Fjot+TSN+37VXwfUYzC4sNysm4SLoXLnQsqF7GBNAXImkokeRfPcFCCxVDlPbizMZt35mVBh7u5bAoY4cZYZV5eMPw8ocyiEMZw=="
}
# 响应参数
参数 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|
code | String | Y | 响应码 000000为成功,其余为失败 | 000000 |
msg | String | Y | 响应描述 success-成功 | success |
amount | String | Y | 订单金额 | 1550 |
fee | String | Y | 手续费 | 170.5 |
feeCurrency | String | Y | 手续费币种 | BRL |
paymentMethod | String | Y | 支付方式 | PIX |
currency | String | Y | 交易币种 | BRL |
settleStatus | Interge | Y | 结算状态 0-未结算;1-已结算;2-已退款 | 1 |
paymentFinishTime | Long | Y | 支付完成时间 | 1710385869989 |
settleFinishTime | Long | Y | 结算完成时间 | 1710385869989 |
paymentStatus | Interge | Y | 支付状态 0-进行中;1-支付成功;2-已退款 3-部分支付;4-失败 | 1 |
utr | String | Y | utr | 407429451910 |
callBackStatus | Interge | Y | 回调状态 0-未通知;1-通知成功;2-通知失败 | 2 |
sign | String | Y | 签名 | hqvrXjE6ntfZ2Xp7VDG/aZfJ 4QRjSN6mCmETd+fvn7uEyLfp 9qCPhWFnmXAiC2EdmNUXluEX BcRel2k9yGk552nY00fSjueN zMPo6rBxwIfVf5Pcsnqjkg4p 3dFluKWevc5urayuhwdJ2CBw /UiupdGhuANGvTep2aeHRM0K vfwIf823wVba9u05zjU1zknl fEXShNegLzU7Wm3JXb0ETNUA j8Tb/Bdnds9+u1eUZQoPojqf xPcZf0oieKxIRM/ID9bS3tF1 EeWeLP5rs/zp3dtKBZAvrkyG jIzH83Optw1uzdoyhHC0CMeo +2J1BWo4KtV06Vbj7zpXd5h1 9nlleg== |
# 成功响应报文示例
- 成功响应报文示例
{
"code": "000000",
"msg": "success",
"amount": "1550",
"fee": "170.5",
"feeCurrency": "BRL",
"paymentMethod": "PIX",
"currency": "BRL",
"settleStatus": 1,
"paymentFinishTime": 1710385869989,
"settleFinishTime": 1710385869989,
"paymentStatus": 1,
"utr": "407429451910",
"callBackStatus": 2,
"sign": "hqvrXjE6ntfZ2Xp7VDG/aZfJ4QRjSN6mCmETd+fvn7uEyLfp9qCPhWFnmXAiC2EdmNUXluEXBcRel2k9yGk552nY00fSjueNzMPo6rBxwIfVf5Pcsnqjkg4p3dFluKWevc5urayuhwdJ2CBw/UiupdGhuANGvTep2aeHRM0KvfwIf823wVba9u05zjU1zknlfEXShNegLzU7Wm3JXb0ETNUAj8Tb/Bdnds9+u1eUZQoPojqfxPcZf0oieKxIRM/ID9bS3tF1EeWeLP5rs/zp3dtKBZAvrkyGjIzH83Optw1uzdoyhHC0CMeo+2J1BWo4KtV06Vbj7zpXd5h19nlleg=="
}
- 失败响应报文示例
{
"code": "A0340",
"msg": "sign error! (A0340)",
"data": null
}
# 代码实现Demo
- 代码示例仅供参考,具体参数说明请参考请求参数说明
import com.google.gson.Gson;
import okhttp3.*;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
public class PayoutMerchantOrderDemo {
/**
* 平台公钥
*/
private static final String PLAT_PUBLIC_KEY ="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1dad35S74jfLPbHJh8P0jDHiTvkxwrtITK97ovVu19B24UdiHyHoEZgtNlS6alFQj1ULQ71d6EPh2rWCNkS2b5HGQXwDYBtwvesVQ8h4Sf3eVPTTLGw3BS7Os4vtDEN6BezMdv3sUG2N5i6JF+5H4CQTq3MD2Cx6u/Cv7oFOdFqeDT0AH+TR7uyZxn69OtkJaHHr834EUcdShJKKMQtbC11WCcut7ilDUgdvZnThiVTq7cfl8mcC9FDKcQ9bMWamScWIB5cJQdUW23Kr0c1NvZlpgPS8U5VODM4Uc4muHJPD2cJmquuJ+4AGP36rEk27lUB3h7B6JI1QGiuh1yyPDwIDAQAB";
/**
* 商户私钥
*/
private static final String MCH_PRIVATE_KEY ="MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC/wgJqa2WHUTrJwdrtOig8lwuKPaL462/1rF45p+xi25uoGUEyiOtB0OC6HLePUfkGYzPULPH/O0yF5GmWkhSuz3lKK/XtXSeRdQIwAQ7lYlhfdJjTLVC7mwkDRZeFePwbnAX5pC0h6Yxf0ibjAglkW2d45AscouZt91xIxgf0VLNZ9dHe8R7j8hPKOGpNi+709ThmRZQVHQLN+6w+mrID7JyWBSbbf2bVWc7UBlHCkudwjEiW/r96CefTukb0SigaS0XpqWEKYHeNWS0DP/a5OUDzXMi6fqHEzMPa6uNYbLpOW1rxMhMhU97W8pLYBba0T9BI7F/xusozxVDVeQbDAgMBAAECggEAdZ4EaU3yemuCiZoUNIoFgBSNiX+A5PlUNPZC3U54mbJl6VeEPADre/Uowj82//uhqR9T/QKMdKbkqwONGEQF16t+k9YfBDatPHTuoI8lmeEWn4Ye7vjOmiPgBVe8NqwcxrqOl67x1+kupt955qerJxlBgE8v2aK5gB3HRwPggSYZgSZJ3X2zQMJ+XN4qe49Un+utqFuGtVRwPQvs/Kazp5GL7WlR0OnpQ2KZ+ur9T58VfTKmIeqBckey7nIrb/fdodJ7IqcykWjSLmy8p84W78iiRDfPn81Ujb231EWW+AbuV399aXBZ4oaR4q8wwkhe9xHUADWLvcfCnMrB40LkEQKBgQD2TEeBEB5Gwj/zpriq23xKJyzfo0hOxzGY/Ol2EykGeEYhny/YiTlMYtOMy37RiGKr4lN7G/pKl2fI5kRjgQM1QXgx6dxd11D0rORXj+SAy6+zAq3NVY4c3zDKmrQQ8x3f2QFffo+TmLtw/BH0Frp+a2lzKzIcXtZ4/akJdVIihwKBgQDHT7xvOaNyAPnnYwpROMI9eUVgFc9pMRAmQ18at8ggZ8M+Ww1nhr00loufzkovCb9MvGR4HSedWHfgmtDu1hUFtl7PItNItsB347yWPxR/lVLs44NVXt7jkFisoBoEBXaNVVt6uOSvBiqINmX3gm4FoisI2SRZsH7nMr07OXO85QKBgCkXdN6Nh9+aTP0jla+7yrK8cnolTc0G4rl5iKHQdInFyz2Ux3DDBDJAUrcsxE3FCWFP80mY01tag1A7SrGnNpfOAnWhZMirQbBwn/AT67WpRfkBu2mEmp8qhYNn6B7j0Nol5FrATMf9NViWVZB5skehOAik7klZcULiXy9ayYdFAoGAA+0bLim5gYZpZdh6nIz8ro9UAYeMdWsFAWv0VKdoJtNEclcC1ZY+5elNSNGcfn63qQBRDlisrhnPCrqiAQJwmZM1HOl3tgf7lKEE1wTZF4ZOguIcdTMQOvVd+dCRkqC07CXRToKT5qq9bb98lLqaBjxikqMMZ0PlzBIgzijckc0CgYAH16CziStEZVvKbiR8b0ftF9mf6V8I0KHianMgV8X6Y51aE0Ig1eQhIvqSjqtBac7gEppiu3OQVrp39uLdgyvDSVta1Hq9QYYTDNt8crt69aD/Th1h5esYvApYyZIhHbFDR5meE4Y3nHpfY7J8zhmfyaVW/6cuwPaToTtrEjQmWQ==";
/**
* apiUrl
*/
private static final String API_URL = "https://test2-openapi.91fafafa.com/api/payout/brazil/order/query";
public static void main(String[] args) throws Exception {
utrSupplementaryOrder();
}
private static void utrSupplementaryOrder() throws Exception {
Map<String, Object> requestParams = new HashMap<>();
requestParams.put("appId", "B2iwKFIM4tvo");
requestParams.put("merchantId", "CH10001165");
requestParams.put("orderNo", "20240407170755");
requestParams.put("orderNoType", "merchant");
Long timestamp = System.currentTimeMillis();
requestParams.put("timestamp", timestamp);
// 私钥加密
String sign = CheeseTradeRSAUtil.getSign(requestParams, MCH_PRIVATE_KEY);
requestParams.put("sign", sign);
// 接口请求
Gson gson = new Gson();
String requestBody = gson.toJson(requestParams);
System.out.println("Post Json Params:" + requestBody);
// 发送请求并获取响应
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(mediaType, requestBody);
Request request = new Request.Builder()
.url(API_URL)
.post(body)
.addHeader("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36")
.build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) {
// 失败处理...
System.out.println("Request failed: " + response.code() + " - " + response.message());
}
// 验签处理
String responseBody = response.body().string();
System.out.println("Response: " + responseBody);
Type type = new com.google.gson.reflect.TypeToken<Map<String, Object>>() {}.getType();
Map<String, Object> map = gson.fromJson(responseBody, type);
boolean verifyResult = CheeseTradeRSAUtil.verifySign(map, PLAT_PUBLIC_KEY);
if (verifyResult) {
// ... 签名验证通过,处理正常的业务逻辑
System.out.println("签名验证成功");
} else {
// ... 签名验证错误
System.out.println("签名验证失败");
}
response.close();
}
}