提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
1.创建实体类
代码如下(示例):
//接口配置
public class DBClass
{
public string custNo { get; set; }//客户编号 联运通提供
public string GeTYDCodeInterfaceAddress { get; set; }//接口地址
public string Timestamp { get; set; } //请求时间
public string command { get; set; }//接口编码
public string appKey { get; set; } //联运通身份识别码
public string orderNo { get; set; }//指令单编号 传我们的采购单号
}
public class LYTDataCon
{
public string custno { get; set; }//联运通提供的客户客户识别码
List<items> itemcon = new List<items>();
public List<items> items
{
get { return itemcon; }
set { itemcon = value; }
}
}
public class items
{
//订单编号,我们提交给联运通的采购单号,这里用来做查询参数
public string orderno { get; set; }
}
//提交运单 JSON必填项
public class PublicType
{
public string custNo { get; set; }//
public string orderNo { get; set; }//
public string sender { get; set; }//
public string sendCompany { get; set; }//
public string senderMobile { get; set; }//
public string consignee { get; set; }//
public string receCompany { get; set; }//
public string consigneeMobile { get; set; }//
public string endProvince { get; set; }//
public string endCity { get; set; }//
public string endArea { get; set; }//
public string receAddress { get; set; }//
public string transportType { get; set; }//
public string serviceType { get; set; }//
public string sendDate { get; set; }//
public string isReturn { get; set; }//
}
//接口下单返回消息
public class DBReturnResult
{
public string result { get; set; }
public string reason { get; set; }
public string resultCode { get; set; }
public string resultInfo { get; set; }
}
2.详细处理代码
private bool SubmitByLYT(string ID)
{
//获取数据源
DataSet ds = GetDataByDB(ID);
if (ds == null)
{
ShowInfoMsgBox("获取运单数据源失败!请确认配送承运商是否:联运通物流有限公司。");
return false;
}
//循环遍历,然后提提交运单,为什么要循环:一个配送单会有多个采购单出库数据,需求是一个采购单对应一个联运通运单号,运单号对应该运单的配送信息。
DataTable dt = ds.Tables[0];
for (int i = 0; i < dt.Rows.Count; i++)
{
//必填数据
PublicType pt = new PublicType();
pt.custNo = Convert.ToString(dt.Rows[i]["custNo"]).Trim();
pt.orderNo = Convert.ToString(dt.Rows[i]["orderNo"]).Trim();
pt.sender = Convert.ToString(dt.Rows[i]["sender"]).Trim();
pt.sendCompany = Convert.ToString(dt.Rows[i]["sendCompany"]).Trim();
pt.senderMobile = Convert.ToString(dt.Rows[i]["senderMobile"]).Trim();
pt.consignee = Convert.ToString(dt.Rows[i]["consignee"]).Trim();
pt.receCompany = Convert.ToString(dt.Rows[i]["receCompany"]).Trim();
pt.consigneeMobile = Convert.ToString(dt.Rows[i]["consigneeMobile"]).Trim();
pt.endProvince = Convert.ToString(dt.Rows[i]["endProvince"]).Trim();
pt.endCity = Convert.ToString(dt.Rows[i]["endCity"]).Trim();
pt.endArea = Convert.ToString(dt.Rows[i]["endArea"]).Trim();
pt.receAddress = Convert.ToString(dt.Rows[i]["receAddress"]).Trim();
pt.transportType = Convert.ToString(dt.Rows[i]["transportType"]).Trim();
pt.serviceType = Convert.ToString(dt.Rows[i]["serviceType"]).Trim();
pt.sendDate = Convert.ToString(dt.Rows[i]["sendDate"]).Trim();
pt.isReturn = Convert.ToString(dt.Rows[i]["isReturn"]).Trim();
//配置参数
DBClass db = new DBClass();
db.custNo = Convert.ToString(dt.Rows[i]["custNo"]).Trim();//客户编号 联运通提供
db.GeTYDCodeInterfaceAddress = Convert.ToString(dt.Rows[i]["GeTYDCodeInterfaceAddress"]).Trim();//接口地址
db.Timestamp = Convert.ToString(dt.Rows[i]["Timestamp"]).Trim();//请求时间
db.command = Convert.ToString(dt.Rows[i]["command"]).Trim();//接口编码
db.appKey = Convert.ToString(dt.Rows[i]["appKey"]).Trim();//联运通身份识别码
db.orderNo = Convert.ToString(dt.Rows[i]["orderNo"]).Trim();//指令单编号 传我们的采购单号
string LYTUrl = Convert.ToString(dt.Rows[i]["GeTYDCodeInterfaceAddress"]).Trim();
//将数据转换成JSON 后再去MD5加密 和 BASE64
string jsonParams = JsonConvert.SerializeObject(pt);
MD5 md5 = new MD5CryptoServiceProvider();
string digest = Convert.ToBase64String(md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(jsonParams + db.appKey + db.appKey)));
//生成请求参数,请求的参数要转码格式化。不转码 + %等字符会过滤掉,导致验证签名失败。
string postData =
"Timestamp=" + System.Web.HttpUtility.UrlEncode(db.Timestamp, Encoding.UTF8) +
"&command=" + System.Web.HttpUtility.UrlEncode(db.command, Encoding.UTF8) +
"&appKey=" + System.Web.HttpUtility.UrlEncode(db.appKey, Encoding.UTF8) +
"&Params=" + System.Web.HttpUtility.UrlEncode(JsonConvert.SerializeObject(pt), Encoding.UTF8) + db.appKey +
"&digest=" + System.Web.HttpUtility.UrlEncode(digest, Encoding.UTF8);
string msg = "";
if (BaseForm.PostData(clsFunc.pDC.GetDtUser(), GloabParam.Rows[0]["ServerAddr"].ToString(), "LYTXD", LYTUrl, postData, "application/x-www-form-urlencoded;", null, out msg))
{
DBReturnResult backResult = JsonConvert.DeserializeObject<DBReturnResult>(msg);
if (backResult == null || backResult.result == "false")
{
ShowInfoMsgBox("提交联运通失败!" + backResult.reason);
return false;
}
else
{
// 这里可以直接返回成功消息即可。我的需求需要再请求下单后,根据单号查询运单的一些基本信息,下一篇展示
// 请求提交的运单号,返回联运通运单数据,并保存相关字段数据到数据表。
//if (SaveResultData( pt.custNo, pt.orderNo, db.Timestamp, db.appKey, "CUSTCHECKTRACKING", LYTUrl))
//{
// //SaveDBResultData(ID, backResult);
// //ShowInfoMsgBox("保存成功!");
//}
}
}
else
{
ShowInfoMsgBox("提交失败!" + msg);
return false;
}
}
return true;
}
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。