/// <summary> /// Get the payment URL from NGenius. /// </summary> /// <param name="context">The payment context.</param> /// <param name="configuration">The payment configuration.</param> /// <returns></returns> public virtual string GetPaymentUrl(NGeniusConfiguration configuration, OrderInfo order) { var token = GetAccessToken(configuration); var url = CreateOrder(configuration, token, order); return(url); }
/// <summary> /// Get the payment status from NGenius. /// </summary> /// <param name="context">The Http context.</param> /// <param name="configuration">The payment configuration.</param> /// <param name="reference">NGenius order reference.</param> /// <returns></returns> public virtual string GetPaymentStatus(HttpContextBase context, NGeniusConfiguration configuration) { var reference = context.Request.QueryString[NGeniusConstants.ApiQueryStringRef]; var token = GetAccessToken(configuration); var url = new Uri(GetPaymentBaseUrl(configuration), string.Format(NGeniusConstants.ApiUrl.OrderStatus, configuration.OutletId, reference)); var client = new RestClient(url); var request = new RestRequest(Method.GET); request.AddHeader("authorization", string.Format(NGeniusConstants.ApiauthorizationMode.Bearer, token)); request.AddHeader("accept", NGeniusConstants.ApiPaymentAcceptJson); IRestResponse response = client.Execute(request); if (response.StatusCode == HttpStatusCode.OK) { var status = JsonConvert.DeserializeObject <OrderStatusResponse>(response.Content); return(status.Embedded.Payment.First().State); } else { throw new Exception("Error while getting the order status", response.ErrorException); } }
/// <summary> /// Get the payment URL. /// </summary> /// <param name="configuration">The payment configuration.</param> /// <returns></returns> private Uri GetPaymentBaseUrl(NGeniusConfiguration configs) { if (!configs.IsTest) { return(new Uri("https://api-gateway.ngenius-payments.com/")); } else { return(new Uri("https://api-gateway.sandbox.ngenius-payments.com/")); } }
/// <summary> /// Request an access token /// </summary> /// <param name="configuration">The payment configuration.</param> /// <returns>Returns the authentication key from BPoint.</returns> private string GetAccessToken(NGeniusConfiguration configuration) { var url = new Uri(GetPaymentBaseUrl(configuration), NGeniusConstants.ApiUrl.AccessToken); var client = new RestClient(url); var request = new RestRequest(Method.POST); request.AddHeader("accept", NGeniusConstants.ApiIdentityAcceptJson); request.AddHeader("content-type", NGeniusConstants.ApiIdentityAcceptJson); request.AddHeader("authorization", string.Format(NGeniusConstants.ApiauthorizationMode.Basic, configuration.APIKey)); IRestResponse response = client.Execute(request); if (response.StatusCode == HttpStatusCode.OK) { var token = JsonConvert.DeserializeObject <AccessTokenResponse>(response.Content); return(token.AccessToken); } else { throw new Exception("Error while getting the token", response.ErrorException); } }
/// <summary> /// Create order in PSP side. /// </summary> /// <param name="context">The payment context.</param> /// <param name="configuration">The payment configuration.</param> /// <param name="token"></param> /// <returns></returns> private string CreateOrder(NGeniusConfiguration configuration, string token, OrderInfo orderInfo) { var order = new CreateOrderRequest() { Action = NGeniusConstants.ApiOrderType.SALE, Amount = orderInfo.Amount, MerchantAttributes = new MerchantAttributes() { RedirectUrl = configuration.RedirectUrl, CancelUrl = configuration.CancelUrl, SkipConfirmationPage = configuration.SkipConfirmationPage, Skip3DS = configuration.Skip3DS }, EmailAddress = "*****@*****.**" }; var url = new Uri(GetPaymentBaseUrl(configuration), string.Format(NGeniusConstants.ApiUrl.CreateOrder, configuration.OutletId)); var client = new RestClient(url); var request = new RestRequest(Method.POST); request.AddHeader("accept", NGeniusConstants.ApiPaymentAcceptJson); request.AddHeader("content-type", NGeniusConstants.ApiPaymentAcceptJson); request.AddHeader("authorization", "Bearer " + token); var requestBody = JsonConvert.SerializeObject(order); request.AddParameter(NGeniusConstants.ApiPaymentAcceptJson, requestBody, ParameterType.RequestBody); IRestResponse response = client.Execute(request); if (response.StatusCode == HttpStatusCode.Created) { var orderResponse = JsonConvert.DeserializeObject <CreateOrderResponse>(response.Content); return(orderResponse.Links.Payment.Href.AbsoluteUri); } else { throw new Exception("Error while creating the order", response.ErrorException); } }