对接金蝶获取接口授权代码
接口服务信息
using RestSharp;
using System.Configuration;
using System.Threading.Tasks;
public class KingdeeAccessTokenService
{
private readonly RestClient _client;
private readonly KingdeeApiConfig _config;
public KingdeeAccessTokenService()
{
_client = new RestClient();
_config = LoadConfiguration();
}
/// <summary>
/// 获取配置文件
/// </summary>
/// <returns></returns>
private KingdeeApiConfig LoadConfiguration()
{
return new KingdeeApiConfig
{
AppId = ConfigurationManager.AppSettings["KingDee:AppId"] + "",
AppSecuret = ConfigurationManager.AppSettings["KingDee:AppSecuret"] + "",
TenantId = ConfigurationManager.AppSettings["KingDee:TenantId"] + "",
AccountId = ConfigurationManager.AppSettings["KingDee:AccountId"] + "",
Language = ConfigurationManager.AppSettings["KingDee:Language"] + "",
AppTokenUrl = ConfigurationManager.AppSettings["KingDee:AppTokenUrl"] + "",
LoginUrl = ConfigurationManager.AppSettings["KingDee:LoginUrl"] + "",
User = ConfigurationManager.AppSettings["KingDee:User"] + ""
};
}
/// <summary>
/// 获取授权key
/// </summary>
/// <returns></returns>
/// <exception cref="AppInfoException"></exception>
public async Task<string> GetKingdeeAccTokenKey()
{
if (!_config.IsValid())
{
throw new Exception("GetKingdeeAccTokenKey", "配置参数不完整");
}
// 1. 获取AppToken
var appToken = await GetAppTokenAsync();
if (string.IsNullOrEmpty(appToken))
return string.Empty;
// 2. 获取AccessToken
return await GetAccessTokenAsync(appToken);
}
/// <summary>
/// 获取AppKey
/// </summary>
/// <returns></returns>
/// <exception cref="AppInfoException"></exception>
private async Task<string> GetAppTokenAsync()
{
var appTokenParams = new AppTokenRequestParams
{
appId = _config.AppId,
appSecuret = _config.AppSecuret,
tenantid = _config.TenantId,
accountId = _config.AccountId,
language = _config.Language
};
var result = await CallApiAsync<ResponseResult<TokenData>>(_config.AppTokenUrl, appTokenParams);
if (result?.data.error_code != "0")
{
throw new Exception("GetAppTokenAsync", result?.data.error_desc);
}
return result.data.app_token;
}
/// <summary>
/// 获取授权返回结果
/// </summary>
/// <param name="appToken"></param>
/// <returns></returns>
private async Task<string> GetAccessTokenAsync(string appToken)
{
var loginRequest = new LoginRequestParams
{
user = _config.User,
apptoken = appToken,
tenantid = _config.TenantId,
accountId = _config.AccountId,
language = _config.Language
};
var result = await CallApiAsync<ResponseResult<TokenData>>(_config.LoginUrl, loginRequest);
if (result?.data.error_code != "0")
{
throw new AppInfoException("GetAccessTokenAsync", result?.data.error_desc);
}
return result.data.access_token;
}
/// <summary>
/// WebApi 请求
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="endpoint"></param>
/// <param name="requestBody"></param>
/// <returns></returns>
public async Task<T> CallApiAsync<T>(string endpoint, object requestBody)
{
var request = new RestRequest(endpoint, Method.Post);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Accept", "*/*");
request.AddJsonBody(requestBody);
var response = await _client.ExecuteAsync<T>(request);
if (!response.IsSuccessful)
{
throw new Exception("CallApiAsync",response.Content);
}
return response.Data;
}
}
token 实体1
public class AppTokenRequestParams
{
/// <summary>
/// appId
/// </summary>
public string appId { get; set; }
/// <summary>
/// appKey
/// </summary>
public string appSecuret { get; set; }
/// <summary>
///
/// </summary>
public string tenantid { get; set; }
/// <summary>
/// 账户id
/// </summary>
public string accountId { get; set; }
/// <summary>
/// 语言
/// </summary>
public string language { get; set; }
}
//异常实体
public class ErrorViewModel
{
/// <summary>
///
/// </summary>
public string? RequestId { get; set; }
/// <summary>
///
/// </summary>
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
}
//配置参数
public class KingdeeApiConfig
{
public string AppId { get; set; }
public string AppSecuret { get; set; }
public string TenantId { get; set; }
public string AccountId { get; set; }
public string Language { get; set; }
public string AppTokenUrl { get; set; }
public string LoginUrl { get; set; }
public string User { get; set; }
public bool IsValid()
{
return !string.IsNullOrEmpty(AppId) &&
!string.IsNullOrEmpty(AppSecuret) &&
!string.IsNullOrEmpty(TenantId) &&
!string.IsNullOrEmpty(AccountId) &&
!string.IsNullOrEmpty(Language) &&
!string.IsNullOrEmpty(AppTokenUrl) &&
!string.IsNullOrEmpty(LoginUrl) &&
!string.IsNullOrEmpty(User);
}
}
//登录参数
/// <summary>
///
/// </summary>
public class LoginRequestParams
{
/// <summary>
///
/// </summary>
public string user { get; set; }
/// <summary>
///
/// </summary>
public string apptoken { get; set; }
/// <summary>
///
/// </summary>
public string tenantid { get; set; }
/// <summary>
///
/// </summary>
public string accountId { get; set; }
/// <summary>
///
/// </summary>
public string usertype { get; set; }
/// <summary>
///
/// </summary>
public string language { get; set; }
}
//返回接口
public class ResponseResult<T>
{
/// <summary>
///
/// </summary>
public T data { get; set; }
/// <summary>
///
/// </summary>
public string state { get; set; }
/// <summary>
///
/// </summary>
public bool status { get; set; }
}
//token信息
public class TokenData
{
/// <summary>
///
/// </summary>
public string app_token { get; set; }
/// <summary>
///
/// </summary>
public string access_token { get; set; }
/// <summary>
///
/// </summary>
public bool success { get; set; }
/// <summary>
///
/// </summary>
public string error_desc { get; set; }
/// <summary>
///
/// </summary>
public long expire_time { get; set; }
/// <summary>
///
/// </summary>
public string error_code { get; set; }
}