コード例 #1
0
ファイル: ViettelPay.cs プロジェクト: noname9xndz/fund21
        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);
        }
コード例 #2
0
        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));
        }
コード例 #3
0
ファイル: ViettelPay.cs プロジェクト: noname9xndz/fund21
        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);
            }
        }
コード例 #4
0
ファイル: HangfireJob.cs プロジェクト: noname9xndz/fund21
        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);
            }
        }