5.1.1 Create Shipments (C#)
Create Shipment
Sample source code to create shipment in a Console Application (requires Newtonsoft.JSON from NuGet)
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using Newtonsoft.Json;
namespace PrinshipShipment
{
public class PersonInfo
{
public string Name { get; set; }
public string ContactPerson { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string Address3 { get; set; }
public string PostCode { get; set; }
public string City { get; set; }
public string State { get; set; }
public string CountryCode { get; set; }
public string StationCode { get; set; }
public string Phone1 { get; set; }
public string Phone2 { get; set; }
public string MobilePhone { get; set; }
public string Fax { get; set; }
public string Email { get; set; }
public string Url { get; set; }
}
public class ItemInfo
{
public string Description { get; set; }
public int Quantity { get; set; }
public decimal UnitValue { get; set; }
public string HSCode { get; set; }
public string SKU { get; set; }
public string Url { get; set; }
}
public class PackageInfo
{
public string PackageReference { get; set; }
public float Length { get; set; }
public float Width { get; set; }
public float Height { get; set; }
public float ActualWeight { get; set; }
}
public class ShipmentDetails
{
public PersonInfo Shipper { get; set; }
public PersonInfo Consignee { get; set; }
public List<ItemInfo> Items { get; set; }
public List<PackageInfo> Packages { get; set; }
public DateTime ShipmentDate { get; set; }
public String TOSMode { get; set; }
public String ReferenceNo { get; set; }
public String ReferenceSource { get; set; }
public String PackageType { get; set; }
public String WeightType { get; set; }
public String CurrencyCode { get; set; }
public String Remarks { get; set; }
public string HawbNo { get; set; }
}
public class ShipmentRequest
{
public List<ShipmentDetails> Shipments { get; set; }
}
public class APIHelper
{
const string PRODUCTION_URL = "https://apiv2.unixus.com.my/";
const string SANDBOX_URL = "https://sandbox-apiv2.unixus.com.my/";
const string myRefreshToken = "88888888"; // Replace with your Refresh Token
static string api_url = SANDBOX_URL;
public static string GetAccessToken()
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create(api_url + "Token/Refresh");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = "{ 'RefreshToken' : '" + myRefreshToken + "'}'";
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
var token = "";
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
try
{
string result = streamReader.ReadToEnd();
dynamic obj = JsonConvert.DeserializeObject<object>(result);
token = obj.AccessToken;
}
catch (System.Exception ex)
{
Console.WriteLine(string.Format("Error occurred getting AccessToken: {0}", ex.Message));
}
}
return token;
}
public static void CreateShipment()
{
var shipment = new ShipmentDetails();
// Create Sender Info
PersonInfo sender = new PersonInfo();
sender.Name = "Unixus Solutions Sdn. Bhd.";
sender.ContactPerson = "IT Department";
sender.Address1 = "46-02 JALAN TUN ABDUL RAZAK,";
sender.Address2 = "SUSUR 1,";
sender.Address3 = string.Empty;
sender.PostCode = "80000";
sender.City = "JOHOR BAHRU";
sender.State = "JOHOR";
sender.CountryCode = "MY";
sender.StationCode = "";
sender.Phone1 = "607-2222668";
sender.Phone2 = "";
sender.MobilePhone = "";
sender.Fax = "";
sender.Email = "[email protected]";
sender.Url = "";
shipment.Shipper = sender;
// Create Consignee Info
PersonInfo consignee = new PersonInfo();
consignee.Name = "ABC Sdn Bhd.";
consignee.ContactPerson = "Mr. Ng";
consignee.Address1 = "Test Address 1";
consignee.Address2 = "Test Address 2";
consignee.Address3 = string.Empty;
consignee.PostCode = "70000";
consignee.City = "Seremban";
consignee.State = "Negeri Sembilan";
consignee.CountryCode = "MY";
consignee.StationCode = "";
consignee.Phone1 = "60-7-2222668";
consignee.Phone2 = "";
consignee.MobilePhone = "";
consignee.Fax = "";
consignee.Email = "[email protected]";
consignee.Url = "http://www.lwe.asia";
shipment.Consignee = consignee;
// Create Item Info
ItemInfo itemInfo = new ItemInfo();
itemInfo.Description = "item1";
itemInfo.Quantity = 10;
itemInfo.UnitValue = 12;
itemInfo.HSCode = "001";
itemInfo.SKU = "sku001";
itemInfo.Url = "url_item1";
shipment.Items = new List<ItemInfo>();
shipment.Items.Add(itemInfo);
// Create Package Info
PackageInfo packageInfo = new PackageInfo();
packageInfo.PackageReference = "pkg1";
packageInfo.Length = 10.0f;
packageInfo.Width = 20.0f;
packageInfo.Height = 30.0f;
packageInfo.ActualWeight = 40.0f;
shipment.Packages = new List<PackageInfo>();
shipment.Packages.Add(packageInfo);
// Fill in the rest of the shipment details
shipment.ShipmentDate = DateTime.Now;
shipment.TOSMode = "MY-E-EXPRESS";
shipment.ReferenceNo = "123456";
shipment.PackageType = "SPX";
shipment.WeightType = "KG";
shipment.CurrencyCode = "MYR";
shipment.Remarks = "Fragile shipment, please be careful.";
// Create request object
var shipmentRequest = new ShipmentRequest();
shipmentRequest.Shipments = new List<ShipmentDetails>();
shipmentRequest.Shipments.Add(shipment);
var result = "";
try
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create(api_url + "shipment/v2/Create");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Headers.Add("X-Version", "1");
// Get Access Token
httpWebRequest.Headers.Add("Authorization", "Bearer " + GetAccessToken());
httpWebRequest.Method = "POST";
// Call Request
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = JsonConvert.SerializeObject(shipmentRequest);
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
result = streamReader.ReadToEnd();
}
dynamic obj = JsonConvert.DeserializeObject<object>(result);
if (obj.Summary.Success > 0)
{
// Successful
Console.WriteLine("Successfully created shipment");
foreach (dynamic ship in obj.ShipmentsResponse)
{
Console.WriteLine("HawbNo: " + ship.ShipmentDetails.HawbNo);
}
}
else
{
// Failed, print error
Console.WriteLine("Create shipment failed");
foreach (dynamic err in obj.Errors)
{
Console.WriteLine(string.Format("Error Message: {0}", err.ErrorMessage));
}
}
}
catch (Exception ex)
{
Console.WriteLine(string.Format("Error occurred creating Shipment Request: {0}", ex.Message));
}
}
}
class Program
{
static void Main(string[] args)
{
APIHelper.CreateShipment();
}
}