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 NoneAras 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 NoneDesi 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) | Teslimat | API |
|---|---|---|---|
| Yurtiçi Kargo | 45-65 TL | 1-3 gün | SOAP + REST |
| Aras Kargo | 42-60 TL | 1-4 gün | SOAP |
| MNG Kargo | 40-58 TL | 2-5 gün | REST |
| PTT Kargo | 35-50 TL | 3-7 gün | Sınırlı API |
| HepsiJet | Dahil (Hepsiburada) | 1-2 gün | REST |
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→