知识共享 - Web API 免密码登录K/3 Cloud
金蝶云社区-JohnnyDing
JohnnyDing
10人赞赏了该文章 14111次浏览 未经作者许可,禁止转载编辑于2016年12月15日 10:03:47

背景说明

第三方系统在调用K/3 Cloud的Web API接口时,需要先进行登录。
普通的登录接口,需要传入用户名、用户密码。
很多情况下,难以获取到用户的密码,导致无法登录。

本帖介绍一种免密码登录方案。

提前准备

免密码登录,需要提前在K/3 Cloud中,对第三方程序进行授权:
登记第三方程序的AppId,并给第三方程序分配一个有时效限制的应用密钥。

随后,第三方系统,就可以传入appId以及应用密钥,以及登录用户名,登录K/3 Cloud。

第三方调用示例

C#语言,.Net 4.0

//******************************************************************
///


/// 无密码登录
///

private string Sample2016121501()
{
try
{
ApiClient client = new ApiClient(this.txtWebSite.Text);
// 调用登录接口:LoginByAppSecret,免密码登录

// 前提:
// 以Administrator登录到K/3 Cloud,打开系统管理 - 第三方系统登录授权界面
// 新建授权,随意指定应用ID(简称为appId),本示例,指定appId为 "MyWebAPICaller"
// 系统随机产生一个应用密钥,演示本示例时,产生的密钥为 "b7b7b07f6e1547308db446efaba92713"

// 参数说明:
// dbid : 数据中心id。到管理中心数据库搜索:
// select FDataCenterId, * from T_BAS_DataCenter
// userName : 用户名
// appId :应用Id,在K/3 Cloud中登记的,第三方程序
// appSecret : 应用密钥,在K/3 Cloud进行第三方系统登录授权时,由系统自动产生;可以设定时效
// loid : 语言id,中文为2052,中文繁体为3076,英文为1033

string appId = "MyWebAPICaller";
string appSecret = "b7b7b07f6e1547308db446efaba92713";

string loginResult = client.LoginByAppSecret(
this.txtDbId.Text,
this.txtUser.Text,
appId,
appSecret,
2052);

Newtonsoft.Json.Linq.JObject loginResultObj = JObject.Parse(loginResult);
JToken loginResultType;
loginResultObj.TryGetValue("LoginResultType", out loginResultType);

string result = "登录失败,请检查与站点地址、数据中心Id,用户名及密码!";
// 登陆成功,开始保存数据
if (loginResultType != null && loginResultType.Value() == 1)
{
//loginResultType.Value():
// 0 密码错误
// 1 登录成功
// -1 登录失败

// 开始构建Web API参数对象
JObject jsonRoot = new JObject();
// 查询参数需要包括:
// FormId :单据标识
jsonRoot.Add("FormId", "PUR_PurchaseOrder");
// FieldKeys : 需返回的字段标识,以逗号隔开
jsonRoot.Add("FieldKeys", "FID,FBillNo,FDate,FPOOrderEntry_FEntryID,FMaterialId,FMaterialId.FName,FQty");
// FilterString : 过滤条件
jsonRoot.Add("FilterString", " FDate >= {ts'2016-11-29 00:00:00'} and FDate <= {ts'2016-11-29 23:59:59'}");
// OrderString :排序字段,建议使用单据头字段排序
jsonRoot.Add("OrderString", "FBillNo");
// StartRow : 分页取数开始
jsonRoot.Add("StartRow", 0);
// Limit : 每页行数
jsonRoot.Add("Limit", 50);
// TopRowCount : 查询最大行数
jsonRoot.Add("TopRowCount", 2000);
// 调用Web API接口服务
result = client.Execute(
"Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery",
new object[] { jsonRoot.ToString() });

// 把结果转换为JObject
Newtonsoft.Json.Linq.JArray resultObj = JArray.Parse(result);
}
return result;
}
catch (Exception exp)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("程序运行遇到了未知的错误:");
sb.Append("错误提示:").AppendLine(exp.Message);
sb.Append("错误堆栈:").AppendLine(exp.StackTrace);
return sb.ToString();
}
}