Zur Navigation springen

Vertragsübertragungen und -abgleich

Vertragsübertragungen und -abgleich: Agent Java SDK v0.3.0-Integration, Beispiele, Parameter und Antwortsemantik.

Als Markdown anzeigen

Dieser Leitfaden richtet sich an Agent Java SDK v0.3.0, Java 8+ und den getaggten öffentlichen Auftrag. Beispiele werden nach der Initialisierung von client in einem Partner-Backend ausgeführt Schnellstart.

Beispielvoraussetzungen

Die Java-Snippets teilen diese Importe. Initialisieren Sie client mit Quick Start und rufen Sie platformUserId aus der gespeicherten Bindung ab. Beispiel-Benutzer-/Bestell-IDs müssen durch Ihre eigenen persistenten Werte ersetzt werden.

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

Überweisung mit festem Betrag

Verwenden Sie transfer für Überweisungen mit festen Beträgen. Direction.IN bedeutet übertragen von der Partnerplattform in 6MM. Direction.OUT bedeutet Übertragung von 6MM zurück zur Partnerplattform.

Verwenden Sie für Beträge Zeichenfolgen oder BigDecimal. Verwenden Sie nicht double oder float.

Übertragung durch 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);

Übertragung durch platformUserId

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

Geben Sie beide IDs an

Wenn beide IDs angegeben werden, überprüft der Dienst, ob sie auf dieselbe verweisen gebundener Benutzer.

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

Anfragefelder:

FeldTypErforderlichBeschreibung
agentOrderNostringJaWeltweit eindeutige Partner-Bestellnummer
agentUserIdstringBedingtErforderlich, wenn platformUserId nicht vorhanden ist
platformUserIdstringBedingtErforderlich, wenn agentUserId nicht vorhanden ist
directionAufzählungJaIN oder OUT
currencystringNEINWird bei Abwesenheit ab defaultCurrency ausgefüllt
amountstringJaDezimalbetragszeichenfolge

Antwortfelder:

FeldTypBeschreibung
orderNostringBestellnummer der Plattform
orderStatusstringSUCCESS, FAILED, PROCESSING usw.
agentUserIdstringPartnerseitige Benutzer-ID
platformUserIdstring6MM externe Benutzer-ID

Auftragsbestätigung und Idempotenz

Nachdem transfer aufgerufen wurde, ruft der Agent-Dienst synchron den Handel auf Kern auf dem Hauptpfad. In den meisten Fällen enthält die API-Antwort bereits das synchrones Trading-Kernergebnis.

ErgebnisBedeutungPartneraktion
SUCCESSDie Übertragung war erfolgreichMarkieren Sie die lokale Bestellung als erfolgreich
FAILEDDie Übertragung wurde abgelehnt oder ist fehlgeschlagenSpeichern Sie den Fehlergrund und zeigen Sie ihn gegebenenfalls an
PROCESSINGTimeout des Handelskerns oder NetzwerkunsicherheitVersuchen Sie es nicht erneut mit einer neuen Bestellnummer. Warten Sie auf webhook oder rufen Sie queryOrder an.

Idempotenzanforderungen:

  • Verwenden Sie ein agentOrderNo für eine Geschäftstransaktion.
  • Wenn bei HTTP eine Zeitüberschreitung auftritt oder das Netzwerk ausfällt, fragen Sie zuerst dasselbe agentOrderNo ab.
  • Webhooks kann erneut versucht werden. Deduplizieren Sie sie anhand des Idempotenzschlüssels.

Alles übertragen

transferAllOut verschiebt den auszahlbaren 6MM-seitigen Saldo des Benutzers zurück auf die Partnerplattform.

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

Von platformUserId:

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

amount in der Antwort ist der tatsächlich überwiesene Betrag.

Umgekehrte Reihenfolge

Reverse wird verwendet, um einen erfolgreichen Überweisungsauftrag beim Backend zu kompensieren unterstützt den Rückfluss. Typische Fälle sind Ausnahmen bei lokalen Bestellungen von Partnern oder manuelles Abgleichs-Rollback.

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

Felder:

FeldTypErforderlichBeschreibung
origOrderNostringJaUrsprüngliche Überweisungsauftragsnummer
reverseOrderNostringJaWeltweit eindeutige Reverse-Order-Nummer
reverseReasonstringJaUmgekehrter Grund

Hinweise:

  • „Reverse“ ist kein normaler Abbruchvorgang.
  • Umgekehrte Bestellungen müssen auch nach Bestellnummer idempotent sein.
  • Nachdem eine ursprüngliche Bestellung storniert wurde, kann webhook die ursprüngliche Bestellung verschieben REVERSED Endzustand.

Abfragereihenfolge

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

Unterstützte orderType-Werte:

  • TRANSFER_IN
  • TRANSFER_OUT

Häufige Antwortfelder:

FeldTypBeschreibung
orderTypestringAuftragsart
orderNostringBestellnummer des Partners
statusstringBestellstatus
directionstringIN oder OUT
transferModestringFIXED_AMOUNT oder ALL_OUT
currencystringWährung
amountstringMenge
agentUserIdstringPartnerseitige Benutzer-ID
platformUserIdstring6MM externe Benutzer-ID
failReasonstringFehlergrund
createdAtstringSchöpfungszeit
completedAtstringFertigstellungszeit

Bestellungen auflisten

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

Empfehlungen zur Paginierung:

  • page beginnt bei 1.
  • Halten Sie pageSize bei oder unter 100.
  • Bei Abgleichsjobs Seite für Zeitfenster und Deduplizierung um orderNo.

Quelle und zugehörige Leitfäden

Rückrufe bei Fondsveranstaltungen

transfer.completed kann SUCCESS, FAILED oder eine ursprüngliche Bestellaktualisierung von REVERSED enthalten; reverse.completed ist ein Terminalereignis für die Stornierung von Bestellungen. transfer.dead bedeutet, dass der endgültige Status nach Wiederholungsversuchen unbestätigt bleibt und einen manuellen Abgleich erfordert, kein bestätigter Fehler. Der Name der Ereignis allein ist kein Beweis dafür, dass Gelder gutgeschrieben wurden.

Eine erfolgreiche Bestätigung unterscheidet sich von einer erfolgreichen Geldbewegung: Nachdem Sie eine gültige targetStatus=FAILED-Benachrichtigung erfasst haben, geben Sie auch HTTP 2xx zurück. Behalten Sie die Deduplizierung von Geldereignissen durch orderType:orderId:targetStatus innerhalb des Händler- und environment-Bereichs bei.

Ereignisfelder und JSON Beispiele · Signaturüberprüfung, Antworten und Wiederholungsversuche