/// <summary> /// get token /// </summary> /// <param name="userName"></param> /// <param name="passWord"></param> /// <returns></returns> public string GetToken(AuthorizationInput input) { //校验用户信息是否正确,如果正确则返回签名信息 var sigin = JsonWebToken.Encode(input, key, JwtHashAlgorithm.HS384); return(sigin); }
public async Task <IActionResult> Authorize(AuthorizationRequest request) { AuthorizationInput input = new AuthorizationInput { Card = new CreditCard { CardNumber = request.CardNumber, CVV = request.CVV, ExpiryMonth = request.ExpiryMonth, ExpiryYear = request.ExpiryYear }, Amount = request.Amount, Currency = request.Currency }; AuthorizationOutput serviceResponse = await _service.AuthorizeTransaction(input); AuthorizeResponse response = new AuthorizeResponse { AmountAvailable = serviceResponse.TransactionOutput.AmountAvailable, Currency = serviceResponse.TransactionOutput.Currency, Error = serviceResponse.TransactionOutput.Error, Id = serviceResponse.AuthorizationId, Success = serviceResponse.TransactionOutput.Success }; return(Ok(response)); }
private async Task <BankAuthorizationResponse> GetAuthorizationFromBank(AuthorizationInput authorizationInput) { ByteArrayContent byteContent = GetAuthorizationRequestByteContent(authorizationInput); HttpResponseMessage response = await _client.PostAsync(bankApiAddress + "authorize", byteContent); var responseContent = await response.Content.ReadAsAsync <BankAuthorizationResponse>(); return(responseContent); }
public ApiResponseBase GetToken(AuthorizationInput input) { var result = new ApiResponse() { Data = _authorizationCenter.GetToken(input) }; return(result); }
/// <inheritdoc /> public ThirdPartyAuthorizeResult Authorize(AuthorizationInput input) { var tokenRequest = "https://api.weibo.com/oauth2/access_token" + $"?client_id={AppId}&client_secret={AppSecret}&grant_type=authorization_code" + $"&redirect_uri={RedirectUri}&code={input.Code}"; var tokenResult = HttpRequester.Request(tokenRequest, new HttpRequester.RequestOptions { Method = HttpRequester.HttpMethod.Post }); var authorizeResult = JsonConvert.DeserializeObject <AuthorizeResult>(tokenResult); var accessToken = authorizeResult.access_token; var uidRequest = "https://api.weibo.com/2/account/get_uid.json" + $"?access_token={accessToken}"; var uidResult = HttpRequester.Request(uidRequest, new HttpRequester.RequestOptions()); var uid = (string)JsonConvert.DeserializeObject <dynamic>(uidResult).uid; var thirdPartyUser = _thirdPartyUserRepository .GetAll() .FirstOrDefault(u => u.OpenId == uid); if (thirdPartyUser == null) { var userRequest = "https://api.weibo.com/2/users/show.json" + $"?access_token={accessToken}&uid={uid}"; var userResult = HttpRequester.Request(userRequest, new HttpRequester.RequestOptions()); var user = JsonConvert.DeserializeObject <UserInfo>(userResult); thirdPartyUser = new ThirdPartyUser { OpenId = uid, AccessToken = accessToken, Name = user.name, NickName = user.screen_name, ThirdParty = "Weibo" }; _thirdPartyUserRepository.Insert(thirdPartyUser); CurrentUnitOfWork.SaveChanges(); } thirdPartyUser.AccessToken = accessToken; CurrentUnitOfWork.SaveChanges(); return(new ThirdPartyAuthorizeResult { ThirdPartyUser = new ThirdPartyUserOutput { UserId = thirdPartyUser.UserId, Name = thirdPartyUser.NickName, NickName = thirdPartyUser.NickName }, Token = $"OpenId={uid}&date={DateTime.Now:yyyy-MM-dd HH:mm:ss}&type=Weibo".EncryptQueryString(), Success = thirdPartyUser.UserId > 0, RequireCreateNewUser = thirdPartyUser.UserId == 0 });
private static ByteArrayContent GetAuthorizationRequestByteContent(AuthorizationInput authorizationInput) { dynamic authorizationRequest = new { cardNumber = authorizationInput.Card.CardNumber, amount = authorizationInput.Amount }; ByteArrayContent byteContent = GetByteContentFromDynamicObject(authorizationRequest); return(byteContent); }
/// <inheritdoc /> public ThirdPartyAuthorizeResult Authorize(AuthorizationInput input) { IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", AppId, AppPrivateKey, "json", "1.0", "RSA2", AppPublicKey, "utf-8", false); AlipaySystemOauthTokenRequest tokenRequest = new AlipaySystemOauthTokenRequest { Code = input.Code, GrantType = "authorization_code" }; AlipaySystemOauthTokenResponse tokenResponse = client.Execute(tokenRequest); if (tokenResponse.IsError) { throw new UserFriendlyException("认证失败,请重试"); } var thirdPartyUser = _thirdPartyUserRepository .GetAll() .FirstOrDefault(u => u.OpenId == tokenResponse.UserId); if (thirdPartyUser == null) { AlipayUserUserinfoShareRequest userRequest = new AlipayUserUserinfoShareRequest(); AlipayUserUserinfoShareResponse userResponse = client.Execute(userRequest, tokenResponse.AccessToken); if (userResponse.IsError) { throw new UserFriendlyException("认证失败,请重试"); } thirdPartyUser = new ThirdPartyUser { OpenId = tokenResponse.UserId, AccessToken = tokenResponse.AccessToken, Name = userResponse.RealName, NickName = userResponse.NickName, ThirdParty = "Alipay" }; _thirdPartyUserRepository.Insert(thirdPartyUser); CurrentUnitOfWork.SaveChanges(); } thirdPartyUser.AccessToken = tokenResponse.UserId; CurrentUnitOfWork.SaveChanges(); return(new ThirdPartyAuthorizeResult { ThirdPartyUser = new ThirdPartyUserOutput { UserId = thirdPartyUser.UserId, Name = thirdPartyUser.NickName, NickName = thirdPartyUser.NickName }, Token = $"OpenId={tokenResponse.UserId}&date={DateTime.Now:yyyy-MM-dd HH:mm:ss}&type=Alipay".EncryptQueryString(), Success = thirdPartyUser.UserId > 0, RequireCreateNewUser = thirdPartyUser.UserId == 0 });
/// <inheritdoc /> public ThirdPartyAuthorizeResult Authorize(AuthorizationInput input) { var tokenRequest = "https://api.weixin.qq.com/sns/oauth2/access_token" + $"?appid={AppId}&secret={AppSecret}&code={input.Code}&grant_type=authorization_code"; var tokenResult = HttpRequester.Request(tokenRequest, new HttpRequester.RequestOptions()); var authorizeResult = JsonConvert.DeserializeObject <AuthorizeResult>(tokenResult); var accessToken = authorizeResult.access_token; var openId = authorizeResult.openid; if (openId == null) { return(new ThirdPartyAuthorizeResult { Success = false }); } var thirdPartyUser = _thirdPartyUserRepository .GetAll() .FirstOrDefault(u => u.OpenId == openId); if (thirdPartyUser == null) { var userRequest = "https://api.weixin.qq.com/sns/userinfo" + $"?access_token={accessToken}&openid={openId}"; var userResult = HttpRequester.Request(userRequest, new HttpRequester.RequestOptions()); var user = JsonConvert.DeserializeObject <UserInfo>(userResult); thirdPartyUser = new ThirdPartyUser { OpenId = openId, AccessToken = accessToken, Name = user.nickname, NickName = user.nickname, ThirdParty = "Weixin" }; _thirdPartyUserRepository.Insert(thirdPartyUser); CurrentUnitOfWork.SaveChanges(); } thirdPartyUser.AccessToken = accessToken; CurrentUnitOfWork.SaveChanges(); return(new ThirdPartyAuthorizeResult { ThirdPartyUser = new ThirdPartyUserOutput { UserId = thirdPartyUser.UserId, Name = thirdPartyUser.NickName, NickName = thirdPartyUser.NickName }, Token = $"OpenId={openId}&date={DateTime.Now:yyyy-MM-dd HH:mm:ss}&type=Weixin".EncryptQueryString(), Success = thirdPartyUser.UserId > 0, RequireCreateNewUser = thirdPartyUser.UserId == 0 });
private static bool CardNumberIsValid(AuthorizationInput authorizationInput, out string cardNumber) { cardNumber = authorizationInput.Card.CardNumber; if (cardNumber.Any(c => !char.IsDigit(c) && c != ' ')) { return(false); } CreditCardDetector detector = new CreditCardDetector(authorizationInput.Card.CardNumber); if (detector.IsValid()) { cardNumber = detector.CardNumber; return(true); } return(false); }
/// <inheritdoc /> public ThirdPartyAuthorizeResult Authorize(AuthorizationInput input) { var tokenRequest = "https://graph.qq.com/oauth2.0/token" + $"?grant_type=authorization_code&client_id={AppId}&client_secret={AppKey}" + $"&code={input.Code}&redirect_uri={RedirectUri}"; var tokenResult = HttpRequester.Request(tokenRequest, new HttpRequester.RequestOptions()); var accessToken = ParseAccessToken(tokenResult); var openIdRequest = "https://graph.qq.com/oauth2.0/me" + $"?access_token={accessToken}"; var openIdResult = HttpRequester.Request(openIdRequest, new HttpRequester.RequestOptions()); var openId = ParseOpenId(openIdResult); var thirdPartyUser = _thirdPartyUserRepository .GetAll() .FirstOrDefault(u => u.OpenId == openId); if (thirdPartyUser == null) { var userRequest = "https://graph.qq.com/user/get_user_info" + $"?access_token={accessToken}&oauth_consumer_key={AppId}&openid={openId}"; var userResult = HttpRequester.Request(userRequest, new HttpRequester.RequestOptions()); var user = JsonConvert.DeserializeObject <UserInfo>(userResult); thirdPartyUser = new ThirdPartyUser { OpenId = openId, AccessToken = accessToken, NickName = user.nickname, ThirdParty = "QQ" }; _thirdPartyUserRepository.Insert(thirdPartyUser); CurrentUnitOfWork.SaveChanges(); } thirdPartyUser.AccessToken = accessToken; CurrentUnitOfWork.SaveChanges(); return(new ThirdPartyAuthorizeResult { ThirdPartyUser = new ThirdPartyUserOutput { UserId = thirdPartyUser.UserId, Name = thirdPartyUser.NickName, NickName = thirdPartyUser.NickName }, Token = $"OpenId={openId}&date={DateTime.Now:yyyy-MM-dd HH:mm:ss}&type=QQ".EncryptQueryString(), Success = thirdPartyUser.UserId > 0, RequireCreateNewUser = thirdPartyUser.UserId == 0 });
public void AuthorizeTransaction_ServiceAuthorizes_ReturnsAuthorizationId() { Mock <IPaymentRepository> mockRepository = GetMockRepository(); Mock <HttpMessageHandler> mockHttpHandler = GetHttpHandlerMock("{success: true}"); AuthorizationInput input = new AuthorizationInput { Card = new CreditCard { CardNumber = "124142112411241" }, Amount = 5.00M, Currency = "GBP" }; PaymentService service = GetService(mockRepository, mockHttpHandler); AuthorizationOutput output = service.AuthorizeTransaction(input).Result; Assert.IsNotNull(output.AuthorizationId); }
public async Task <AuthorizationOutput> AuthorizeTransaction(AuthorizationInput authorizationInput) { //Check card number is valid bool validCreditCardNumber = CardNumberIsValid(authorizationInput, out string cardNumber); if (!validCreditCardNumber) { AuthorizationOutput authorizationOutput = GetFailedAuthorizationOuput("Invalid credit card"); return(authorizationOutput); } authorizationInput.Card.CardNumber = cardNumber; //Authorize transaction with bank BankAuthorizationResponse bankAuthorization = await GetAuthorizationFromBank(authorizationInput); if (bankAuthorization.authorizedAmount == 0) { string error = "Failed to authorize"; AuthorizationOutput failedAuthorizationOutput = GetFailedAuthorizationOuput(error); return(failedAuthorizationOutput); } //Add authorization to the database Transaction transaction = await _paymentRepository.GetAuthorization(authorizationInput.Amount, authorizationInput.Currency, bankAuthorization.id); AuthorizationOutput output = new AuthorizationOutput { AuthorizationId = transaction.Id, TransactionOutput = new TransactionOutput { AmountAvailable = bankAuthorization.authorizedAmount, Currency = authorizationInput.Currency, Error = null, Success = true } }; return(output); }
public void AuthorizeTransaction_ServiceReturnsInvalid_ReturnsErrorMessage() { Mock <IPaymentRepository> mockRepository = GetMockRepository(); Mock <HttpMessageHandler> mockHttpHandler = GetHttpHandlerMock("{success: false}"); AuthorizationInput input = new AuthorizationInput { Card = new CreditCard { CardNumber = "1412411114124111", ExpiryYear = 2000 }, Amount = 5.00M, Currency = "GBP" }; PaymentService service = GetService(mockRepository, mockHttpHandler); AuthorizationOutput output = service.AuthorizeTransaction(input).Result; Assert.IsNotNull(output.TransactionOutput.Error); Assert.IsTrue(output.TransactionOutput.Error.Length > 0); }
public async Task <CreateAuthorizationPayload> CreateAuthorizationAsync( [Service] IOpenIddictApplicationStore <ApplicationAuthorization> service, AuthorizationInput input, CancellationToken cancellationToken) { var apiResource = input.Adapt <ApplicationAuthorization>(); await service.CreateAsync(apiResource, cancellationToken); return(new CreateAuthorizationPayload { Authorization = apiResource }); }