Commit 676400df by Neo Turing

优化

parent 2903b95e
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Finances.Addons
{
public class AesEncryptor
{
private readonly byte[] key;
private readonly byte[] iv;
public AesEncryptor(string keyString, string ivString)
{
key = Encoding.UTF8.GetBytes(keyString);
iv = Encoding.UTF8.GetBytes(ivString);
}
public string Encrypt(string plainText)
{
var aes = Aes.Create();
aes.Key = key;
aes.IV = iv;
var encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
var memoryStream = new MemoryStream();
using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
{
using (var streamWriter = new StreamWriter(cryptoStream))
{
streamWriter.Write(plainText);
}
}
return Convert.ToBase64String(memoryStream.ToArray());
}
public string Decrypt(string cipherText)
{
var aes = Aes.Create();
aes.Key = key;
aes.IV = iv;
var decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
var memoryStream = new MemoryStream(Convert.FromBase64String(cipherText));
var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);
var streamReader = new StreamReader(cryptoStream);
return streamReader.ReadToEnd();
}
}
}
......@@ -16,14 +16,6 @@ namespace Kivii.Finances.Addons
#region PolicyVerify
public const string UrlVerify = "https://scjg.jszwfw.gov.cn:20081";
public const string RouteVerify = "/ecipplatform/minTypeCorpServlet.json?minTypeCorpInfo=true";
public const string AesKey = "hj7x89H$yuBI0456";
public const string AesIv = "NIfb&95GUY86Gfgh";
public const string APP_MARK = "QYZXDJYJS";
public const string APP_WORK = "jgta3mkGOgkY";
#endregion
}
}
......@@ -53,12 +53,9 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="AesEncryptor.cs" />
<Compile Include="Configs.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RequestService.cs" />
<Compile Include="Requests\PolicyVerify.Request.cs" />
<Compile Include="RestfulPolicyVerify.cs" />
<Compile Include="RestfulReadExcel.cs" />
<Compile Include="TemplateRequest.cs" />
</ItemGroup>
......@@ -77,7 +74,6 @@
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
<None Include="Resources\国家企业信用信息公示系统小微企业验证接口.docx" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
......
using Kivii.Text;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Finances.Addons.Requests
{
#region Request.Response
[Route(Configs.RouteVerify)]
public class PolicyVerifyRequest : IReturn<PolicyVerifyResponse>
{
/// <summary>
/// 应用标识
/// </summary>
public string appMark { get; set; }
/// <summary>
/// 时间戳,即当前时间 格式为:年月日时分秒 实例: 2019年05月10日 12时12分12秒 格式应写为20190510121212
/// </summary>
public string time { get; set; }
public string sign { get; set; }
/// <summary>
/// 业务参数,json格式。数据固定格式如下,详情可见接口入参字段(节点里面全部内容进行SM2加密处理,非单个字段值){"corpName":"企业名称","uniscid": "统一社会信用代码"}
/// </summary>
public string qyInfo { get; set; }
}
public class PolicyVerifyRequestParams
{
/// <summary>
/// 必填,企业名称
/// </summary>
public string corpName { get; set; }
/// <summary>
/// 选填,统一社会信用代码
/// </summary>
public string uniscid { get; set; }
}
public class PolicyVerifyResponse
{
public string code { get; set; }
public string message { get; set; }
public bool success { get; set; }
/// <summary>
/// 加密json数据,aes加密
/// 格式为:
///[{
///"corpName": "企业名称",
///"uniscid": "统一社会信用代码",
///"operManName": "法定代表人名称",
///"addr": "注册地址",
///"econKind": "企业类型",
///"regCapi": "注册资金"
///}]
///节点中所有数据进行AES加密;
/// </summary>
public string data { get; set; }
}
public class PolicyVerifyResponseData
{
/// <summary>
/// 企业名称
/// </summary>
public string corpName { get; set; }
/// <summary>
/// 统一社会信用代码
/// </summary>
public string uniscid { get; set; }
/// <summary>
/// 法定代表人
/// </summary>
public string operManName { get; set; }
/// <summary>
/// 注册地址
/// </summary>
public string addr { get; set; }
/// <summary>
/// 企业类型,市场主体类型名称
/// </summary>
public string econKind { get; set; }
/// <summary>
/// 注册资本
/// </summary>
public string regCapi { get; set; }
/// <summary>
/// 时间
/// </summary>
public string time { get; set; }
/// <summary>
/// 是否是小微企业
/// </summary>
public string isMinCorp { get; set; }
}
#endregion
public class RestfulPolicyVerifyResponse: RestfulQueryResponse<PolicyVerifyResponseData>
{
public string Message { get; set; }
}
public static class PolicyVerifyExtension
{
public static RestfulPolicyVerifyResponse GetPolicyVerify(this JsonServiceClient client, PolicyVerifyRequestParams verifyParam)
{
if (client == null || verifyParam == null) throw new ArgumentNullException("client or verifyParam");
if (verifyParam.corpName.IsNullOrEmpty()) throw new ArgumentNullException("verifyParam.corpName");
AesEncryptor encryptor = new AesEncryptor(Configs.AesKey, Configs.AesIv);
var time = DateTime.Now.ToString("yyyyMMddHHmmss");
var signStr = $"{time}{Configs.APP_MARK}{Configs.APP_WORK}";
var sign = encryptor.Encrypt(signStr);
var paramJson = Kivii.Text.JsonSerializer.SerializeToString(verifyParam);
var param = encryptor.Encrypt(paramJson);
//var requestVerify = new PolicyVerifyRequest();
//requestVerify.appMark = Configs.APP_MARK;
//requestVerify.time = time;
//requestVerify.sign = sign;
//requestVerify.qyInfo = param;
var url = $"{Configs.RouteVerify}&appMark={Configs.APP_MARK}&time={time}&sign={sign}&qyInfo={param}";
var responseVerify = client.Get<PolicyVerifyResponse>(url);
if (responseVerify == null) throw new Exception("验证未响应");
var rtns = new RestfulPolicyVerifyResponse();
rtns.Results = new List<PolicyVerifyResponseData>();
if (responseVerify.code != "0")
{
rtns.Message = responseVerify.message;
return rtns;
}
try
{
var dataJson = encryptor.Decrypt(responseVerify.data);
var record = JsonSerializer.DeserializeFromString<PolicyVerifyResponseData>(dataJson);
rtns.Results.Add(record);
}
catch (Exception ex)
{
throw ex;
}
return rtns;
}
}
}
using Kivii.Finances.Addons.Requests;
using Kivii.Finances.Entities;
using Kivii.Linq;
using Kivii.Text;
using Kivii.Web;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Kivii.Finances.Addons
{
[Api(Description = "政策验证")]
[RequiresAnyRole(SystemRoles.Everyone)]
public class PolicyVerifying : RestfulExecution<Policy>
{
public string TargetName { get; set; }
public override object OnExecution(IRequest req, IResponse res)
{
if (TargetName.IsNullOrEmpty()) throw new Exception("请传入付款单位信息!");
var conn = KiviiContext.GetOpenedDbConnection<InvoiceTitle>();
var query = conn.From<InvoiceTitle>();
query.Where(o => o.CompanyName == TargetName);
query.Select(o => new { corpName = o.CompanyName, uniscid = o.TaxNumber });
var verifyParam = conn.Single<PolicyVerifyRequestParams>(query);
if (verifyParam == null)
{
verifyParam = new PolicyVerifyRequestParams();
verifyParam.corpName = TargetName;
verifyParam.uniscid = "";
}
var rtns = new RestfulPolicyVerifyResponse();
var client = new JsonServiceClient(Configs.UrlVerify);
rtns = client.GetPolicyVerify(verifyParam);
rtns.Total = rtns.Results.Count;
return rtns;
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment