85 lines
2.9 KiB
C#
85 lines
2.9 KiB
C#
using System.IdentityModel.Tokens.Jwt;
|
|
using System.Net.Http.Headers;
|
|
using System.Security.Claims;
|
|
using System.Text;
|
|
using Dlhis.ScheduledTask.SyncSapInfo.Response;
|
|
using Kurisu.AspNetCore.Utils.Extensions;
|
|
using Microsoft.IdentityModel.Tokens;
|
|
|
|
namespace Dlhis.ScheduledTask.SyncSapInfo.Services.Implements;
|
|
|
|
public class JinkoJIPService : IJinkoJIPService
|
|
{
|
|
private readonly IHttpClientFactory _httpClientFactory;
|
|
private readonly ILogger<JinkoJIPService> _logger;
|
|
|
|
public JinkoJIPService(IHttpClientFactory httpClientFactory, ILogger<JinkoJIPService> logger)
|
|
{
|
|
_httpClientFactory = httpClientFactory;
|
|
_logger = logger;
|
|
}
|
|
|
|
|
|
private HttpClient GetHttpClient()
|
|
{
|
|
var httpClient = _httpClientFactory.CreateClient();
|
|
//httpClient.BaseAddress = new Uri("");
|
|
//httpClient.Timeout = TimeSpan.FromMinutes(10);
|
|
var key = "FACE-7409WIBX";
|
|
var secret = "be0a4b88-cd80-4509-b9b9-865205d0d3d8";
|
|
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", IssueJwt(key, secret, 5));
|
|
|
|
return httpClient;
|
|
}
|
|
|
|
|
|
private static string IssueJwt(string jwtKey, string jwtSecret, int mins)
|
|
{
|
|
var now = DateTime.Now.AddMinutes(-mins);
|
|
var expires = DateTime.Now.AddMinutes(mins);
|
|
|
|
var claims = new List<Claim>
|
|
{
|
|
new Claim(JwtRegisteredClaimNames.Nbf,$"{new DateTimeOffset(now).ToUnixTimeSeconds()}"),
|
|
new Claim(JwtRegisteredClaimNames.Exp,$"{new DateTimeOffset(expires).ToUnixTimeSeconds()}"),
|
|
new Claim(JwtRegisteredClaimNames.Iss,jwtKey),
|
|
};
|
|
|
|
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSecret));
|
|
var descriptor = new SecurityTokenDescriptor
|
|
{
|
|
Subject = new ClaimsIdentity(claims),
|
|
Issuer = jwtKey,
|
|
IssuedAt = now,
|
|
NotBefore = now,
|
|
Expires = expires,
|
|
SigningCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256)
|
|
};
|
|
|
|
var jwtHandler = new JwtSecurityTokenHandler();
|
|
var securityToken = jwtHandler.CreateToken(descriptor);
|
|
return jwtHandler.WriteToken(securityToken);
|
|
}
|
|
|
|
public async Task<UploadAttendanceResponse> UploadAttendancesAsync(List<UploadAttendanceRequest> requests)
|
|
{
|
|
var body = new
|
|
{
|
|
T_DATA = requests,
|
|
};
|
|
|
|
var json = body.ToJson();
|
|
|
|
_logger.LogInformation("上传考勤记录请求:{json}", json);
|
|
|
|
var content = new StringContent(json, Encoding.UTF8, "application/json");
|
|
var response = await GetHttpClient().PostAsync("http://172.16.202.34:8000/JIP/HCM/HCM_SWIPE_DATA_SAVE", content);
|
|
var responseJson = await response.Content.ReadAsStringAsync();
|
|
|
|
_logger.LogInformation("上传考勤记录响应:{json}", responseJson);
|
|
|
|
var r = responseJson.ToObject<UploadAttendanceResponse>();
|
|
return r;
|
|
}
|
|
}
|