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

Кошелек для финансирования

Funding Wallet: интеграция с 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.*;

Запросы и переводы кошелька

Различаем три кошелька

кошелекИсточник балансаиспользовать
Собственный пользовательский кошелек продавцаСобственная система учета торговцаДоступный баланс пользователя на стороне продавца
Финансирование платформыqueryUserAssets из fundingТорговые фонды Seconds и взаимный перевод «Финансирование/Контракт»
Платформенный контрактПоле актива контракта queryUserAssetsМаржа по бессрочному контракту и переводной баланс

queryAccount Запросите маржинальный счет торговой платформы, а не кошелек пользователя продавца. Этот интерфейс не имеет параметров environment и не может быть запрошен как имитируемый пользовательский актив.

Запросите два кошелька платформы симулированных пользователей:

QueryUserAssetsResponse assets = client.queryUserAssets(
QueryUserAssetsRequest.of(platformUserId)
.withFunding()
.withEnvironment(ExecutionEnvironment.SIMULATED));

Интерфейс: POST /v1/agent/query-user-assets. Финансирование запрашивается только тогда, когда includeFunding=true; по умолчанию используется исходная семантика запроса актива контракта.

поля ответазначение
walletBalance, availableBalance, frozenMargin, usedMargin, isolatedMarginСуммы, связанные с контрактным кошельком
funding.assetCodeВ настоящее время USDT
funding.availableAmount, heldAmount, totalAmountДоступное финансирование, занятость и общая сумма
funding.materializedБыл ли счет финансирования материализован?
environmentЭто поле отображается, когда среда передается явно; старые запросы, в которых не указана среда, не возвращают это поле.
isSimulatedUserКлассификация счетов; не может заменить выбор торговой среды

Суммы обрабатываются как строки или BigDecimal, а не float/double.

Направления перевода средств

Создайте: POST /v1/agent/wallet-transfer, SDK walletTransfer.

directionПоток средствtransferAll
PARTNER_TO_FUNDINGМерчант → Финансирование платформыТолько фиксированная сумма
FUNDING_TO_PARTNERФинансирование платформы → МерчантТолько фиксированная сумма
FUNDING_TO_CONTRACTПлатформа единой среды Финансирование → КонтрактПоддерживает фиксированную сумму или все выводимые средства
CONTRACT_TO_FUNDINGПлатформа той же среды Контракт → ФинансированиеПоддерживает фиксированную сумму или все выводимые средства

Текущая валюта поддерживает только USDT. Фиксированная сумма должна представлять собой положительную строку длиной до 8 знаков после запятой и не может использовать экспоненциальное представление. Когда transferAll=true, опустите amount и запишите его как окончательный ответ amount; «все» включает только выводимые средства.

Пример: Продавец переводит 10 USDT в симулированное финансирование. Сначала сохраните бизнес-заказ и среду в системе мерчанта, а затем отправьте запрос:

String fundingOrderNo = "SIM-FUNDING-20261010-000001";
WalletTransferResponse transfer = client.walletTransfer(
WalletTransferRequest.of(fundingOrderNo, "merchant-user-001",
"PARTNER_TO_FUNDING", "10.00000000", false)
.withEnvironment(ExecutionEnvironment.SIMULATED));

Финансирование Переведите все средства, которые могут быть переведены в моделируемый Контракт:

WalletTransferResponse move = client.walletTransfer(
WalletTransferRequest.of("SIM-F2C-20261010-000001", "merchant-user-001",
"FUNDING_TO_CONTRACT", null, true)
.withEnvironment(ExecutionEnvironment.SIMULATED));

Та же операция должна продолжать использовать исходный agentOrderNo; разные операции и разные среды используют разные номера заказа. Изменение суммы, пользователя, направления или среды с тем же номером заказа будет отклонено. Передача финансирования/контракта может осуществляться только в той же среде, а симулированные средства не могут быть переведены в реальные средства.

Подтверждение результата и восстановление неизвестного результата

Ответы о финансировании представлены в виде status, SUCCESS, PROCESSING или FAILED, и возвращаются orderNo, direction, currency, amount, resultCode и т. д. code=0 означает лишь то, что запрос обработан успешно и вам нужно продолжать судить status.

результатТорговая обработка
SUCCESSПолная локальная бухгалтерская обработка на основе фактической суммы
PROCESSINGСохраните его на месте для подтверждения и проверьте исходный заказ.
HTTP Тайм-аут, сетевая ошибка, результат не может быть проанализированРезультат считается неизвестным и запрашивается исходный заказ; его нельзя напрямую определить как сбой или создать новый заказ и повторить попытку.
Идентифицирован FAILEDОсвободите локальное резервирование в соответствии с явным результатом отказа; создать новый бизнес-заказ, когда бизнес необходимо снова начать

Запрос на финансирование использует выделенный интерфейс POST /v1/agent/wallet-transfer-status:

WalletTransferResponse recovered = client.queryWalletTransfer(
WalletTransferQueryRequest.of(fundingOrderNo)
.withEnvironment(ExecutionEnvironment.SIMULATED));

Используйте эту выделенную конечную точку для восстановления исходной операции финансирования; queryOrder не может заменить его. Сохраните исходную среду и явно передайте ее во время восстановления. Если environment опущено в wallet-transfer-status, сервер использует среду, сохраненную в исходном заказе, включая смоделированные заказы. Явно конфликтующая среда возвращает 102002 (order environment mismatch). Если вызывающая сторона опускает среду, в ответе также отсутствует environment; это не означает, что первоначальный заказ является производственным заказом.

Местные депозиты и снятие средств торговцев идемпотентны; постоянные заказы и балансы резервируются до инициации и резервируются для подтверждения, когда результат неизвестен. Доступ к финансированию использует специальный запрос для подтверждения окончательного статуса; не предполагайте, что старые методы передачи контракта Webhook или отмены автоматически применимы к Финансированию.

Поток передачи существующего контракта

Исходные transfer, transferAllOut, reverse, queryOrder, listOrders продолжают обрабатывать исходный процесс передачи контракта. queryOrder — запрос поручений на перевод средств, listOrders — список сверки переводов; вместо, Постоянные запросы используются для бессрочных торговых ордеров.

В исходном ответе на финансирование используется orderStatus; в ответе на финансирование используется status, не смешивайте их. Исходный перевод Webhook проверяется с помощью X-Agent-Timestamp, X-Agent-Nonce, X-Agent-Signature, а исходный текст подписи — timestamp + nonce + rawBody; исходное тело запроса сначала проверяется, затем десериализуется и становится идемпотентным. Явные уведомления моделируемой среды содержат environment=SIMULATED, производственные уведомления остаются совместимыми со старыми полями. Сумма, номер заказа, статус и среда должны быть проверены в местном бизнес-заказе.

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

Поля запроса на финансирование

ПолеНеобходимыйЗначение
agentOrderNoДаГлобально уникальный партнерский номер заказа; сохраняться перед отправкой.
agentUserId / platformUserIdОдинОпределить привязанного пользователя; если оба указаны, они должны совпадать.
directionДаОдно из четырех направлений, описанных выше.
currencyПо умолчанию USDTПоддерживается только USDT.
transferAllПо умолчанию ложьВерно поддерживаются только внутренние переводы финансирования/контракта.
amountУсловныйПоложительная десятичная строка для фиксированного перевода; опустите для transferAll=true.
environmentНеобязательныйПроизводство при пропуске для новой передачи; SIMULATED выбирает моделируемые фонды.

Поля ответа о финансировании

ПолеЗначение
orderNoВозвращаемый идентификатор операции; сохраните вместе с исходным номером заказа партнера.
statusSUCCESS / PROCESSING / FAILED; определяет завершение дела.
direction / currencyПодтвержденное направление перевода и актив.
amountФактическая сумма перевода в виде строки.
transferAllЗапросила ли эта операция все выводимые средства.
agentUserId / platformUserIdВозвращен идентификатор пользователя; сравнить с сохраненным заказом.
resultCodeДетализация результата операции; сохраняйте для примирения и поддержки.
environmentОтображается, когда вызывающая сторона явно предоставила его; Отсутствие не является доказательством производства для запроса статуса исходного заказа.