122 lines
4.5 KiB
C#
122 lines
4.5 KiB
C#
using LiveForum.IService.Others;
|
||
using LiveForum.IService.RealName;
|
||
using LiveForum.Model.Dto.RealName;
|
||
|
||
using Microsoft.Extensions.Logging;
|
||
|
||
using System.Net.Http;
|
||
using System.Net.Http.Json;
|
||
using System.Text.Json;
|
||
|
||
namespace LiveForum.Service.RealName
|
||
{
|
||
/// <summary>
|
||
/// 阿里云身份二要素核验实现
|
||
/// 使用阿里云实人认证 - 信息核验 - Id2MetaVerify API
|
||
/// SDK: AlibabaCloud.SDK.Cloudauth20200618
|
||
/// </summary>
|
||
public class AliyunRealNameProvider : IRealNameVerifyProvider
|
||
{
|
||
private readonly ISystemSettingsService _settings;
|
||
private readonly ILogger<AliyunRealNameProvider> _logger;
|
||
|
||
public string ProviderName => "aliyun";
|
||
|
||
public AliyunRealNameProvider(ISystemSettingsService settings, ILogger<AliyunRealNameProvider> logger)
|
||
{
|
||
_settings = settings;
|
||
_logger = logger;
|
||
}
|
||
|
||
public async Task<RealNameVerifyResult> VerifyAsync(string realName, string idCardNumber)
|
||
{
|
||
try
|
||
{
|
||
var accessKeyId = await _settings.GetSettingAsync("aliyun_access_key_id");
|
||
var accessKeySecret = await _settings.GetSettingAsync("aliyun_access_key_secret");
|
||
|
||
if (string.IsNullOrEmpty(accessKeyId) || string.IsNullOrEmpty(accessKeySecret))
|
||
{
|
||
_logger.LogError("阿里云 AccessKey 未配置");
|
||
return new RealNameVerifyResult
|
||
{
|
||
IsMatch = false,
|
||
Message = "实名认证服务未配置,请联系管理员"
|
||
};
|
||
}
|
||
|
||
// 使用阿里云 SDK 调用 Id2MetaVerify
|
||
var config = new AlibabaCloud.OpenApiClient.Models.Config
|
||
{
|
||
AccessKeyId = accessKeyId,
|
||
AccessKeySecret = accessKeySecret,
|
||
Endpoint = "cloudauth.aliyuncs.com"
|
||
};
|
||
|
||
var client = new AlibabaCloud.SDK.Cloudauth20190307.Client(config);
|
||
|
||
var request = new AlibabaCloud.SDK.Cloudauth20190307.Models.Id2MetaVerifyRequest
|
||
{
|
||
ParamType = "normal",
|
||
UserName = realName,
|
||
IdentifyNum = idCardNumber
|
||
};
|
||
|
||
var response = await client.Id2MetaVerifyAsync(request);
|
||
var body = response.Body;
|
||
|
||
_logger.LogInformation("阿里云身份核验响应: RequestId={RequestId}, Code={Code}, BizCode={BizCode}",
|
||
body.RequestId, body.Code, body.ResultObject?.BizCode);
|
||
|
||
if (body.Code == "200" || body.Code == "OK")
|
||
{
|
||
var bizCode = body.ResultObject?.BizCode;
|
||
return bizCode switch
|
||
{
|
||
"1" => new RealNameVerifyResult
|
||
{
|
||
IsMatch = true,
|
||
Message = "实名认证成功",
|
||
RequestId = body.RequestId
|
||
},
|
||
"2" => new RealNameVerifyResult
|
||
{
|
||
IsMatch = false,
|
||
Message = "姓名与身份证号不匹配",
|
||
RequestId = body.RequestId
|
||
},
|
||
"3" => new RealNameVerifyResult
|
||
{
|
||
IsMatch = false,
|
||
Message = "身份信息未查得,请检查后重试",
|
||
RequestId = body.RequestId
|
||
},
|
||
_ => new RealNameVerifyResult
|
||
{
|
||
IsMatch = false,
|
||
Message = $"核验异常(BizCode={bizCode})",
|
||
RequestId = body.RequestId
|
||
}
|
||
};
|
||
}
|
||
|
||
return new RealNameVerifyResult
|
||
{
|
||
IsMatch = false,
|
||
Message = body.Message ?? "核验服务异常",
|
||
RequestId = body.RequestId
|
||
};
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
_logger.LogError(ex, "阿里云身份核验异常");
|
||
return new RealNameVerifyResult
|
||
{
|
||
IsMatch = false,
|
||
Message = "实名认证服务异常,请稍后重试"
|
||
};
|
||
}
|
||
}
|
||
}
|
||
}
|