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 = "实名认证服务异常,请稍后重试" }; } } } }