Cargo API

Kargo Entegrasyonu: Shipping API Rehberi

Yurtiçi Kargo, Aras Kargo, MNG, PTT Kargo API entegrasyonu. Otomatik gönderi oluşturma, kargo takip, etiket yazdırma ve toplu gönderim.

📦Kargo Firmaları ve API'leri

Kargo API entegrasyonu, gönderi oluşturma, takip, fiyat sorgulama işlemlerini otomatikleştirir. SOAP ve REST API desteği sunar.

Yurtiçi Kargo

API: SOAP + REST
Desi Fiyat: 45-65 TL
Teslimat: 1-3 gün
Kapsama: Türkiye geneli

Aras Kargo

API: SOAP
Desi Fiyat: 42-60 TL
Teslimat: 1-4 gün
Kapsama: 5000+ şube

MNG Kargo

API: REST
Desi Fiyat: 40-58 TL
Teslimat: 2-5 gün
Kapsama: Uygun fiyat

Yurtiçi Kargo API Entegrasyonu

# Python ile Yurtiçi Kargo SOAP API
from zeep import Client
from zeep.wsse.username import UsernameToken

# WSDL URL
WSDL_URL = "https://testapi.yurticikargo.com:9090/KOPSWebServices/ShippingOrderDispatchService?wsdl"

# Credentials
USERNAME = "your-username"
PASSWORD = "your-password"
CUSTOMER_CODE = "123456"

# SOAP client
client = Client(
    wsdl=WSDL_URL,
    wsse=UsernameToken(USERNAME, PASSWORD)
)

# Gönderi oluşturma
def create_shipment(order):
    shipment_data = {
        'cargoKey': CUSTOMER_CODE,
        'invoiceKey': order['order_id'],
        'receiverCustName': order['receiver_name'],
        'receiverAddress': order['receiver_address'],
        'cityName': order['city'],
        'townName': order['district'],
        'receiverPhone1': order['phone'],
        'desiWeight': order['desi'],  # Desi hesaplaması
        'orgGeoCode': '34',  # Gönderen il kodu (İstanbul)
        'destGeoCode': get_city_code(order['city']),
        'cargoCount': 1,
        'cargoType': '1',  # 1: Normal, 2: Belgeli
        'packagingType': '1',  # 1: Paket, 2: Koli
        'paymentType': '1',  # 1: Gönderici öder, 2: Alıcı öder
        'description': order['description'],
    }

    try:
        response = client.service.createShipment(**shipment_data)

        if response.outResult:
            return {
                'success': True,
                'tracking_number': response.outCargoPieceInfoList[0].outBarcodeNo,
                'cargo_key': response.outCargoKey
            }
        else:
            return {
                'success': False,
                'error': response.outResultMessage
            }
    except Exception as e:
        return {'success': False, 'error': str(e)}

# Örnek kullanım
order = {
    'order_id': 'ORD-12345',
    'receiver_name': 'Ahmet Yılmaz',
    'receiver_address': 'Atatürk Cad. No:15 Daire:5',
    'city': 'İstanbul',
    'district': 'Kadıköy',
    'phone': '05551234567',
    'desi': 5,  # (En × Boy × Yükseklik) / 3000
    'description': 'Elektronik ürün - Laptop'
}

result = create_shipment(order)

if result['success']:
    print(f"Kargo No: {result['tracking_number']}")
else:
    print(f"Hata: {result['error']}")
# Kargo takip
def track_shipment(tracking_number):
    response = client.service.queryCargo(
        cargoKey=CUSTOMER_CODE,
        barcodeNo=tracking_number
    )

    if response.outResult:
        cargo_info = response.outCargoPieceInfoList[0]
        return {
            'tracking_number': cargo_info.outBarcodeNo,
            'status': cargo_info.outCargoStatusDescription,
            'current_location': cargo_info.outUnitName,
            'last_update': cargo_info.outOperationDate,
            'delivery_date': cargo_info.outDeliveryDate,
            'receiver': cargo_info.outReceiverName
        }
    else:
        return {'error': response.outResultMessage}

# Etiket yazdırma (PDF)
def print_label(tracking_number):
    response = client.service.printShipmentLabel(
        cargoKey=CUSTOMER_CODE,
        barcodeNo=tracking_number,
        labelType='1'  # 1: A4, 2: Termal
    )

    if response.outResult:
        # Base64 PDF döner
        pdf_base64 = response.outLabelData
        import base64

        pdf_bytes = base64.b64decode(pdf_base64)
        with open(f'label_{tracking_number}.pdf', 'wb') as f:
            f.write(pdf_bytes)

        return f'label_{tracking_number}.pdf'
    else:
        return None

Aras Kargo API

# Aras Kargo SOAP API
from zeep import Client

ARAS_WSDL = "https://kargotakip.araskargo.com.tr/araskargo.asmx?wsdl"
ARAS_USERNAME = "your-username"
ARAS_PASSWORD = "your-password"

client = Client(wsdl=ARAS_WSDL)

def create_aras_shipment(order):
    shipment_xml = f"""
    <ORDER>
        <INVOICE_NUMBER>{order['order_id']}</INVOICE_NUMBER>
        <SENDER_NAME>Firma Adı</SENDER_NAME>
        <SENDER_PHONE>02121234567</SENDER_PHONE>
        <RECEIVER_NAME>{order['receiver_name']}</RECEIVER_NAME>
        <RECEIVER_ADDRESS>{order['receiver_address']}</RECEIVER_ADDRESS>
        <RECEIVER_CITY>{order['city']}</RECEIVER_CITY>
        <RECEIVER_TOWN>{order['district']}</RECEIVER_TOWN>
        <RECEIVER_PHONE>{order['phone']}</RECEIVER_PHONE>
        <PIECE_COUNT>1</PIECE_COUNT>
        <DESI>{order['desi']}</DESI>
        <PAYMENT_TYPE>1</PAYMENT_TYPE>
        <SERVICE_TYPE>1</SERVICE_TYPE>
    </ORDER>
    """

    response = client.service.CreateShipment(
        UserName=ARAS_USERNAME,
        Password=ARAS_PASSWORD,
        ShipmentXML=shipment_xml
    )

    # XML parse
    import xml.etree.ElementTree as ET
    root = ET.fromstring(response)

    if root.find('STATUS').text == 'OK':
        return {
            'success': True,
            'tracking_number': root.find('TRACKING_NUMBER').text
        }
    else:
        return {
            'success': False,
            'error': root.find('ERROR_MESSAGE').text
        }

# Aras Kargo takip
def track_aras(tracking_number):
    response = client.service.QueryShipment(
        UserName=ARAS_USERNAME,
        Password=ARAS_PASSWORD,
        TrackingNumber=tracking_number
    )

    root = ET.fromstring(response)
    status = root.find('.//STATUS_DESCRIPTION').text
    location = root.find('.//CURRENT_LOCATION').text

    return {
        'tracking_number': tracking_number,
        'status': status,
        'location': location
    }

MNG Kargo REST API

# MNG Kargo REST API (JSON)
import requests
import json

MNG_API_URL = "https://api.mngkargo.com.tr/mngapi"
MNG_API_KEY = "your-api-key"
MNG_CUSTOMER_CODE = "123456"

headers = {
    "Authorization": f"Bearer {MNG_API_KEY}",
    "Content-Type": "application/json"
}

def create_mng_shipment(order):
    payload = {
        "referenceNumber": order['order_id'],
        "senderInfo": {
            "name": "Firma Adı",
            "phone": "02121234567",
            "address": "Gönderen Adresi",
            "cityCode": "34",
            "districtCode": "1411"
        },
        "receiverInfo": {
            "name": order['receiver_name'],
            "phone": order['phone'],
            "address": order['receiver_address'],
            "cityCode": order['city_code'],
            "districtCode": order['district_code']
        },
        "shipmentInfo": {
            "pieceCount": 1,
            "desi": order['desi'],
            "paymentType": "SENDER",  # SENDER veya RECEIVER
            "serviceType": "NORMAL",  # NORMAL, EXPRESS
            "deliveryType": "DOOR_TO_DOOR"
        }
    }

    response = requests.post(
        f"{MNG_API_URL}/shipments",
        headers=headers,
        json=payload
    )

    if response.status_code == 200:
        result = response.json()
        return {
            'success': True,
            'tracking_number': result['trackingNumber'],
            'barcode': result['barcode']
        }
    else:
        return {
            'success': False,
            'error': response.json().get('message', 'Unknown error')
        }

# MNG Kargo takip
def track_mng(tracking_number):
    response = requests.get(
        f"{MNG_API_URL}/shipments/{tracking_number}",
        headers=headers
    )

    if response.status_code == 200:
        data = response.json()
        return {
            'tracking_number': tracking_number,
            'status': data['statusDescription'],
            'location': data['currentLocation'],
            'estimated_delivery': data['estimatedDeliveryDate'],
            'movements': data['movements']  # Tüm hareketler
        }
    else:
        return {'error': 'Kargo bulunamadı'}

# Toplu etiket yazdırma
def bulk_print_labels(tracking_numbers):
    """Birden fazla kargonun etiketini tek seferde al"""
    payload = {"trackingNumbers": tracking_numbers}

    response = requests.post(
        f"{MNG_API_URL}/labels/bulk",
        headers=headers,
        json=payload
    )

    if response.status_code == 200:
        # PDF base64 döner
        pdf_base64 = response.json()['labelData']
        import base64
        pdf_bytes = base64.b64decode(pdf_base64)

        with open('bulk_labels.pdf', 'wb') as f:
            f.write(pdf_bytes)

        return 'bulk_labels.pdf'
    else:
        return None

Desi Hesaplama

# Desi hesaplama fonksiyonu
def calculate_desi(width_cm, height_cm, length_cm, weight_kg):
    """
    Desi = max(Hacimsel Ağırlık, Gerçek Ağırlık)
    Hacimsel Ağırlık = (En × Boy × Yükseklik) / 3000
    """
    volumetric_weight = (width_cm * height_cm * length_cm) / 3000
    desi = max(volumetric_weight, weight_kg)

    return round(desi, 2)

# Örnekler
laptop_box = calculate_desi(40, 30, 10, 3)  # 4.0 desi
phone_box = calculate_desi(20, 15, 5, 0.5)  # 0.5 desi
large_package = calculate_desi(100, 80, 50, 10)  # 133.33 desi

print(f"Laptop kutusu: {laptop_box} desi")
print(f"Telefon kutusu: {phone_box} desi")
print(f"Büyük paket: {large_package} desi")

Kargo Fiyat Karşılaştırması

Kargo FirmasıDesi Fiyat (TL)TeslimatAPI
Yurtiçi Kargo45-65 TL1-3 günSOAP + REST
Aras Kargo42-60 TL1-4 günSOAP
MNG Kargo40-58 TL2-5 günREST
PTT Kargo35-50 TL3-7 günSınırlı API
HepsiJetDahil (Hepsiburada)1-2 günREST

Maliyet Optimizasyonu:

Hacim: Aylık 1000+ gönderi: %20-30 indirim pazarlık edin
Çoklu anlaşma: 2-3 kargo ile çalışarak fiyat dengesi sağlayın
Otomatik seçim: Gönderi adresine göre en ucuz kargoyu API ile seçin
Örnek: İstanbul → Ankara: Yurtiçi, İstanbul → Hakkari: MNG

Kargo Entegrasyonunuzu Kuralım

Yurtiçi, Aras, MNG, PTT ve diğer kargo firmaları ile otomatik entegrasyon. Gönderi oluşturma, takip ve etiket yazdırma işlemlerini otomatikleştirin.

Demo İste