private static readonly string BaseWebUrl = "https://www.zarinpal.com"; //For debug and test. //private static readonly string BaseApiUrl = "https://api.zarinpal.com";//For publish. //private static readonly string BaseWebUrl = "https://www.zarinpal.com";//For publish. public static ZarinpalModelV4.Payment.Response PaymentRequest(ZarinpalModelV4.Payment.Request request) { HttpClient.DefaultRequestHeaders.Accept.Clear(); HttpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var serializeObject = JsonConvert.SerializeObject(request, GetSerializerSetting()); var stringContent = new StringContent(serializeObject, Encoding.UTF8, "application/json"); var httpResponseMessage = HttpClient.PostAsync($"{BaseApiUrl}/pg/v4/payment/request.json", stringContent).Result; if (httpResponseMessage.StatusCode == HttpStatusCode.BadGateway) { throw new ZarinpalException(httpResponseMessage.StatusCode, "Cannot contact Zarinpal Server"); } if ((int)httpResponseMessage.StatusCode >= 400 && (int)httpResponseMessage.StatusCode < 500) { throw new ZarinpalException(httpResponseMessage.StatusCode, "Cannot process the request due to bad request error."); } if ((int)httpResponseMessage.StatusCode >= 500) { throw new ZarinpalException(httpResponseMessage.StatusCode, "Zarinpal responded with an unknown error"); } var result = httpResponseMessage.Content.ReadAsStringAsync().Result; return(JsonConvert.DeserializeObject <ZarinpalModelV4.Payment.Response>(result, GetSerializerSetting())); }
public IActionResult PaymentV4(int id) { var product = TestDatabase.GetById(id); var request = new ZarinpalModelV4.Payment.Request { MerchantId = TestMerchantIdV4, Amount = product.Amount * 10, // V4 in Rials CallbackUrl = $"{Request.Scheme}://{Request.Host}/Home/CallbackV4/{product.Id}", Description = $"Pay for {product.Name} product.", Metadata = new ZarinpalModelV4.Payment.RequestMetadata // Either none, or all { Email = "*****@*****.**", Mobile = null } }; var response = RestApiV4.PaymentRequest(request); if (response.Data.Code == 100) { var gatewayLink = RestApiV4.GenerateGatewayLink(response.Data.Authority); return(Redirect(gatewayLink)); } TempData["Message"] = response.Data.Code; return(View("Index")); }