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
{
///
/// 阿里云身份二要素核验实现
/// 使用阿里云实人认证 - 信息核验 - Id2MetaVerify API
/// SDK: AlibabaCloud.SDK.Cloudauth20200618
///
public class AliyunRealNameProvider : IRealNameVerifyProvider
{
private readonly ISystemSettingsService _settings;
private readonly ILogger _logger;
public string ProviderName => "aliyun";
public AliyunRealNameProvider(ISystemSettingsService settings, ILogger logger)
{
_settings = settings;
_logger = logger;
}
public async Task 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 = "实名认证服务异常,请稍后重试"
};
}
}
}
}