Перейти к навигации

Передача контрактов и сверка

Передача контрактов и сверка: Интеграция с Agent Java SDK v0.3.0, примеры, параметры и семантика ответа.

Просмотр в формате Markdown

Это руководство предназначено для Agent Java SDK v0.3.0, Java 8+ и помеченного публичного контракта. Примеры выполняются в серверной части партнера после инициализации client в Быстрый старт.

Пример предварительных условий

Фрагменты Java разделяют этот импорт. Инициализируйте client с помощью быстрого запуска и получите platformUserId из сохраненной привязки. Примеры идентификаторов пользователей/заказов необходимо заменить вашими собственными сохраненными значениями.

import com.sixmm.agent.*;
import com.sixmm.agent.model.*;
import java.util.*;

Перевод фиксированной суммы

Используйте transfer для переводов фиксированной суммы. Direction.IN означает передачу с партнерской платформы на 6MM. Direction.OUT означает перенос с 6MM вернуться на партнерскую платформу.

Используйте строки или BigDecimal для сумм. Не используйте double или float.

Перенос через agentUserId

import com.sixmm.agent.model.Direction;
import com.sixmm.agent.model.TransferRequest;
import com.sixmm.agent.model.TransferResponse;
TransferResponse resp = client.transfer(TransferRequest.fixed(
"AGT-ORDER-1001",
"agent-user-001",
Direction.IN,
"USDT",
"10.00"));
System.out.println(resp.orderNo);
System.out.println(resp.orderStatus);
System.out.println(resp.agentUserId);
System.out.println(resp.platformUserId);

Перенос через platformUserId

TransferResponse resp = client.transfer(TransferRequest.fixedByPlatformUserId(
"AGT-ORDER-1002",
"1188041528",
Direction.OUT,
"USDT",
"5.00"));

Укажите оба идентификатора

Если указаны оба идентификатора, служба проверяет, что они указывают на один и тот же идентификатор. привязанный пользователь.

TransferRequest req = TransferRequest
.fixed("AGT-ORDER-1003", "agent-user-001", Direction.IN, "USDT", "20.00")
.withPlatformUserId("1188041528");
TransferResponse resp = client.transfer(req);

Поля запроса:

ПолеТипНеобходимыйОписание
agentOrderNostringДаГлобально уникальный партнерский номер заказа
agentUserIdstringУсловноТребуется, если platformUserId отсутствует
platformUserIdstringУсловноТребуется, если agentUserId отсутствует
directionперечислениеДаIN или OUT
currencystringНетЗаполняется из defaultCurrency при отсутствии
amountstringДаСтрока десятичной суммы

Поля ответа:

ПолеТипОписание
orderNostringНомер заказа платформы
orderStatusstringSUCCESS, FAILED, PROCESSING и т. д.
agentUserIdstringИдентификатор пользователя на стороне партнера
platformUserIdstring6MM идентификатор внешнего пользователя

Подтверждение заказа и идемпотентность

После вызова transfer служба агента синхронно вызывает торговую ядро на главном пути. В большинстве случаев ответ API уже содержит синхронный результат торгового ядра.

РезультатЗначениеПартнерские действия
SUCCESSПеренос выполнен успешноОтметить локальный заказ как успешный
FAILEDПередача была отклонена или не удаласьСохраните причину сбоя и покажите ее, когда это необходимо.
PROCESSINGТайм-аут торгового ядра или неопределенность сетиНе повторяйте попытку с новым номером заказа. Подождите webhook или вызовите queryOrder

Требования идемпотентности:

  • Используйте один agentOrderNo для одной бизнес-операции.
  • Если время ожидания HTTP истекло или произошел сбой в сети, сначала запросите тот же agentOrderNo .
  • Webhooks можно повторить. Дедублируйте их с помощью ключа идемпотентности.

Перенести все

transferAllOut перемещает доступный для вывода баланс пользователя на стороне 6MM обратно на партнерская платформа.

import com.sixmm.agent.model.TransferAllOutRequest;
import com.sixmm.agent.model.TransferAllOutResponse;
TransferAllOutResponse resp = client.transferAllOut(
TransferAllOutRequest.of("AGT-ORDER-2001", "agent-user-001", "USDT"));
System.out.println(resp.orderStatus);
System.out.println(resp.amount);

От platformUserId:

TransferAllOutResponse resp = client.transferAllOut(
TransferAllOutRequest.byPlatformUserId("AGT-ORDER-2002", "1188041528", "USDT"));

В ответе amount — фактическая сумма перевода.

Обратный порядок

Реверс используется для компенсации успешного заказа на передачу, когда серверная часть поддерживает обратный поток. Типичные случаи включают исключения для местных заказов партнеров. или ручной откат сверки.

import com.sixmm.agent.model.ReverseOrderRequest;
import com.sixmm.agent.model.ReverseOrderResponse;
ReverseOrderResponse resp = client.reverse(ReverseOrderRequest.of(
"AGT-ORDER-1001",
"REV-ORDER-1001",
"partner order rollback"));
System.out.println(resp.orderStatus);

Поля:

ПолеТипНеобходимыйОписание
origOrderNostringДаНомер исходного заказа на передачу
reverseOrderNostringДаГлобально уникальный номер обратного заказа
reverseReasonstringДаОбратная причина

Примечания:

  • Реверс не является обычной операцией отмены.
  • Обратные заказы также должны быть идемпотентны по номеру заказа.
  • После того, как первоначальный ордер будет отменен, webhook может переместить исходный ордер REVERSED конечное состояние.

Порядок запроса

import com.sixmm.agent.model.OrderQueryType;
import com.sixmm.agent.model.QueryOrderRequest;
import com.sixmm.agent.model.QueryOrderResponse;
QueryOrderResponse resp = client.queryOrder(
QueryOrderRequest.of("AGT-ORDER-1001", OrderQueryType.TRANSFER_IN));
System.out.println(resp.status);
System.out.println(resp.failReason);

Поддерживаемые значения orderType:

  • TRANSFER_IN
  • TRANSFER_OUT

Общие поля ответа:

ПолеТипОписание
orderTypestringТип заказа
orderNostringНомер заказа партнера
statusstringСтатус заказа
directionstringIN или OUT
transferModestringFIXED_AMOUNT или ALL_OUT
currencystringВалюта
amountstringКоличество
agentUserIdstringИдентификатор пользователя на стороне партнера
platformUserIdstring6MM идентификатор внешнего пользователя
failReasonstringПричина отказа
createdAtstringВремя создания
completedAtstringВремя завершения

Список заказов

import com.sixmm.agent.model.ListOrdersRequest;
import com.sixmm.agent.model.ListOrdersResponse;
ListOrdersRequest req = ListOrdersRequest.page(1, 20);
req.orderType = "TRANSFER_IN";
req.status = "SUCCESS";
req.startTime = "2026-06-01T00:00:00Z";
req.endTime = "2026-06-16T00:00:00Z";
ListOrdersResponse resp = client.listOrders(req);
System.out.println(resp.total);
resp.orders.forEach(order -> System.out.println(order.orderNo));

Рекомендации по пагинации:

  • page начинается с 1.
  • Оставьте pageSize на уровне 100 или ниже.
  • Для заданий сверки постраничное выполнение и дедупликация с помощью orderNo.

Источник и связанные руководства

Обратные вызовы событий фондов

transfer.completed может содержать SUCCESS, FAILED или исходное обновление заказа REVERSED; reverse.completed — терминальное событие разворота ордера. transfer.dead означает, что окончательное состояние остается неподтвержденным после повторных попыток и требует ручной сверки, а не подтвержденного сбоя. Само по себе название мероприятия не доказывает, что средства были зачислены.

Успешное подтверждение отличается от успешного перемещения средств: после записи действительного уведомления targetStatus=FAILED необходимо также вернуть HTTP 2xx. Сохранять дедупликацию событий средств с помощью orderType:orderId:targetStatus внутри продавца и области действия environment.

Поля событий и примеры JSON · Проверка подписи, ответы и повторные попытки