Пример #1
0
        /// <summary>
        /// 个人用户注册
        /// </summary>
        public void personalRegister()
        {
            PersonalRegisterRequest personalRegisterRequest = new PersonalRegisterRequest();

            personalRegisterRequest.area_code   = "370000";
            personalRegisterRequest.description = "描述信息:该用户位示例用户";
            personalRegisterRequest.id_number   = "370011123456712122";
            personalRegisterRequest.id_type     = IdType.IDCARD;
            personalRegisterRequest.mail        = "*****@*****.**";
            personalRegisterRequest.phone       = "13711111121";
            personalRegisterRequest.user_name   = "测试个人用户";

            try
            {
                PersonalRegisterResponse response = client.Personal.personalRegister(personalRegisterRequest);
                Console.WriteLine("个人用户注册-响应数据:" + JSONUtil.getJsonStringFromObject(response));
            }
            catch (SignApplicationException sae)
            {
                // 捕获网关校验数据
                Console.WriteLine("个人用户注册-网关异常状态码为:" + sae.return_code);
                Console.WriteLine("个人用户注册-网关异常信息为:" + sae.return_message);
            }
            catch (SignServerException sse)
            {
                // 捕获网关校验数据
                Console.WriteLine("个人用户注册-业务异常状态码为:" + sse.result_code);
                Console.WriteLine("个人用户注册-业务异常信息为:" + sse.result_message);
            }
        }
Пример #2
0
        /// <summary>
        /// 创建个人用户
        /// </summary>
        /// <param name="personalRegisterRequest"></param>
        /// <returns></returns>
        public PersonalRegisterResponse personalRegister(PersonalRegisterRequest request)
        {
            SignRequest signRequest = new SignRequest(request);

            signRequest.apiUrl = ApiUrlConstant.Personal.Register;
            PersonalRegisterResponse response = this.Send <PersonalRegisterResponse>(signRequest);

            return(response);
        }
Пример #3
0
        /// <summary>
        /// 个人用户注册并申请证书
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public PersonalRegisterResponse personalCertRegister(PersonalRegisterRequest request)
        {
            //个人用户注册
            SignRequest signRequest = new SignRequest(request);

            signRequest.apiUrl = ApiUrlConstant.Personal.Register;
            PersonalRegisterResponse response = this.Send <PersonalRegisterResponse>(signRequest);

            //证书申请
            signRequest        = new SignRequest(new CertApplyRequest(response.user_id));
            signRequest.apiUrl = ApiUrlConstant.Cert.Apply;
            CertApplyResponse certApplyResponse = base.Send <CertApplyResponse>(signRequest);

            return(response);
        }
Пример #4
0
        public XResult <PersonalRegisterResponse> Register(PersonalRegisterRequest request)
        {
            if (request == null)
            {
                return(new XResult <PersonalRegisterResponse>(null, ErrorCode.INVALID_ARGUMENT, new ArgumentNullException(nameof(request))));
            }

            String service = $"{this.GetType().FullName}.Register(...)";

            if (!request.IsValid)
            {
                _logger.Trace(TraceType.BLL.ToString(), CallResultStatus.ERROR.ToString(), service, $"{nameof(request)}.IsValid", LogPhase.ACTION, $"请求参数验证失败:{request.ErrorMessage}", request);
                return(new XResult <PersonalRegisterResponse>(null, ErrorCode.INVALID_ARGUMENT, new ArgumentException(request.ErrorMessage)));
            }

            var requestHash = $"register:{request.PayeeId}".GetHashCode();

            if (_lockProvider.Exists(requestHash))
            {
                return(new XResult <PersonalRegisterResponse>(null, ErrorCode.SUBMIT_REPEAT));
            }

            try
            {
                if (!_lockProvider.Lock(requestHash))
                {
                    return(new XResult <PersonalRegisterResponse>(null, ErrorCode.SUBMIT_REPEAT));
                }

                var existedRegisterInfo = _personalSubAccountRepository.QueryProvider.Where(x => x.AppId == request.AppId && x.UID == request.PayeeId).Count() > 0;
                if (existedRegisterInfo)
                {
                    return(new XResult <PersonalRegisterResponse>(null, ErrorCode.INFO_EXISTED, new RequestException("开户信息已存在")));
                }

                var newId      = IDGenerator.GenerateID();
                var newAccount = new PersonalSubAccount()
                {
                    Id         = newId,
                    AppId      = request.AppId,
                    UID        = request.PayeeId,
                    IDCardNo   = request.IDCardNo,
                    IDCardType = request.IDCardType,
                    RealName   = request.RealName,
                    Mobile     = request.Mobile,
                    Email      = request.Email,
                    Status     = PersonalInfoRegisterStatus.WAITFORAUDIT.ToString(),
                    UpdateTime = DateTime.Now
                };
                _personalSubAccountRepository.Add(newAccount);

                var saveResult = _personalSubAccountRepository.SaveChanges();
                if (!saveResult.Success)
                {
                    _logger.Error(TraceType.BLL.ToString(), CallResultStatus.ERROR.ToString(), service, $"{nameof(_personalSubAccountRepository)}.SaveChanges()", "保存个人开户信息失败", saveResult.FirstException, request);
                    return(new XResult <PersonalRegisterResponse>(null, ErrorCode.DB_UPDATE_FAILED, saveResult.FirstException));
                }

                String traceMethod = "Bill99Util.Execute(/person/register)";

                _logger.Trace(TraceType.BLL.ToString(), CallResultStatus.OK.ToString(), service, traceMethod, LogPhase.BEGIN, "开始调用快钱个人开户接口", request);

                var execResult = Bill99UtilYZT.Execute <RawPersonalRegisterRequest, RawPersonalRegisterResponse>("/person/register", new RawPersonalRegisterRequest()
                {
                    uId          = request.PayeeId,
                    email        = request.Email,
                    idCardNumber = request.IDCardNo,
                    idCardType   = request.IDCardType,
                    mobile       = request.Mobile,
                    name         = request.RealName
                });

                _logger.Trace(TraceType.BLL.ToString(), (execResult.Success ? CallResultStatus.OK : CallResultStatus.ERROR).ToString(), service, traceMethod, LogPhase.END, $"结束调用快钱开户接口", request);

                if (!execResult.Success || execResult.Value == null)
                {
                    _logger.Error(TraceType.BLL.ToString(), CallResultStatus.ERROR.ToString(), service, traceMethod, "个人开户失败", execResult.FirstException, execResult.Value);

                    _personalSubAccountRepository.Remove(newAccount);
                    saveResult = _personalSubAccountRepository.SaveChanges();
                    if (!saveResult.Success)
                    {
                        _logger.Error(TraceType.BLL.ToString(), CallResultStatus.ERROR.ToString(), service, traceMethod, "删除个人开户记录失败", saveResult.FirstException, newAccount);
                    }

                    _logger.Trace(TraceType.BLL.ToString(), CallResultStatus.OK.ToString(), service, traceMethod, LogPhase.ACTION, "已删除开户失败的记录");
                    return(new XResult <PersonalRegisterResponse>(null, ErrorCode.DEPENDENT_API_CALL_FAILED, execResult.FirstException));
                }

                //开户成功之后要更新openid
                if (execResult.Value.ResponseCode == "0000")
                {
                    Boolean statusHasChanged = false;
                    switch (execResult.Value.AuditStatus)
                    {
                    case "03":
                        newAccount.Status = PersonalInfoRegisterStatus.SUCCESS.ToString();
                        newAccount.OpenId = execResult.Value.OpenId;
                        statusHasChanged  = true;
                        break;

                    case "02":
                        newAccount.Status = PersonalInfoRegisterStatus.WAITFORREVIEW.ToString();
                        statusHasChanged  = true;
                        break;
                    }

                    if (statusHasChanged)
                    {
                        _personalSubAccountRepository.Update(newAccount);
                        var updateResult = _personalSubAccountRepository.SaveChanges();
                        if (!updateResult.Success)
                        {
                            _logger.Error(TraceType.BLL.ToString(), CallResultStatus.ERROR.ToString(), service, traceMethod, "更新开户信息的OpenId失败", updateResult.FirstException, newAccount);
                            return(new XResult <PersonalRegisterResponse>(null, ErrorCode.DB_UPDATE_FAILED, new DbUpdateException("更新开户信息失败")));
                        }
                    }
                }

                var resp = new PersonalRegisterResponse()
                {
                    Status = newAccount.Status,
                    OpenId = newAccount.OpenId,
                    Msg    = GetRegisterAuditStatusMsg(newAccount.Status)
                };

                return(new XResult <PersonalRegisterResponse>(resp));
            }
            finally
            {
                _lockProvider.UnLock(requestHash);
            }
        }