C# 调用DHL查询预估运费的rest+json接口

C# 调用DHL查询预估运费的rest+json接口

本文不介绍原理,直接上代码
申请好username和password后开始接入:
首先创建参数实体:
ServiceHeader.cs
RequestedShipment.cs
Packages.cs
Billing.cs

测试环境接口:https://wsbexpress.dhl.com/rest/sndpt/RateRequest

	private readonly string _baseURL;

	private readonly string _username;

	private readonly string _password;

	public string LastJSONRequest
	{
		get;
		set;
	}

	public string LastJSONResponse
	{
		get;
		set;
	}

	public string LastHTTPRequest
	{
		get;
		set;
	}

	public string LastHTTPResponse
	{
		get;
		set;
	}

	public string LastRateQueryJSONRequest
	{
		get;
		set;
	}

	public string LastRateQueryJSONResponse
	{
		get;
		set;
	}

	public string LastRateQueryHTTPRequest
	{
		get;
		set;
	}

	public string LastRateQueryHTTPResponse
	{
		get;
		set;
	}

	public string LastShipJSONRequest
	{
		get;
		set;
	}

	public string LastShipJSONResponse
	{
		get;
		set;
	}

	public string LastShipHTTPRequest
	{
		get;
		set;
	}

	public string LastShipHTTPResponse
	{
		get;
		set;
	}

	public string LastNewPickupJSONRequest
	{
		get;
		set;
	}

	public string LastNewPickupJSONResponse
	{
		get;
		set;
	}

	public string LastNewPickupHTTPRequest
	{
		get;
		set;
	}

	public string LastNewPickupHTTPResponse
	{
		get;
		set;
	}

	public string LastDeletePickupJSONRequest
	{
		get;
		set;
	}

	public string LastDeletePickupJSONResponse
	{
		get;
		set;
	}

	public string LastDeletePickupHTTPRequest
	{
		get;
		set;
	}

	public string LastDeletePickupHTTPResponse
	{
		get;
		set;
	}

	public string LastTrackingJSONRequest
	{
		get;
		set;
	}

	public string LastTrackingJSONResponse
	{
		get;
		set;
	}

	public string LastTrackingHTTPRequest
	{
		get;
		set;
	}

	public string LastTrackingHTTPResponse
	{
		get;
		set;
	}

	public string LastEPoDJSONRequest
	{
		get;
		set;
	}

	public string LastEPoDJSONResponse
	{
		get;
		set;
	}

	public string LastEPoDHTTPRequest
	{
		get;
		set;
	}

	public string LastEPoDHTTPResponse
	{
		get;
		set;
	}

	public myapi(string username, string password, string baseUrl)
	{
		this._username = username;
		this._password = password;
		this._baseURL = baseUrl;
	}

	public RateQueryResponse RateQuery(RateQueryRequest rqr)
	{
		List<ValidationResult> list = Common.Validate<RateQueryRequest>(ref rqr);
		bool flag = list.Any<ValidationResult>();
		if (flag)
		{
			throw new MyDHLAPIValidationException(list);
		}
		this.LastJSONRequest = JsonConvert.SerializeObject(rqr, Formatting.Indented);
		this.LastRateQueryJSONRequest = this.LastJSONRequest;
		this.LastJSONResponse = this.SendRequestAndReceiveResponse(this.LastJSONRequest, "RateRequest");
		this.LastRateQueryJSONResponse = this.LastJSONResponse;
		this.LastRateQueryHTTPRequest = this.LastHTTPRequest;
		this.LastRateQueryHTTPResponse = this.LastHTTPResponse;
		RateQueryResponse result;
		try
		{
			List<string> errors = new List<string>();
			result = JsonConvert.DeserializeObject<RateQueryResponse>(this.LastJSONResponse, new JsonSerializerSettings
			{
				Error = delegate (object sender, Newtonsoft.Json.Serialization.ErrorEventArgs args)
				{
					errors.Add(args.ErrorContext.Error.Message);
					args.ErrorContext.Handled = true;
				}
			});
		}
		catch
		{
			result = new RateQueryResponse();
		}
		return result;
	}
			
			public string SendRequestAndReceiveResponse(string req, string endpoint)
	{
		WebRequest webRequest = WebRequest.Create(new Uri(this._baseURL + "/" + endpoint));
		webRequest.Credentials = new NetworkCredential(this._username, this._password);
		webRequest.ContentType = "application/json";
		webRequest.PreAuthenticate = true;
		webRequest.UseDefaultCredentials = false;
		webRequest.Method = "POST";
		string str = Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes(this._username + ":" + this._password));
		webRequest.Headers.Add("Authorization", "Basic " + str);
		using (StreamWriter streamWriter = new StreamWriter(webRequest.GetRequestStream(), Encoding.UTF8))
		{
			streamWriter.Write(req);
			streamWriter.Flush();
			streamWriter.Close();
		}
		string result = string.Empty;
		try
		{
			WebResponse response = webRequest.GetResponse();
			using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
			{
				result = streamReader.ReadToEnd();
			}
		}
		catch (Exception)
		{
			throw;
		}
		return result;
	}

调用方法:
private string apiUserName = 申请的username;
private string apiPassword = 申请的password;
private string apiBaseUrl = “https://wsbexpress.dhl.com/rest/sndpt”;

    public string LastJSONResponse { get; private set; }
    protected void Page_Load(object sender, EventArgs e)
    {
        var myDhlApi = new myapi(apiUserName, apiPassword, apiBaseUrl);
        var resp = myDhlApi.RateQuery(new RateQueryRequest
        {
            RateRequest = new RateRequest
            {
                Request = new Request
                {
                    ServiceHeader = new ServiceHeader
                    {
                        MessageReference = "TEST109311111112222222229876",
                        MessageTime = new DateTime(2019, 9, 3, 15, 7, 35),
                        Plugin = "MyDHL API_TEST",
                        PluginVersion = "1.0",
                        ShippingSystemPlatform = "MyDHL API_TEST",
                        ShippingSystemPlatformVersion = "1.0",
                        WebstorePlatform = "MyDHL API_TEST",
                        WebstorePlatformVersion = "1.0"
                    }
                },
                ClientDetails = null,
                RequestedShipment = new RequestedShipment
                {
                    DropOffType = Enums.DropOffType.RegularPickup,
                    NextBusinessDay = Enums.YesNo.Yes,
                    Ship = new Ship
                    {
                        Recipient = new MyDHLAPI_REST_Library.Objects.RateQuery.Address
                        {
                            City = "KAARST",
                            CountryCode = "DE",
                            PostalCode = "41564",
                            StreetLines = "Main Street"
                        },
                        Shipper = new MyDHLAPI_REST_Library.Objects.RateQuery.Address()
                        {
                            City = "Beijing",
                            CountryCode = "CN",
                            PostalCode = "100017",
                            StreetLines = "River House"
                        }
                    },
                    Packages = new Packages
                    {
                        RequestedPackages = new List<RequestedPackages>
                        {

                            new RequestedPackages
                            {
                                PieceNumber=1,
                                Weight = new Weight{ Value = 10},
                                Dimensions = new Dimensions{ Height = 1, Length = 3, Width = 2}
                            }
                        }
                    },
                    ShipTimestamp = new DateTime(2019, 9, 3, 19, 1, 0),
                    UnitOfMeasurement = Enums.UnitOfMeasurement.SI,
                    Content = Enums.ShipmentType.NonDocuments,
                    DeclaredValue = 100,
                    DeclaredValueCurrencyCode = "USD",
                    Billing = new Billing
                    {
                        BillingAccountNumber = "602965196",
                        ShipperAccountNumber = "602965196",
                        ShippingPaymentType = Enums.PaymentTypes.Shipper
                    },
                    PaymentInfo = Enums.TermsOfTrade.DAP,
                    NetworkTypeCode = Enums.NetworkTypeCode.All,
                    CustomerAgreementInd = Enums.YesNo.No,
                    ValidateReadyTime = Enums.YesNo.No
                }
            }
        }); ;
        var names = resp;
        var namesss = JsonConvert.SerializeObject(resp);
        Response.Write(JsonConvert.SerializeObject(resp));
    }

传递的json参数格式:
{
“RateRequest”: {
“ClientDetails”: “”,
“Request”: {
“ServiceHeader”: {
“MessageTime”: “2019-09-03T15:07:35”,
“MessageReference”: “TEST109311111112222222229876”,
“WebstorePlatform”: “MyDHL API_TEST”,
“WebstorePlatformVersion”: “1.0”,
“ShippingSystemPlatform”: “MyDHL API_TEST”,
“ShippingSystemPlatformVersion”: “1.0”,
“PlugIn”: “MyDHL API_TEST”,
“PlugInVersion”: “1.0”
}
},
“RequestedShipment”: {
“DropOffType”: “REGULAR_PICKUP”,
“NextBusinessDay”: “Y”,
“ShipTimestamp”: “2019-09-03T19:01:00 G9T+08:00”,
“UnitOfMeasurement”: “SI”,
“Content”: “NON_DOCUMENTS”,
“DeclaredValue”: 100.0,
“DeclaredValueCurrecyCode”: “USD”,
“PaymentInfo”: “DAP”,
“RequestValueAddedServices”: “N”,
“NetworkTypeCode”: “AL”,
“CustomerAgreementInd”: “N”,
“ValidateReadyTime”: “N”,
“Ship”: {
“Shipper”: {
“StreetLines”: “River House”,
“City”: “BEIJING”,
“PostalCode”: “100017”,
“CountryCode”: “CN”
},
“Recipient”: {
“StreetLines”: “Main Street”,
“City”: “OSNABRUECK”,
“PostalCode”: “41564”,
“CountryCode”: “DE”
}
},
“Packages”: {
“RequestedPackages”: [{
“@number”: 0,
“Weight”: {
“Value”: 10.0
},
“Dimensions”: {
“Length”: 3.0,
“Width”: 2.0,
“Height”: 1.0
}
}]
},
“Billing”: {
“ShipperAccountNumber”: “602965196”,
“ShippingPaymentType”: “S”,
“BillingAccountNumber”: “602965196”
}

	}
}

}

返回的json字符串:
{
“RateResponse”: {
“Provider”: [
{
“@code”: “DHL”,
“ServiceHeader”: {
“MessageTime”: “2020-07-04T10:20:41.094+00:00”,
“MessageReference”: “TEST109311111112222222229876”,
“ServiceInvocationID”: “20200704102041_b82c_b6c4a0a5-48d4-459f-9c11-073180add382”
},
“Notification”: [
{
“@code”: “0”,
“Message”: null
}
],
“Service”: {
“@type”: “Y”,
“TotalNet”: {
“Currency”: “CNY”,
“Amount”: 2000.81
},
“Charges”: {
“Currency”: “CNY”,
“Charge”: [
{
“ChargeType”: “EXPRESS 12:00”,
“ChargeAmount”: 1626.6
},
{
“ChargeCode”: “YK”,
“ChargeType”: “12:00 PREMIUM”,
“ChargeAmount”: 69.0
},
{
“ChargeCode”: “FF”,
“ChargeType”: “FUEL SURCHARGE”,
“ChargeAmount”: 305.21
}
]
},
“DeliveryTime”: “2019-09-09T12:00:00”,
“CutoffTime”: “2019-09-03T20:00:00”,
“NextBusinessDayInd”: “N”
}
}
]
}
}

示例代码下载:https://download.csdn.net/download/xmg1314/12576722

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值