كيفية الوصول إلى أسعار شركات الشحن المتعددة من خلال واجهة برمجة تطبيقات واحدة (مع واجهة برمجة تطبيقات الشحن المجاني)

نشرت: 2017-02-27
Multi Carrier

آخر تحديث - 24 فبراير 2020

في هذه المقالة ، سوف تفهم كيفية الوصول إلى واجهة برمجة التطبيقات هذه والحصول على أسعار محلية ودولية لحزمتك من شركات شحن مختلفة مثل FedEx و UPS و USPS. عليك فقط تحديد عنوان الشاحن وعنوان المستلم ونوع الخدمة وتفاصيل التفويض للناقل المحدد كبيانات JSON مشفرة.

لاستخدام واجهة برمجة التطبيقات هذه ، تحتاج إلى التسجيل في http://shippingapi.storep.com والحصول على مفتاح API مجاني في بريدك الإلكتروني ، ما عليك سوى تقديم معرف البريد الإلكتروني الخاص بك أثناء التسجيل.

احصل على: قائمة الخدمات المتاحة

1: احصل على جميع خدمات FedEx المتاحة:
Comand : curl http://shippingapi.storepep.com/api/shippings/fedex-services

الإخراج :
{
"FEDEX_1_DAY_FREIGHT":"FEDEX 1 DAY FREIGHT",
"FEDEX_2_DAY":"FEDEX 2 DAY",
"FEDEX_2_DAY_AM":"FEDEX 2 DAY AM",
"FEDEX_2_DAY_FREIGHT":"FEDEX 2 DAY FREIGHT",
"FEDEX_3_DAY_FREIGHT":"FEDEX 3 DAY FREIGHT",
"FEDEX_DISTANCE_DEFERRED":"FEDEX DISTANCE DEFERRED",
"FEDEX_EXPRESS_SAVER":"FEDEX EXPRESS SAVER",
"FEDEX_FIRST_FREIGHT":"FEDEX FIRST FREIGHT",
"FEDEX_FREIGHT_ECONOMY":"FEDEX FREIGHT ECONOMY",
"FEDEX_FREIGHT_PRIORITY":"FEDEX FREIGHT PRIORITY",
"FEDEX_GROUND":"FEDEX GROUND",
"FEDEX_NEXT_DAY_AFTERNOON":"FEDEX NEXT DAY AFTERNOON",
"FEDEX_NEXT_DAY_EARLY_MORNING":"FEDEX NEXT DAY EARLY MORNING",
"FEDEX_NEXT_DAY_END_OF_DAY":"FEDEX NEXT DAY END OF DAY",
"FEDEX_NEXT_DAY_FREIGHT":"FEDEX NEXT DAY FREIGHT",
"FEDEX_NEXT_DAY_MID_MORNING":"FEDEX NEXT DAY MID MORNING",
"FIRST_OVERNIGHT":"FIRST OVERNIGHT",
"GROUND_HOME_DELIVERY":"GROUND HOME DELIVERY",
"EUROPE_FIRST_INTERNATIONAL_PRIORITY":"EUROPE FIRST INTERNATIONAL PRIORITY",
"INTERNATIONAL_ECONOMY":"INTERNATIONAL ECONOMY",
"INTERNATIONAL_ECONOMY_FREIGHT":"INTERNATIONAL ECONOMY FREIGHT",
"INTERNATIONAL_FIRST":"INTERNATIONAL FIRST",
"INTERNATIONAL_PRIORITY":"INTERNATIONAL PRIORITY",
"INTERNATIONAL_PRIORITY_FREIGHT":"INTERNATIONAL PRIORITY FREIGHT",
"PRIORITY_OVERNIGHT":"PRIORITY OVERNIGHT",
"SAME_DAY":"SAME DAY",
"SAME_DAY_CITY":"SAME DAY CITY",
"SMART_POST":"SMART POST",
"STANDARD_OVERNIGHT":"STANDARD OVERNIGHT"
}

2: احصل على جميع خدمات UPS المتاحة:
Comand : curl http://shippingapi.storepep.com/api/shippings/ups-services
الإخراج :

{
'01': 'UPS Next Day Air',
'02': 'UPS Second Day Air',
'03': 'UPS Ground',
'07': 'UPS Worldwide Express',
'08': 'UPS Worldwide Expedited',
'11': 'UPS Standard',
'12': 'UPS Three-Day Select',
'13': 'UPS Next Day Air Saver',
'14': 'UPS Next Day Air Early AM',
'54': 'UPS Worldwide Express Plus',
'59': 'UPS Second Day Air AM',
'65': 'UPS Saver',
'82': 'UPS Today Standard',
'83': 'UPS Today Dedicated Courier',
'84': 'UPS Today Intercity',
'85': 'UPS Today Express',
'86': 'UPS Today Express Saver',
'92': 'UPS SurePost (USPS) < 1lb', '93': 'UPS SurePost (USPS) > 1lb',
'94': 'UPS SurePost (USPS) BPM',
'95': 'UPS SurePost (USPS) Media'
}

3: احصل على جميع خدمات USPS المتاحة:
Comand : curl http://shippingapi.storepep.com/api/shippings/usps-services
الإخراج :

{
'First Class>LETTER':'First Class>LETTER',
'First Class>FLAT':'First Class>FLAT',
'First Class>PARCEL':'First Class>PARCEL',
'First Class>POSTCARD':'First Class>POSTCARD',
'First Class>PACKAGE SERVICE':'First Class>PACKAGE SERVICE',
'First Class Commercial>PACKAGE SERVICE':'First Class Commercial>PACKAGE SERVICE',
'First Class HFP Commercial>PACKAGE SERVICE':'First Class HFP Commercial>PACKAGE SERVICE',
'Priority':'Priority',
'Priority Commercial':'Priority Commercial',
'Priority Cpp':'Priority Cpp',
'Priority HFP Commercial':'Priority HFP Commercial',
'Priority HFP Cpp':'Priority HFP Cpp',
'Priority Mail Express':'Priority Mail Express',
'Priority Mail Express Commercial':'Priority Mail Express Commercial',
'Priority Mail Express Cpp':'Priority Mail Express Cpp',
'Priority Mail Express HFP':'Priority Mail Express HFP',
'Priority Mail Express HFP Commercial':'Priority Mail Express HFP Commercial',
'Standard Post':'Standard Post',
'Retail Ground':'Retail Ground',
'Media':'Media',
'Library':'Library',
'Online Plus':'Online Plus',
'12':'Global Express Guaranteed',
'1':'Priority Mail Express International',
'2':'Priority Mail International',
'9':'Priority Mail International Medium Flat Rate Box',
'11':'Priority Mail International Large Flat Rate Box',
'16':'Priority Mail International Small Flat Rate Box',
'15':'First Class Package International Service'
}

POST: معدلات API

لاستخدام معدلات API ، نحتاج أولاً إلى فهم بنية طلب واجهة برمجة التطبيقات هذا

اسم وصف
Common_Params يحتوي على عناصر داخلية مشتركة بين جميع شركات الشحن
Common_Params > البيئة لوضع الاختبار: وضع الحماية ، لوضع الإنتاج: مباشر
Common_Params > معرف البريد الإلكتروني معرف البريد الإلكتروني المسجل لهذا API
Common_Params > مفتاح تم استلام مفتاح API أثناء التسجيل
Common_Params > مضيف اختياري (اسم مضيفك)
Common_Params > os اختياري (تفاصيل نظام التشغيل الخاص بك)
Common_Params > Shipper_PersonName اسم المرسل
Common_Params > Shipper_CompanyName شركة المرسل
Common_Params > Shipper_PhoneNumber رقم هاتف المرسل
Common_Params > Shipper_Address_StreetLines عنوان شارع المرسل
Common_Params > Shipper_Address_City مدينة المرسل
Common_Params > Shipper_Address_StateOrProvinceCode رمز الولاية / المقاطعة للمرسل (* ليس أكثر من حرفين)
Common_Params > Shipper_Address_PostalCode الرمز البريدي للمرسل
Common_Params > Shipper_Address_CountryCode رمز بلد المرسل (* رمز حرفين فقط)
Common_Params > Recipient_PersonName اسم المستقبل
Common_Params > Recipient_CompanyName شركة المستلم
Common_Params > Recipient_PhoneNumber رقم هاتف المستلم
Common_Params > Recipient_Address_StreetLines عنوان شارع المستلم
Common_Params > Recipient_Address_City مدينة المستلم
Common_Params > Recipient_Address_StateOrProvinceCode رمز الولاية / المقاطعة للمستلم ()
Common_Params > Recipient_Address_PostalCode الرمز البريدي للمستلم
Common_Params > Recipient_Address_CountryCode رمز بلد المستلم
Common_Params > Recipient_Address_CountryName اسم بلد المستلم
Common_Params > Recipient_Address_Residential صواب / خطأ (عنوان سكن المستلم)
Common_Params > fedex_key تم استلام المفتاح من FedEx
Common_Params > fedex_password كلمة مرور FedEx
Common_Params > fedex_account_number رقم حساب فيديكس
Common_Params > fedex_meter_number رقم عداد فيديكس
Common_Params > ups_key تم استلام المفتاح من UPS
Common_Params > ups_password كلمة مرور UPS
Common_Params > ups_account_number رقم حساب UPS
Common_Params > ups_username تم استلام اسم المستخدم من UPS
Common_Params > usps_username اسم مستخدم USPS
Request_Array يحتوي هذا الكائن على طلبات لشركات متعددة وحزم متعددة
Request_Array > صفيف الطلب مرت طلبات متعددة في مجموعة واحدة

هيكل الطلب (كما في Request_Array )

اسم وصف
طلب يحتوي على عناصر داخلية مشتركة بين جميع شركات النقل (شركات الشحن)
طلب > معرف أي معرف فريد لتعريف هذه الحزمة (معرف عنصر المصفوفة هذا)
طلب > شركة اسم شركة الشحن (على سبيل المثال: "fedex" ، "ups" ، "usps") للحصول على أسعار من هذه الشركات لهذه الحزمة
طلب > الوزن_الوحدات وحدة الوزن (حاليًا يتم دعم "LB" فقط)
طلب > نوع الخدمة رمز الخدمة الخاص بخدمة شركة النقل المحددة المطلوب سعرها. الرجوع إلى وثائق API للناقلين.
طلب > RateRequestTypes "لا شيء" للأسعار المحددة للحساب و "LIST" لأسعار التجزئة
طلب > حزم

نموذج JSON (قبل التشفير) :
 {
	"Common_Params": {
		"البيئة": "وضع الحماية" ،
		"معرف البريد الإلكتروني": "[email protected]" ،
		"المفتاح": "b52ee1f3ab8454589d6a9bd5018d60be" ،
		"host": "www.storepep.com"،
		"os": "Windows NT 6.3 build 9600 (Windows 8.1 Home) i586" ،
		"Shipper_PersonName": "JOE CHRIST" ،
		"Shipper_CompanyName": "شركتي" ،
		"Shipper_PhoneNumber": "0123456789"،
		"Shipper_Address_StreetLines": "SILK BOARD" ،
		"Shipper_Address_City": "COLUMBUS" ،
		"Shipper_Address_StateOrProvinceCode": "OH" ،
		"Shipper_Address_PostalCode": "43218" ،
		"Shipper_Address_CountryCode": "US"،
		"Recipient_PersonName": "اسم المستلم" ،
		"Recipient_CompanyName": "XYZ" ،
		"Recipient_PhoneNumber": "0123456789"،
		"Recipient_Address_StreetLines": "123، XYZ ROAD"،
		"Recipient_Address_City": ""،
		"Recipient_Address_StateOrProvinceCode": "WA" ،
		"Recipient_Address_PostalCode": "98503" ،
		"Recipient_Address_CountryCode": "US"،
		"Recipient_Address_CountryName": "الولايات المتحدة (الولايات المتحدة)" ،
		"Recipient_Address_Residential": "false"،
		"fedex_key": "UzxdpT3cy7UDF3Vl"،
		"fedex_password": "I1IWFyvBz34QnJOwqZyBn9oll" ،
		"fedex_account_number": "110087444"،
		"fedex_meter_number": "128768444"،
		"ups_key": "DCEF2E428E10BBB7"،
		"ups_password": "Q1w2e3r4t5o5"،
		"ups_account_number": "189Y5A" ،
		"ups_username": "iahtai21"،
		"usps_username": "806XDDAP3116" ،
		"usps_password": "516GD04CJ256"
	} ،
	"Request_Array": [
		{
			"المعرف": "53: 1"،
			"شركة": [
				"USPS"
			] ،
			"الوزن_الوحدات": "رطل" ،
			"نوع الخدمة": "الأولوية" ،
			"RateRequestTypes": "NONE"،
			"الحزم": [
				{
					"الوزن": 2 ،
					"الوحدة": "LBS"،
					"الوصف": "الحزمة الخاصة بي" ،
					"no_of_packages": 1 ،
					"رقم التسلسل": 1
				}
			]
		} ،
		{
			"المعرف": "53،37: 1"،
			"شركة": [
				"فيديكس"
			] ،
			"الوزن_الوحدات": "رطل" ،
			"نوع الخدمة": "FEDEX_GROUND" ،
			"RateRequestTypes": "NONE"،
			"الحزم": [
				{
					"الوزن": 1.5 ،
					"الوحدة": "LBS"،
					"الوصف": "الحزمة الخاصة بي" ،
					"no_of_packages": 1 ،
					"رقم التسلسل": 3
				}
			]
		}
	]
}

بعد إنشاء مثل هذا الكائن JSON ، تحتاج إلى تشفير هذا الكائن باستخدام مفتاح API الفريد الخاص بك. نحن نقدم خوارزمية التشفير أدناه ، حتى يسهل عليك المتابعة.

دالة PHP لتشفير طلب JSON هذا

 <؟ php
    ترميز الوظيفة ($ key، $ data)
    {
     $ cipher = mcrypt_module_open (MCRYPT_RIJNDAEL_128، ''، MCRYPT_MODE_CBC، '') ؛
     $ key256 = $ key؛
     $ الرابع = '1156651 @ Xadapter' ؛
     mcrypt_generic_init ($ cipher ، $ key256 ، $ iv) ؛
     $ cipherText256 = mcrypt_generic ($ cipher، $ data)؛
     mcrypt_generic_deinit (تشفير $) ؛
     $ cipherHexText256 = bin2hex ($ cipherText256) ؛
     إرجاع $ cipherHexText256 ؛
    }
؟>

بعد ذلك ، ضع هذا الكائن المشفر في كائن JSON آخر (مع عنصرين ، "معرف البريد الإلكتروني" و "البيانات") وأرسله إلى الخادم.

 <؟ php
  req = مجموعة () ؛
  $ req ['emailid'] = '[email protected]'؛ معرف البريد الإلكتروني المسجل في API الخاص بك
  $ apikey = 'b52ee1f3ab8454589d6a9bd5018d60be' ؛ API المسجل الخاص بك KEY
  $ req ['data'] = $ this-> encode ($ apikey، $ JSON_Req)؛
  المحتوى $ = json_encode ($ req) ؛
؟>

يبدو طلب JSON النهائي كما يلي:

 {"معرف البريد الإلكتروني": "[email protected]"،
    "بيانات":""
   }

أرسل كائن JSON هذا إلى الخادم.

ألق نظرة على المثال أدناه لفهم كيفية إرسال الطلب في PHP:

 $ curl = curl_init ("http://shippingapi.storep.com/api/shippings/rates") ؛
                curl_setopt ($ curl، CURLOPT_HEADER، false) ؛
                curl_setopt ($ curl، CURLOPT_RETURNTRANSFER، true) ؛
                curl_setopt ($ curl، CURLOPT_HTTPHEADER، مجموعة ("نوع المحتوى: تطبيق / json")) ؛
                curl_setopt ($ curl، CURLOPT_SSL_VERIFYPEER، false) ؛
                curl_setopt ($ curl، CURLOPT_SSL_VERIFYHOST، false) ؛
                curl_setopt ($ curl، CURLOPT_POST، صحيح) ؛
                curl_setopt ($ curl ، CURLOPT_POSTFIELDS ، $ content ) ؛ // هذا هو المحتوى $ الذي أنشأناه في الكود أعلاه
                $ json_response = curl_exec ($ curl) ؛
                حالة $ = curl_getinfo ($ curl، CURLINFO_HTTP_CODE) ؛
                curl_close ($ curl) ؛
                الاستجابة $ = json_decode ($ json_response، true) ؛
                print_r (استجابة $) ؛