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

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

代付下单

POST /api/v1/transfers

HTTP头参数 Header

参数说明
Acceptapplication/json

包体参数 Body

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

NOTE

extra 参数说明:您可以理解为 required_if,也就是说特定的场景为必填,且需提交的参数可能不一样,请参考不同国家代付下单接口的业务参数。例:越南银行代付,extra.bank_code 必填。

请求示例

注意:以下示例仅适用于巴西的业务。

curl -X POST \
  https://example.com/api/v1/transfers \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "client_key": "01hcd0d0c2qh9wy5efm5sxrk38",
    "amount": "100.00",
    "channel_id": "5003",
    "out_transfer_no": "20230101000000",
    "notify_url": "https://your-domain.com/webhook",
    "payee_account": "1234567890",
    "payee_name": "Sammy Shark",
    "extra": "{\"account_type\":\"CPF\", \"id_number\":\"1234567890\"}",
    "signature": ""
  }'

响应参数

参数类型说明
client_keystring商户标识。由大洋支付颁发。
amountstring代付金额。单位:元。
transfer_nostring代付订单号。
out_transfer_nostring商户代付订单号。
channel_idstring代付通道ID。
payee_accountstring收款人账号。
payee_namestring收款人姓名。
created_atstring下单时间。UTC 时间。

响应示例

{
  "client_key": "01hcd0d0c2qh9wy5efm5sxrk38",
  "amount": "100.00",
  "transfer_no": "100000012023072123389872",
  "out_transfer_no": "20230101000000",
  "channel_id": "5001",
  "payee_account": "1234567890",
  "payee_name": "Sammy Shark",
  "created_at": "2023-01-01T01:01:01.000000Z"
}

如何判断是否下单成功?

判断响应的HTTP 状态码是否是 200 或 201。或判断响应中是否存在某个字段,如:transfer_no。

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., 'transfer_no'
            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 = "transfer_no";

                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;
        }
    }
}

重要信息

Important

由于通信问题,可能您请求大洋支付时发生了超时或没有收到任何响应,但实际上,大洋支付已经作出了正常的响应。在这种情况下,为了不造成您的资金损失,您应将您的订单状态设为“成功”,且不在其他第三方出款。

张三叫李四去买一下单,李四说:“好的,老板。” 过了一会儿,张三问李四:“刚刚我叫你买单,你怎么都不回答我?我叫其他人买了”。李四想说的是:“老板,我有回答你,你没听到吗?”

与大洋支付服务器通信测试示例:

curl -X POST \
  https://example.com/api/v1/transfers \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": "50000.00",
    "channel_id": "5001",
    "client_key": "01j****************7h",
    "extra": "{\"bank_code\":\"AGR\"}",
    "notify_url": "https://api.your-domain.com/webhook-for-dayangpay",
    "out_transfer_no": "20240101000000123456",
    "payee_account": "1234567890",
    "payee_name": "PAYEE NAME",
    "signature": "99c************************************de"
}' \
  -w "\n\nDNS Lookup: %{time_namelookup}s\nConnection: %{time_connect}s\nPretransfer: %{time_pretransfer}s\nStart Transfer: %{time_starttransfer}s\nTotal Time: %{time_total}s\n"

Output:

DNS Lookup: 0.001148s
Connection: 0.095378s
Pretransfer: 0.241598s
Start Transfer: 0.452405s
Total Time: 0.452453s
Prev
代收通知
Next
代付查询