SAP
SAP S/4HANA OData Gateway Sandbox LIVE MOCK

Enterprise Integration Engine for E-Commerce & Mobile TWI | Architect: Fakhrul Rosyid

Arsitektur Clean Core & Side-by-Side Extensibility

Simulasi Gateway OData REST Resmi SAP

Gateway ini mensimulasikan lingkungan backend SAP S/4HANA 2023 On-Premise. Sistem ini siap menerima tembakan integrasi pembuatan Sales Order (Shopee Sync), Goods Movement (MIGO Penerimaan Gudang), dan Presensi Lapangan (Z_HR_ATTENDANCE) menggunakan standar resmi OData REST JSON v2 dengan dukungan handshake CSRF Token.

A_SalesOrder (SO)
2
API_SALES_ORDER_SRV
Goods Movement (MIGO)
1
API_MATERIAL_DOCUMENT_SRV
Business Partners (BP)
5
API_BUSINESS_PARTNER
Z_HR_ATTENDANCE
2
Mobile TWI App Stream

📦 Sales Orders Terkini Shopee / B2B

Endpoint: /sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder

JSON Raw →
SO SAP # Ref Eksternal Mitra (BP) Total Net Status
0000100002 SHOPEE-261006-777 BP_SHOPEE_01 Rp 2,400,000 POSTED
0000100001 SHOPEE-261001-998 BP_SHOPEE_01 Rp 1,250,000 POSTED

📍 Log Presensi Lapangan (Z-Modul) TWI Mobile

Endpoint: /sap/opu/odata/sap/Z_HR_ATTENDANCE_SRV/CheckInSet

JSON Raw →
ID Karyawan Nama Lengkap Waktu WIB Lokasi Status
EMP-ARUL-01 Fakhrul Rosyid (Solutions Architect) 2026-10-06 08:45:09 Kantor Pusat Tanjung Duren (Jakarta Barat) APPROVED
EMP-TASIK-08 Ahmad Junaedi (Mandor Pabrik) 2026-10-06 06:55:00 Pabrik Tasikmalaya APPROVED

💻 Cara Memanggil API SAP Ini Menggunakan Python Ready to Run

Protokol: OData REST JSON v2
# Skrip Python: Menembak Sales Order Shopee ke SAP S/4HANA Mock Gateway
import requests

BASE_URL = "https://sap.fakhrulr.my.id"

# 1. Handshake CSRF Token resmi SAP
session = requests.Session()
head_res = session.head(f"{BASE_URL}/sap/opu/odata/sap/API_SALES_ORDER_SRV", headers={"X-CSRF-Token": "Fetch"})
csrf_token = head_res.headers.get("X-CSRF-Token", "sap-mock-csrf-master-token")

# 2. Kirim Pesanan Shopee sebagai Sales Order SAP resmi
payload = {
    "SalesOrderType": "OR",
    "SalesOrganization": "1000",
    "SoldToParty": "BP_SHOPEE_01",
    "PurchaseOrderByCustomer": "SHOPEE-261006-888",
    "to_Item": {
        "results": [
            {
                "Material": "MAT-TEH-MELATI-01",
                "RequestedQuantity": 20.0,
                "NetPriceAmount": 25000.0,
                "Plant": "PL01"
            }
        ]
    }
}

post_res = session.post(
    f"{BASE_URL}/sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder",
    json=payload,
    headers={"X-CSRF-Token": csrf_token, "Content-Type": "application/json"}
)

print("Status Code:", post_res.status_code) # 201 Created
print("SAP SO Number:", post_res.json()['d']['SalesOrder']) # e.g. 0000100002