Skip to navigation

Transfer & Rekonsiliasi Kontrak

Transfer & Rekonsiliasi Kontrak: Agent Java SDK integrasi v0.3.0, contoh, parameter, dan semantik respons.

View as Markdown

Panduan ini menargetkan Agent Java SDK v0.3.0, Java 8+, dan kontrak publik yang diberi tag. Contoh dijalankan di backend mitra setelah menginisialisasi client di Mulai Cepat.

Contoh prasyarat

Cuplikan Java membagikan impor ini. Inisialisasi client menggunakan Quick Start dan dapatkan platformUserId dari pengikatan yang disimpan. Contoh ID pengguna/pesanan harus diganti dengan nilai Anda yang tetap.

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

Transfer Jumlah Tetap

Gunakan transfer untuk transfer jumlah tetap. Direction.IN artinya mentransfer dari platform mitra ke 6MM. Direction.OUT berarti mentransfer dari 6MM kembali ke platform mitra.

Gunakan string atau BigDecimal untuk jumlah. Jangan gunakan double atau float.

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

Transfer Oleh platformUserId

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

Berikan Kedua ID

Jika kedua ID diberikan, layanan akan memvalidasi bahwa keduanya mengarah ke hal yang sama pengguna terikat.

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

Bidang permintaan:

BidangJenisDiperlukanKeterangan
agentOrderNostringYaNomor pesanan mitra yang unik secara global
agentUserIdstringSecara kondisionalDiperlukan ketika platformUserId tidak ada
platformUserIdstringSecara kondisionalDiperlukan ketika agentUserId tidak ada
directionenumYaIN atau OUT
currencystringTIDAKDiisi dari defaultCurrency bila tidak ada
amountstringYaString jumlah desimal

Bidang respons:

BidangJenisKeterangan
orderNostringNomor pesanan platform
orderStatusstringSUCCESS, FAILED, PROCESSING, dll.
agentUserIdstringID pengguna sisi mitra
platformUserIdstring6MM ID pengguna eksternal

Konfirmasi Pesanan Dan Idempotensi

Setelah transfer dipanggil, layanan Agen secara sinkron memanggil perdagangan inti di jalur utama. Dalam kebanyakan kasus, respons API sudah berisi hasil inti perdagangan yang sinkron.

HasilArtiTindakan mitra
SUCCESSTransfer berhasilTandai pesanan lokal sebagai berhasil
FAILEDTransfer ditolak atau gagalSimpan alasan kegagalan dan tunjukkan bila perlu
PROCESSINGBatas waktu inti perdagangan atau ketidakpastian jaringanJangan mencoba lagi dengan nomor pesanan baru. Tunggu webhook atau hubungi queryOrder

Persyaratan idempotensi:

  • Gunakan satu agentOrderNo untuk satu transaksi bisnis.
  • Jika HTTP waktu habis atau jaringan gagal, tanyakan agentOrderNo yang sama terlebih dahulu.
  • Webhooks dapat dicoba lagi. Hapus duplikatnya dengan kunci idempotensi.

Transfer Semua Keluar

transferAllOut memindahkan saldo sisi 6MM yang dapat ditarik kembali ke platform mitra.

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

Oleh platformUserId:

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

amount dalam respon adalah jumlah sebenarnya yang ditransfer.

Urutan Terbalik

Reverse digunakan untuk mengkompensasi perintah transfer yang berhasil saat backend mendukung aliran balik. Kasus yang umum mencakup pengecualian pesanan lokal mitra atau rollback rekonsiliasi manual.

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

Bidang:

BidangJenisDiperlukanKeterangan
origOrderNostringYaNomor pesanan transfer asli
reverseOrderNostringYaNomor pesanan terbalik yang unik secara global
reverseReasonstringYaAlasan sebaliknya

Catatan:

  • Mundur bukanlah operasi pembatalan yang normal.
  • Pesanan terbalik juga harus idempoten berdasarkan nomor pesanan.
  • Setelah pesanan awal dibalik, webhook dapat mendorong pesanan awal REVERSED keadaan akhir.

Urutan Kueri

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

Nilai orderType yang didukung:

  • TRANSFER_IN
  • TRANSFER_OUT

Bidang respons umum:

BidangJenisKeterangan
orderTypestringJenis pesanan
orderNostringNomor pesanan mitra
statusstringStatus pesanan
directionstringIN atau OUT
transferModestringFIXED_AMOUNT atau ALL_OUT
currencystringMata uang
amountstringJumlah
agentUserIdstringID pengguna sisi mitra
platformUserIdstring6MM ID pengguna eksternal
failReasonstringAlasan kegagalan
createdAtstringWaktu penciptaan
completedAtstringWaktu penyelesaian

Daftar Pesanan

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

Rekomendasi penomoran halaman:

  • page dimulai dari 1.
  • Pertahankan pageSize pada atau di bawah 100.
  • Untuk pekerjaan rekonsiliasi, halaman demi jendela waktu dan hapus duplikatnya berdasarkan orderNo.

Sumber dan panduan terkait

Mendanai panggilan balik acara

transfer.completed mungkin membawa SUCCESS, FAILED, atau pembaruan pesanan asli REVERSED; reverse.completed adalah peristiwa terminal pembalikan pesanan. transfer.dead berarti keadaan akhir masih belum dikonfirmasi setelah percobaan ulang dan memerlukan rekonsiliasi manual, bukan kegagalan yang dikonfirmasi. Nama acara saja tidak membuktikan dana telah dikreditkan.

Pengakuan yang berhasil berbeda dengan perpindahan dana yang berhasil: setelah mencatat notifikasi targetStatus=FAILED yang valid, kembalikan HTTP 2xx juga. Pertahankan deduplikasi peristiwa dana sebesar orderType:orderId:targetStatus dalam lingkup pedagang dan environment.

Bidang acara dan JSON contohnya · Verifikasi tanda tangan, tanggapan, dan percobaan ulang