YfpayYfpay
  • 介绍
  • 接口签名
  • 代收下单
  • 代收查询
  • 代收通知
  • 代付下单
  • 代付查询
  • 代付通知
  • 余额查询
  • 通道
  • 响应
  • 巴西
  • 中国
  • 印度
  • 印度尼西亚
  • 墨西哥
  • 尼日利亚
  • 菲律宾
  • 南非
  • 泰国
  • 乌克兰
  • 越南
  • USDT
  • English
  • 简体中文
  • 介绍
  • 接口签名
  • 代收下单
  • 代收查询
  • 代收通知
  • 代付下单
  • 代付查询
  • 代付通知
  • 余额查询
  • 通道
  • 响应
  • 巴西
  • 中国
  • 印度
  • 印度尼西亚
  • 墨西哥
  • 尼日利亚
  • 菲律宾
  • 南非
  • 泰国
  • 乌克兰
  • 越南
  • USDT
  • English
  • 简体中文
  • 接入指引

    • 介绍
    • 接口签名
    • 代收下单
    • 代收查询
    • 代收通知
    • 代付下单
    • 代付查询
    • 代付通知
    • 余额查询
    • 通道
    • 响应

代收下单

POST /api/v1/trades

HTTP头参数 Header

参数说明
Acceptapplication/json
Content-Typeapplication/json

包体参数 Body

参数类型必填参与签名说明
client_keystring是是商户标识。由大洋支付颁发。
amountstring是是代收金额。单位:元。
channel_idstring是是代收通道ID。
out_trade_nostring是是商户代收订单号。
最大长度 64,必须是唯一的。
notify_urlstring是是商户接收通知的网址。
extrastring否是业务参数。 必须是 JSON 字符串。
signaturestring是否签名值。

请求示例

NOTE

不是每个请求都需要 extra 参数,请参考各个国家的请求示例。以下示例适用于越南银行代收。

curl -X POST \
  https://example.com/api/v1/trades \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "client_key": "01h6tn69wfcpy5q5x3vpb3x9me",
    "amount": "50000.00",
    "channel_id": "1001",
    "out_trade_no": "20230101000000",
    "notify_url": "https://your-domain.com/webhook",
    "extra": "{\"bank_code\":\"VCB\"}",
    "signature": "32db0797717edf25775a95cbbf61c4f693b47604a309fb63d46e36faf75e58ce"
  }'

响应参数

参数类型说明
client_keystring商户标识。由大洋支付颁发。
amountstring代收金额。单位:元。
trade_nostring代收订单号。
out_trade_nostring商户代收订单号。
payment_urlstring支付网址。
created_atstring下单时间。UTC 时间。

响应示例

成功的响应示例

成功响应的HTTP 状态码为: (200 ~ 299)

{
  "client_key": "01h6tn69wfcpy5q5x3vpb3x9me",
  "amount": "100.00",
  "trade_no": "100000012023072123389872",
  "out_trade_no": "20230101000000",
  "payment_url": "https://example.com/cashier",
  "created_at": "2023-01-01T01:01:01.000000Z"
}

错误的响应示例

错误响应的HTTP 状态码为:客户端错误响应 (400 ~ 499) 或 服务器错误响应 (500 ~ 599)

{
  "message": "The out_trade_no has already been taken.",
  "errors": {
    "out_trade_no": ["The out_trade_no has already been taken."]
  }
}

如何判断是否下单成功?

判断响应的HTTP 状态码是否是 200 ~ 299。或判断响应中是否存在某个特定的字段,如:payment_url。

Java
import com.google.gson.*;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class HttpClientExample {
    public static void main(String[] args) {
        HttpClient client = HttpClient.newHttpClient();

        // Create the request body (example, if needed, otherwise, you can remove this)
        String requestBody = "{\"key\":\"value\"}";  // You can replace with actual data for POST request

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://example.com/api/v1/trades"))
                .POST(HttpRequest.BodyPublishers.ofString(requestBody))
                .header("Accept", "application/json")
                .header("Content-Type", "application/json")
                .build();

        try {
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

            // Check if the HTTP status code is 200 ~ 299
            int statusCode = response.statusCode();

            if (statusCode >= 200 && statusCode <= 299) {
                System.out.println("Success: " + statusCode);
            } else {
                System.out.println("Failed: " + statusCode);
            }

            // Check if a specific key exists in the JSON response, e.g., 'payment_url'
            String responseBody = response.body();
            System.out.println("Response Body: " + responseBody);

            if (isValidJson(responseBody)) {
                Gson gson = new Gson();
                JsonObject jsonObject = gson.fromJson(responseBody, JsonObject.class);

                String key = "payment_url";

                if (jsonObject.has(key)) {
                    String value = jsonObject.get(key).getAsString();
                    System.out.println(key + " found: " + value);
                } else {
                    System.out.println(key + " not found");
                }
            } else {
                System.out.println("Response body is not valid JSON.");
            }
        } catch (IOException | InterruptedException e) {
            System.err.println("Error occurred: " + e.getMessage());
        }
    }

    // Check if a string is valid JSON
    private static boolean isValidJson(String json) {
        try {
            JsonElement jsonElement = JsonParser.parseString(json);
            return jsonElement.isJsonObject() || jsonElement.isJsonArray();
        } catch (JsonParseException e) {
            return false;
        }
    }
}
Prev
接口签名
Next
代收查询