@金蝶调用webapi实例
斜体样式
//工具类Apiconfig
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace KingdeeCodeWx
{
public class ApiConfig
{
public string DbId = string.Empty;
public string UserName = string.Empty;
public string Password = string.Empty;
public int LanId = 2052;
public string UrlBase = string.Empty;
public ApiConfig(string urlBase, string dbId, string userName, string password, int lanId)
{
if (urlBase.EndsWith("/") == false)
{
UrlBase = urlBase + "/";
}
else
{
this.UrlBase = urlBase;
}
this.DbId = dbId;
this.UserName = userName;
this.Password = password;
this.LanId = lanId;
}
public ApiConfig(string urlBase, string dbId, string userName, string password) : this(urlBase, dbId, userName, password, 2052)
{
//this.UrlBase = urlBase;
//this.DbId = dbId;
//this.UserName = userName;
//this.Password = password;
//this.LanId = 2052;
}
public string Format()
{
return string.Format("[UrlBase]:{0}[DbId]:{1}[UserName]:{2}[Password]:{3}", UrlBase, DbId, UserName, Password);
}
}
public class ApiAppConfig : ApiConfig
{
public string AppId = string.Empty;
public ApiAppConfig(string urlBase, string dbId, string userName, string password, string appId, int lanId)
: base(urlBase, dbId, userName, password, lanId)
{
this.AppId = appId;
}
public ApiAppConfig(string urlBase, string dbId, string userName, string password, string appId) : this(urlBase, dbId, userName, password, appId, 2052)
{
//this.UrlBase = urlBase;
//this.DbId = dbId;
//this.UserName = userName;
//this.Password = password;
//this.LanId = 2052;
}
}
}
//工具类
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace KingdeeCodeWx
{
public static class ApiUtils
{
public static bool LoginByAppSecret(ApiAppConfig apiConfig)
{
HttpClient httpClient = new HttpClient();
httpClient.Url = apiConfig.UrlBase + “Kingdee.BOS.WebApi.ServicesStub.AuthService.LoginByAppSecret.common.kdsvc”;
List Parameters = new List();
Parameters.Add(apiConfig.DbId);//帐套Id
Parameters.Add(apiConfig.UserName);//用户名
Parameters.Add(apiConfig.AppId);//appid
Parameters.Add(apiConfig.Password);//密码
Parameters.Add(apiConfig.LanId);
httpClient.Content = JsonConvert.SerializeObject(Parameters);
string loginResult = httpClient.AsyncRequest();
if (string.IsNullOrWhiteSpace(loginResult))
{
return false;
}
else
{
if (loginResult.Contains(“IsSuccessByAPI”))
{
return JObject.Parse(loginResult)[“IsSuccessByAPI”].Value();
}
else
{
return JObject.Parse(loginResult)[“LoginResultType”].Value() == 1;
}
}
}
public static string LoginByAppSecretRetResult(ApiAppConfig apiConfig)
{
HttpClient httpClient = new HttpClient();
httpClient.Url = apiConfig.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.AuthService.LoginByAppSecret.common.kdsvc";
List<object> Parameters = new List<object>();
Parameters.Add(apiConfig.DbId);//帐套Id
Parameters.Add(apiConfig.UserName);//用户名
Parameters.Add(apiConfig.AppId);//appid
Parameters.Add(apiConfig.Password);//密码
Parameters.Add(apiConfig.LanId);
httpClient.Content = JsonConvert.SerializeObject(Parameters);
return httpClient.AsyncRequest();
}
public static bool LoginHttp(ApiConfig apiConfig, out string loginResult)
{
HttpClient httpClient = new HttpClient();
httpClient.Url = apiConfig.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc";
List<object> Parameters = new List<object>();
Parameters.Add(apiConfig.DbId);//帐套Id
Parameters.Add(apiConfig.UserName);//用户名
Parameters.Add(apiConfig.Password);//密码
Parameters.Add(apiConfig.LanId);
httpClient.Content = JsonConvert.SerializeObject(Parameters);
loginResult = httpClient.AsyncRequest();
if (string.IsNullOrWhiteSpace(loginResult))
{
return false;
}
else
{
if (loginResult.Contains("IsSuccessByAPI"))
{
return JObject.Parse(loginResult)["IsSuccessByAPI"].Value<bool>();
}
else
{
return JObject.Parse(loginResult)["LoginResultType"].Value<int>() == 1;
}
}
}
public static string LoginHttpRetResult(ApiConfig apiConfig)
{
HttpClient httpClient = new HttpClient();
httpClient.Url = apiConfig.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc";
List<object> Parameters = new List<object>();
Parameters.Add(apiConfig.DbId);//帐套Id
Parameters.Add(apiConfig.UserName);//用户名
Parameters.Add(apiConfig.Password);//密码
Parameters.Add(apiConfig.LanId);
httpClient.Content = JsonConvert.SerializeObject(Parameters);
return httpClient.AsyncRequest();
}
public static string GetErrorMsg(string opResultStr)
{
string err = string.Empty;
if (string.IsNullOrWhiteSpace(opResultStr))
{
return err;
}
JObject resOpObj = JObject.Parse(opResultStr);
JObject resObj = resOpObj["Result"] as JObject;
JObject statusObj = resObj["ResponseStatus"] as JObject;
string isSuccessStr = Convert.ToString(statusObj["IsSuccess"]);
if (string.Compare(isSuccessStr, "true", true) != 0)
{
JArray errs = statusObj["Errors"] as JArray;
if (errs != null && errs.Count > 0)
{
JObject defErr = errs[0] as JObject;
err = Convert.ToString(defErr["Message"]);
}
else
{
err = opResultStr;
}
}
return err;
}
public static object BuildApiJsonResult(bool success, string msg = "", string errMsg = "", string data = "", string id = "", string billNO = "")
{
JObject result = new JObject();
result["IsSuccess"] = success;
result["Errors"] = string.Empty;
result["Message"] = msg;
result["Datas"] = data;
result["ID"] = id;
result["BillNO"] = billNO;
result["BillStatus"] = billNO;
return result;
}
public static object BuildCloudApiJsonFailResult(List<string> errMsg)
{
JObject rst = new JObject();
JObject result = new JObject();
JObject responseStatus = new JObject();
responseStatus["IsSuccess"] = false;
JArray errArray = new JArray();
if (errMsg != null && errMsg.Count > 0)
{
foreach (var errMsgItem in errMsg)
{
JObject errMsgItemJobj = new JObject();
errMsgItemJobj["Message"] = errMsgItem;
errArray.Add(errMsgItemJobj);
}
}
responseStatus["Errors"] = errArray;
result["ResponseStatus"] = responseStatus;
rst["Result"] = result;
return rst;
}
public static object BuildCloudApiJsonSimpleSuccessResult()
{
JObject rst = new JObject();
JObject result = new JObject();
JObject responseStatus = new JObject();
responseStatus["IsSuccess"] = true;
JArray errArray = new JArray();
responseStatus["Errors"] = errArray;
result["ResponseStatus"] = responseStatus;
rst["Result"] = result;
return rst;
}
/// <summary>
/// 新增、修改接口
/// </summary>
/// <param name="config"></param>
/// <param name="formId"></param>
/// <param name=""></param>
/// <returns></returns>
public static string Save(ApiConfig config, string formId, JObject model)
{
return ApiUtils.Save(config, formId, model, true);
}
/// <summary>
/// 新增、修改接口
/// </summary>
/// <param name="config"></param>
/// <param name="formId"></param>
/// <param name=""></param>
/// <returns></returns>
public static string Save(ApiConfig config, string formId, JObject model, bool isAutoSubmitAndAudit)
{
HttpClient httpClient = new HttpClient();
httpClient.Url = config.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc";
List<object> Parameters = new List<object>();
Parameters.Add(formId);
JObject Json = new JObject();
// Json.Add("IsAutoSubmitAndAudit", isAutoSubmitAndAudit);
// Json.Add("IsAutoSubmitAndAudit", true);
Json.Add("IsAutoSubmitAndAudit", false);
Json.Add("Model", model);
Parameters.Add(Json.ToString());
httpClient.Content = Newtonsoft.Json.JsonConvert.SerializeObject(Parameters);
string result = httpClient.AsyncRequest();
return result;
}
public static string Submit(ApiConfig config, string formId, List<string> billIds)
{
HttpClient httpClient = new HttpClient();
httpClient.Url = config.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Submit.common.kdsvc";
List<object> Parameters = new List<object>();
Parameters.Add(formId);
JObject Json = new JObject();
Json.Add("Ids", string.Join(",", billIds));
Parameters.Add(Json.ToString());
httpClient.Content = Newtonsoft.Json.JsonConvert.SerializeObject(Parameters);
string result = httpClient.AsyncRequest();
return result;
}
public static string Audit(ApiConfig config, string formId, List<string> billIds)
{
HttpClient httpClient = new HttpClient();
httpClient.Url = config.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit.common.kdsvc";
List<object> Parameters = new List<object>();
Parameters.Add(formId);
JObject Json = new JObject();
Json.Add("Ids", string.Join(",", billIds));
Parameters.Add(Json.ToString());
httpClient.Content = Newtonsoft.Json.JsonConvert.SerializeObject(Parameters);
string result = httpClient.AsyncRequest();
return result;
}
public static string Submit(ApiConfig config, string formId, List<string> billNos, JObject model)
{
HttpClient httpClient = new HttpClient();
httpClient.Url = config.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Submit.common.kdsvc";
List<object> Parameters = new List<object>();
Parameters.Add(formId);
JObject Json = new JObject();
JArray arr = new JArray();
foreach (var item in billNos)
{
arr.Add(item);
}
Json.Add("Model", model);
Parameters.Add(Json.ToString());
httpClient.Content = Newtonsoft.Json.JsonConvert.SerializeObject(Parameters);
string result = httpClient.AsyncRequest();
return result;
}
public static string Delete(ApiConfig config, string formId, List<string> billIds)
{
HttpClient httpClient = new HttpClient();
httpClient.Url = config.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Delete.common.kdsvc";
List<object> Parameters = new List<object>();
Parameters.Add(formId);
//Json字串
JObject Json = new JObject();
Json.Add("CreateOrgId", 0);
//JArray arr = new JArray();
//foreach (var item in billIds)
//{
// arr.Add(Convert.ToInt64(item));
//}
Json.Add("Ids", string.Join(",", billIds));
Parameters.Add(Json.ToString());
httpClient.Content = Newtonsoft.Json.JsonConvert.SerializeObject(Parameters);
string result = httpClient.AsyncRequest();
return result;
}
public static string Audit(ApiConfig config, string formId, List<string> billNos, JObject model)
{
HttpClient httpClient = new HttpClient();
httpClient.Url = config.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit.common.kdsvc";
List<object> Parameters = new List<object>();
Parameters.Add(formId);
JObject Json = new JObject();
JArray arr = new JArray();
foreach (var item in billNos)
{
arr.Add(item);
}
Json.Add("Model", model);
Parameters.Add(Json.ToString());
httpClient.Content = Newtonsoft.Json.JsonConvert.SerializeObject(Parameters);
string result = httpClient.AsyncRequest();
return result;
}
public static bool CheckApiOpIsSuccess(string resultString)
{
bool rst = false;
if (string.IsNullOrWhiteSpace(resultString))
{
return false;
}
try
{
JObject rootObj = JObject.Parse(resultString);
JObject restObj = rootObj["Result"] as JObject;
JObject responseStatus = restObj["ResponseStatus"] as JObject;
return string.Compare(Convert.ToString(responseStatus["IsSuccess"]), "True", true) == 0;
}
catch
{
rst = false;
}
return rst;
}
// public static string ExecuteBillQuery(ApiConfig config, string formId, string fieldKeys, string filter)
public static string ExecuteBillQuery(ApiConfig config, string formId, string fieldKeys, string filter)
{
HttpClient httpClient = new HttpClient();
httpClient.Url = config.UrlBase + "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc";
List<object> Parameters = new List<object>();
JObject Json = new JObject();
Json.Add("FormId", formId);
//Json.Add("FieldKeys", "FBILLNO,FMATERIALID.FNAME,FEntity_FentryId");
Json.Add("FieldKeys", fieldKeys);
//Json.Add("FilterString", "FBILLNO='CGRK00024'");
Json.Add("FilterString", filter); //Json.Add("FilterString", "fnumber='XXXX' ");
//Json.Add("FieldKeys", "fnumber");
Parameters.Add(Json.ToString());
httpClient.Content = Newtonsoft.Json.JsonConvert.SerializeObject(Parameters);
string result = httpClient.AsyncRequest();
var ass = JArray.Parse(result);
return result;
}
public static long TryGetExeQueryBillId(string apiQueryStr)
{
int rst = -1;
if (string.IsNullOrWhiteSpace(apiQueryStr))
{
return rst;
}
try
{
//[[100080]]
JArray arr = JArray.Parse(apiQueryStr);
JArray innerArr = arr[0] as JArray;
string idStr = Convert.ToString(innerArr[0]);
return Convert.ToInt64(idStr);
}
catch
{
return rst;
}
}
// {
// "Result": {
// "ResponseStatus": {
// "IsSuccess": true,
// "Errors": [],
// "SuccessEntitys": [{
// "Id": 110080,
// "Number": "CGRK00064",
// "DIndex": 0
// }],
// "SuccessMessages": [],
// "MsgCode": 0
// },
// "Id": 110080,
// "Number": "CGRK00064",
// "NeedReturnData": [{}]
// }
//}
//{
// "Result": {
// "ResponseStatus": {
// "ErrorCode": 500,
// "IsSuccess": false,
// "Errors": [{
// "FieldName": "FPriceUnitID",
// "Message": "单据体“明细信息”第1行字段“计价单位”是必填项",
// "DIndex": 0
// }, {
// "FieldName": "FRemainInStockUnitId",
// "Message": "单据体“明细信息”第1行字段“采购单位”是必填项",
// "DIndex": 0
// }, {
// "FieldName": "FMaterialId",
// "Message": "单据体“明细信息”第1行字段“物料编码”是必填项",
// "DIndex": 0
// }, {
// "FieldName": "",
// "Message": "第1行分录,计价数量必须大于0",
// "DIndex": 0
// }, {
// "FieldName": "",
// "Message": "第1行分录,采购数量必须大于0",
// "DIndex": 0
// }, {
// "FieldName": "",
// "Message": "第1行分录,库存单位只能为与基本单位为固定换算的单位",
// "DIndex": 0
// }, {
// "FieldName": "",
// "Message": "单据货主和保管者必须至少有一项与库存组织一致",
// "DIndex": 0
// }],
// "SuccessEntitys": [],
// "SuccessMessages": [],
// "MsgCode": 0
// },
// "Id": "",
// "NeedReturnData": [{}]
// }
//}
}
public static class Extends
{
public static bool IsSuccess(this JObject obj)
{
if (obj == null)
{
return false;
}
return string.Compare(Convert.ToString(obj["IsSuccess"]), "true", true) == 0;
}
public static string GetLogStr(this JObject obj)
{
if (obj == null)
{
return string.Empty;
}
string rst = Convert.ToString(obj).Replace(" ", "").Replace(Environment.NewLine, "");
return rst;
}
}
}
//工具类
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
namespace KingdeeCodeWx
{
public class HttpClient
{
/// <summary>
/// Seivice URL
/// </summary>
public string Url { get; set; }
/// <summary>
/// 内容
/// </summary>
public string Content { get; set; }
/// <summary>
/// Cookie,保证登录后,所有访问持有一个Cookie;
/// </summary>
static CookieContainer Cookie = new CookieContainer();
/// <summary>
/// HTTP访问
/// </summary>
public string AsyncRequest()
{
HttpWebRequest httpRequest = HttpWebRequest.Create(Url) as HttpWebRequest;
httpRequest.Method = "POST";
httpRequest.ContentType = "application/json";
httpRequest.CookieContainer = Cookie;
httpRequest.Timeout = 1000 * 60 * 10;//10min
using (Stream reqStream = httpRequest.GetRequestStream())
{
JObject jObj = new JObject();
jObj.Add("format", 1);
jObj.Add("useragent", "ApiClient");
jObj.Add("rid", Guid.NewGuid().ToString().GetHashCode().ToString());
jObj.Add("parameters", Content);
jObj.Add("timestamp", DateTime.Now);
jObj.Add("v", "1.0");
string sContent = jObj.ToString();
var bytes = UnicodeEncoding.UTF8.GetBytes(sContent);
reqStream.Write(bytes, 0, bytes.Length);
reqStream.Flush();
}
using (var repStream = httpRequest.GetResponse().GetResponseStream())
{
using (var reader = new StreamReader(repStream))
{
return ValidateResult(reader.ReadToEnd());
}
}
}
private static string ValidateResult(string responseText)
{
if (responseText.StartsWith("response_error:"))
{
return responseText.TrimStart("response_error:".ToCharArray());
}
return responseText;
}
}
}
//查询 及其数据格式转换
public string select() {
//需要查询的数据
StringBuilder FieldKeys = new StringBuilder();
//单据编号
FieldKeys.Append(“FBillNo,”);
//单据类型
FieldKeys.Append(“FBillTypeID,”);
//日期
FieldKeys.Append(“FDate,”);
//销售组织
FieldKeys.Append(“FSaleOrgId.Fnumber,”);
FieldKeys.Append(“FSaleOrgId.Fname,”);
//发货组织
FieldKeys.Append(“FStockOrgId.Fnumber,”);
FieldKeys.Append(“FStockOrgId.Fname,”);
//客户
FieldKeys.Append(“FCustomerID.Fnumber,”);
FieldKeys.Append(“FCustomerID.Fname,”);
//仓管员
FieldKeys.Append(“FStockerID.Fnumber,”);
FieldKeys.Append(“FStockerID.Fname,”);
//物料
FieldKeys.Append(“FMaterialID.Fnumber,”);
FieldKeys.Append(“FMaterialName,”);
//仓库
FieldKeys.Append(“FStockID.Fnumber,”);
FieldKeys.Append(“FStockID.Fname,”);
//仓位
FieldKeys.Append(“FEntity_FENTRYID,”);
FieldKeys.Append(“FEntrynote,”);
//单价
FieldKeys.Append(“FPrice,”);
//实发数量
FieldKeys.Append(“FRealQty,”);
//应发数量
FieldKeys.Append(“FMustQty,”);
//金额
FieldKeys.Append(“FAmount,”);
//结算组织
FieldKeys.Append(“FSettleOrgID.Fnumber,”);
FieldKeys.Append(“FSettleOrgID.Fname,”);
//结算币别
FieldKeys.Append(“FSettleCurrID.Fnumber,”);
FieldKeys.Append(“FSettleCurrID.Fname,”);
//库存单位
FieldKeys.Append(“FUnitID.Fnumber,”);
FieldKeys.Append(“FUnitID.Fname,”);
//货主
FieldKeys.Append(“FOwnerID.Fnumber,”);
FieldKeys.Append(“FOwnerID.Fname,”);
//FID FEntity_FENTRYID 单据主键,分录主键
FieldKeys.Append(“FID,”);
//含税单价
FieldKeys.Append(“FTaxPrice,”);
FieldKeys.Append(“FAmount_LC,”);
// FieldKeys.Append(“FEntity_FENTRYID,”);
// FieldKeys.Append(“FSTOCKLOCID.FF100001.Fnumber,”);
// FieldKeys.Append(“FSTOCKLOCID.FF100002.Fnumber,”);
FieldKeys.ToString();
//formid
string formid = “SAL_OUTSTOCK”;
//调用查询方法
string result = ApiUtils.ExecuteBillQuery(Login.apiinfo, formid, FieldKeys.ToString(),string.Empty);
//开始对查询出来的数据进行处理
JArray json = JArray.Parse(result);
string jsonresult = “[”;
List list2jo = new List();
foreach (JArray item in json)
{
JObject jsonlist = new JObject();
jsonlist[“FBillNo”] = item[0].ToString();
jsonlist[“FBillTypeID”] = item[1].ToString();
jsonlist[“FDate”] = item[2].ToString();
jsonlist[“FSaleOrgIdFnumber”] = item[3].ToString();
jsonlist[“FSaleOrgIdFname”] = item[4].ToString();
jsonlist["FStockOrgIdFnumber"] = item[5].ToString();
jsonlist["FStockOrgIdFname"] = item[6].ToString();
jsonlist["FCustomerIDFnumber"] = item[7].ToString();
jsonlist["FCustomerIDFname"] = item[8].ToString();
jsonlist["FStockerIDFnumber"] = item[9].ToString();
jsonlist["FStockerIDFname"] = item[10].ToString();
jsonlist["FMaterialIDFnumber"] = item[11].ToString();
jsonlist["FMaterialName"] = item[12].ToString();
jsonlist["FStockIDFnumber"] = item[13].ToString();
jsonlist["FStockIDFname"] = item[14].ToString();
jsonlist["FEntity_FENTRYID"] = item[15].ToString();
jsonlist["FEntrynote"] = item[16].ToString();
double Fprice = Convert.ToDouble(item[17].ToString());
jsonlist["FPrice"] = item[17].ToString();
double FRealQty = Convert.ToDouble(item[18].ToString());
jsonlist["FRealQty"] = item[18].ToString();
jsonlist["FMustQty"] = item[19].ToString();
double sumprice = Convert.ToDouble(item[20].ToString());
jsonlist["FAmount"] = item[20].ToString();
jsonlist["FSettleOrgIDFnumber"] = item[21].ToString();
jsonlist["FSettleOrgIDFname"] = item[22].ToString();
jsonlist["FSettleCurrIDFnumber"] = item[23].ToString();
jsonlist["FSettleCurrIDFname"] = item[24].ToString();
jsonlist["FUnitIDFnumber"] = item[25].ToString();
jsonlist["FUnitIDFname"] = item[26].ToString();
jsonlist["FOwnerIDFnumber"] = item[27].ToString();
jsonlist["FOwnerIDFname"] = item[28].ToString();
jsonlist["FID"] = item[29].ToString();
// jsonlist["FEntity_FENTRYID"] = item[30].ToString();
jsonlist["FTaxPrice"] = item[30].ToString();
jsonlist["FAmount_LC"] = item[31].ToString();
jsonresult += jsonlist + ",";
}
string js = jsonresult.Substring(0, jsonresult.Length - 1);
string lastjson = js + "]";
return lastjson;
}