> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.6mm.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.6mm.com/_mcp/server.

# تحويلات العقود والمصالحة

يستهدف هذا الدليل **Agent Java SDK `v0.3.0`**، Java 8+، والعقد العام الموسوم. يتم تشغيل الأمثلة في الواجهة الخلفية للشريك بعد تهيئة `client` في [بداية سريعة](/ar/sdk/agent-sdk/java/quick-start).

## مثال المتطلبات الأساسية

تشترك مقتطفات Java في هذه الواردات. قم بتهيئة `client` باستخدام البدء السريع واحصل على `platformUserId` من الرابط المحفوظ. يجب استبدال معرفات المستخدم/الطلب بالقيم الثابتة الخاصة بك.

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

## تحويل المبلغ الثابت

استخدم `transfer` لتحويلات المبالغ الثابتة. `Direction.IN` يعني النقل
من منصة الشريك إلى 6MM. `Direction.OUT` يعني النقل من 6MM
العودة إلى منصة الشريك.

استخدم السلاسل أو `BigDecimal` للمبالغ. لا تستخدم `double` أو `float`.

### نقل بواسطة `agentUserId`

```java
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`

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

### توفير كلا المعرفات

إذا تم توفير كلا المعرفين، تتحقق الخدمة من أنهما يشيران إلى نفس المعرفين
المستخدم المقيد.

```java
TransferRequest req = TransferRequest
        .fixed("AGT-ORDER-1003", "agent-user-001", Direction.IN, "USDT", "20.00")
        .withPlatformUserId("1188041528");

TransferResponse resp = client.transfer(req);
```

حقول الطلب:

| مجال             | يكتب    | مطلوب | وصف                                       |
| ---------------- | ------- | ----- | ----------------------------------------- |
| `agentOrderNo`   | string  | نعم   | رقم طلب الشريك الفريد عالميًا             |
| `agentUserId`    | string  | بشروط | مطلوب عند غياب `platformUserId`           |
| `platformUserId` | string  | بشروط | مطلوب عند غياب `agentUserId`              |
| `direction`      | التعداد | نعم   | `IN` أو `OUT`                             |
| `currency`       | string  | لا    | يتم ملؤها من `defaultCurrency` عند الغياب |
| `amount`         | string  | نعم   | سلسلة المبلغ العشري                       |

حقول الاستجابة:

| مجال             | يكتب   | وصف                                     |
| ---------------- | ------ | --------------------------------------- |
| `orderNo`        | string | رقم طلب المنصة                          |
| `orderStatus`    | string | `SUCCESS`، `FAILED`، `PROCESSING`، إلخ. |
| `agentUserId`    | string | معرف المستخدم من جانب الشريك            |
| `platformUserId` | string | 6MM معرف المستخدم الخارجي               |

## تأكيد الطلب والعجز

بعد استدعاء `transfer`، تقوم خدمة الوكيل باستدعاء التداول بشكل متزامن
الأساسية على المسار الرئيسي. في معظم الحالات، تحتوي الاستجابة API بالفعل على
نتيجة التداول الأساسية المتزامنة.

| نتيجة        | معنى                                          | عمل الشريك                                                                              |
| ------------ | --------------------------------------------- | --------------------------------------------------------------------------------------- |
| `SUCCESS`    | نجح النقل                                     | وضع علامة على الطلب المحلي على أنه ناجح                                                 |
| `FAILED`     | تم رفض النقل أو فشله                          | احفظ سبب الفشل وأظهره عند الاقتضاء                                                      |
| `PROCESSING` | مهلة التداول الأساسية أو عدم اليقين في الشبكة | لا تقم بإعادة المحاولة باستخدام رقم الطلب الجديد. انتظر webhook أو اتصل بـ `queryOrder` |

متطلبات العجز الجنسي:

* استخدم `agentOrderNo` واحدًا لمعاملة تجارية واحدة.
* إذا انتهت مهلة HTTP أو فشلت الشبكة، فاستفسر عن نفس `agentOrderNo` أولاً.
* يمكن إعادة محاولة Webhooks. إلغاء تكرارها عن طريق مفتاح العجز.

## نقل الكل للخارج

`transferAllOut` ينقل رصيد الجانب القابل للسحب 6MM إلى
منصة الشريك.

```java
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`:

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

`amount` في الرد هو المبلغ الفعلي المحول.

## ترتيب عكسي

يتم استخدام العكس لتعويض أمر النقل الناجح عند الواجهة الخلفية
يدعم التدفق العكسي. تتضمن الحالات النموذجية استثناءات الطلب المحلي للشريك
أو التراجع عن التسوية اليدوية.

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

الحقول:

| مجال             | يكتب   | مطلوب | وصف                             |
| ---------------- | ------ | ----- | ------------------------------- |
| `origOrderNo`    | string | نعم   | رقم أمر النقل الأصلي            |
| `reverseOrderNo` | string | نعم   | رقم الطلب العكسي الفريد عالميًا |
| `reverseReason`  | string | نعم   | سبب عكسي                        |

ملحوظات:

* العكس ليس عملية إلغاء عادية.
* يجب أيضًا أن تكون الأوامر العكسية غير فعالة حسب رقم الطلب.
* بعد إلغاء الأمر الأصلي، قد يقوم webhook بدفع الأمر الأصلي
  `REVERSED` الحالة النهائية.

## ترتيب الاستعلام

```java
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`

مجالات الاستجابة المشتركة:

| مجال             | يكتب   | وصف                          |
| ---------------- | ------ | ---------------------------- |
| `orderType`      | string | نوع الطلب                    |
| `orderNo`        | string | رقم طلب الشريك               |
| `status`         | string | حالة الطلب                   |
| `direction`      | string | `IN` أو `OUT`                |
| `transferMode`   | string | `FIXED_AMOUNT` أو `ALL_OUT`  |
| `currency`       | string | عملة                         |
| `amount`         | string | كمية                         |
| `agentUserId`    | string | معرف المستخدم من جانب الشريك |
| `platformUserId` | string | 6MM معرف المستخدم الخارجي    |
| `failReason`     | string | سبب الفشل                    |
| `createdAt`      | string | وقت الخلق                    |
| `completedAt`    | string | وقت الانتهاء                 |

## قائمة الطلبات

```java
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`.

## المصدر والأدلة ذات الصلة

* [المصدر الرسمي v0.3.0](https://github.com/6mm-com/agent-java-sdk/tree/54aa3c1)
* [نظرة عامة على الاستعلام وترقيم الصفحات](/ar/sdk/agent-sdk/java/perpetual-queries)
* [محفظة التمويل](/ar/sdk/agent-sdk/java/funding-wallet)
* [دليل الترقية](/ar/sdk/agent-sdk/java/upgrade)

## عمليات الاسترجاعات لحدث الأموال

`transfer.completed` قد يحمل `SUCCESS`، `FAILED`، أو تحديث الطلب الأصلي لـ `REVERSED`؛ `reverse.completed` هو حدث طرفي لأمر عكسي. `transfer.dead` يعني أن الحالة النهائية تظل غير مؤكدة بعد إعادة المحاولة وتحتاج إلى تسوية يدوية، وليس فشلًا مؤكدًا. اسم الحدث وحده لا يثبت أنه تم إضافة الأموال.

يختلف الإقرار الناجح عن حركة الأموال الناجحة: بعد تسجيل إشعار `targetStatus=FAILED` صالح، قم بإرجاع HTTP 2xx أيضًا. استمرار إلغاء البيانات المكررة في حدث الأموال بواسطة `orderType:orderId:targetStatus` داخل نطاق التاجر و`environment`.

[حقول الأحداث وأمثلة JSON](/ar/sdk/agent-sdk/java/webhook-events) · [التحقق من التوقيع والاستجابات وإعادة المحاولة](/ar/sdk/security/webhooks-idempotency)