private string GetSoapDataOrderRequest(SoapDataCheckOrderRequest soapDataCheckOrderRequest, string privateKey, string publicKey, out string sign) { var soapDataOrderRequestJson = JsonConvert.SerializeObject(soapDataCheckOrderRequest); var rsa = new RSAHelper(RSAType.RSA, Encoding.UTF8, privateKey, publicKey); sign = rsa.Sign(soapDataOrderRequestJson); return(soapDataOrderRequestJson); }
public async Task <IActionResult> SaveTest(string orderRequest) { var viettelPayApi = _configuration.GetValue <bool>("RequestPaymentLink:IsLive") ? _configuration.GetValue <string>("RequestPaymentLink:Live") : _configuration.GetValue <string>("RequestPaymentLink:Test"); var cmd = _configuration.GetValue <string>("RequestPaymentParam:cmdCheckOrderRequest"); var rsaPublicKey = _configuration.GetValue <string>("RSAKey:public"); var rsaPrivateKey = _configuration.GetValue <string>("RSAKey:private"); var rsaPublicKeyVTP = _configuration.GetValue <string>("RSAKey:VTPpublic"); var rsa = new RSAHelper(RSAType.RSA, Encoding.UTF8, "", rsaPublicKeyVTP); var passwordEncrypt = rsa.Encrypt(_configuration.GetValue <string>("RequestPaymentParam:password")); SoapDataCheckOrderRequest request = new SoapDataCheckOrderRequest() { username = _configuration.GetValue <string>("RequestPaymentParam:username"), password = passwordEncrypt, serviceCode = _configuration.GetValue <string>("RequestPaymentParam:serviceCode"), orderId = orderRequest }; var response = await _viettelPay.CheckOrderRequest(viettelPayApi, cmd, rsaPublicKey, rsaPrivateKey, rsaPublicKeyVTP, request); return(new OkObjectResult(response)); }
public async Task <string> CheckOrderRequest(string apiURL, string cmd, string rsaPublicKey, string rsaPrivateKey, string rsaPublicKeyVTP, SoapDataCheckOrderRequest soapDataCheckOrderRequest) { try { HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(@"" + apiURL + ""); webRequest.ContentType = "text/xml;charset=UTF-8;action=\"SOAP:Action\""; webRequest.Method = "POST"; webRequest.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true; var sign = string.Empty; var data = GetSoapDataOrderRequest(soapDataCheckOrderRequest, rsaPrivateKey, rsaPublicKey, out sign); XmlDocument soapEnvelopeXml = CreateSoapEnvelope(cmd, data, sign); var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger(); logger.Info("ViettelPay Check Order Request : Data: " + data); using (Stream stream = webRequest.GetRequestStream()) { soapEnvelopeXml.Save(stream); } using (WebResponse response = webRequest.GetResponse()) { using (StreamReader rd = new StreamReader(response.GetResponseStream())) { string soapResult = await rd.ReadToEndAsync(); var xDoc = XDocument.Parse(soapResult); var resultReturn = xDoc.Descendants("return").Single().Value; dynamic resultReturnJson = JObject.Parse(resultReturn); var soapData = resultReturnJson.data.ToString(); var soapSign = resultReturnJson.signature.ToString(); var rsa = new RSAHelper(RSAType.RSA, Encoding.UTF8, "", rsaPublicKeyVTP); var soapDataReplace = soapData.Replace(" \"", "\"").Replace(" \"", "\"").Replace("\r", "").Replace("\n", ""); var verifySign = rsa.Verify(soapDataReplace, soapSign); dynamic soapDataJson = JObject.Parse(soapData); // if (!verifySign) // { // logger.Error("ViettelPay Check Order Request Error: Code: " + soapDataJson.errorCode?.ToString() + ", Message: " + soapDataJson.errorMsg?.ToString() + ", Verify Sign: False"); // // return string.Empty; // } if (soapDataJson.errorCode.ToString() == "00") { logger.Info("ViettelPay Check Order Request : Status: Success"); return(soapDataJson.batchErrorCode.ToString()); } else { logger.Info("ViettelPay Check Order Request : Status: Fail"); } return(null); } } } catch (Exception e) { throw new ApplicationException("Check Request Error: " + e.Message); } }
public async Task CheckOrderRequestPendingTask() { try { var config = await _globalConfigurationService.GetValueConfig(Constants.Configuration.ProgramLocked); if (config.Contains("true")) { return; } var listorder = await _orderRequestService.GetAllOrderRequestByStatus(OrderRequestStatus.Pending); if (listorder != null && listorder.Count > 0) { var viettelPayApi = _configuration.GetValue <bool>("RequestPaymentLink:IsLive") ? _configuration.GetValue <string>("RequestPaymentLink:Live") : _configuration.GetValue <string>("RequestPaymentLink:Test"); var cmd = _configuration.GetValue <string>("RequestPaymentParam:cmdCheckOrderRequest"); var rsaPublicKey = _configuration.GetValue <string>("RSAKey:public"); var rsaPrivateKey = _configuration.GetValue <string>("RSAKey:private"); var rsaPublicKeyVTP = _configuration.GetValue <string>("RSAKey:VTPpublic"); var rsa = new RSAHelper(RSAType.RSA, Encoding.UTF8, "", rsaPublicKeyVTP); var passwordEncrypt = rsa.Encrypt(_configuration.GetValue <string>("RequestPaymentParam:password")); var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger(); logger.Info("Check Order Request Job : Start "); foreach (var orderRequest in listorder) { if (orderRequest.Amount > 0) { logger.Info("Check Order Request Job : orderRequestId = " + orderRequest.Id); SoapDataCheckOrderRequest request = new SoapDataCheckOrderRequest() { username = _configuration.GetValue <string>("RequestPaymentParam:username"), password = passwordEncrypt, serviceCode = _configuration.GetValue <string>("RequestPaymentParam:serviceCode"), orderId = orderRequest.Id.ToString() }; var response = await _viettelPay.CheckOrderRequest(viettelPayApi, cmd, rsaPublicKey, rsaPrivateKey, rsaPublicKeyVTP, request); if (response != null) { logger.Info("Check Order Request Job : orderRequestId = " + orderRequest.Id + " batchErrorCode : " + response); if (response == "DISB_SUCCESS") { orderRequest.Status = OrderRequestStatus.Success; await _orderRequestService.UpdateOrder(orderRequest); } else if (response == "DISB_FAILED" || response == "DISB_TIMEOUT" || response == "CANCEL_DISB") { orderRequest.Status = OrderRequestStatus.Failure; await _orderRequestService.UpdateOrder(orderRequest); await _fundTransactionHistoryService.WithdrawRollback(orderRequest.Amount, orderRequest.PhoneNumber); } } else { logger.Info("Check Order Request Job : orderRequestId = " + orderRequest.Id + " ErrorCode != 0 "); orderRequest.Status = OrderRequestStatus.Failure; await _orderRequestService.UpdateOrder(orderRequest); await _fundTransactionHistoryService.WithdrawRollback(orderRequest.Amount, orderRequest.PhoneNumber); } } } } } catch (Exception e) { throw new ApplicationException("Check Order Request Error: " + e.Message); } }