systemApi.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Net.Http;
  6. using ResfullApi.Models;
  7. using Newtonsoft.Json;
  8. using System.Data;
  9. using System.IO;
  10. using System.Xml;
  11. using Microsoft.AspNetCore.Mvc;
  12. namespace ApiProcess.Controllers
  13. {
  14. [ApiController]
  15. [Route("api/[controller]/[action]/data")]
  16. public class systemApi : ControllerBase
  17. {
  18. static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(systemApi));
  19. // {"msisdn":"50940227941","serviceId":"23","money":"2000"}
  20. [HttpPost]
  21. public IActionResult systemCharge([FromBody] dynamic sendData)
  22. {
  23. ////log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  24. ////log4net.Config.XmlConfigurator.Configure();
  25. responseObjUtil response = new responseObjUtil();
  26. response.status = "-1";
  27. response.message = "Err unknow";
  28. try
  29. {
  30. systemObjChargeRequest data = JsonConvert.DeserializeObject<systemObjChargeRequest>(sendData.ToString());
  31. logger.Info("New request income systemCharge :" + data.ToString());
  32. //lay ve thong tin cua CGW ung voi service
  33. DataSet ds_sv = systemDataAccess.SYS_GET_SERVICE_BY_ID(data.serviceId);
  34. logger.Info("Call database SYS_GET_SERVICE_BY_ID success:");
  35. if (ds_sv != null & ds_sv.Tables[0].Rows.Count > 0)
  36. {
  37. DataRow dr = ds_sv.Tables[0].Rows[0];
  38. string SV_CODE = dr["sv_code"].ToString();
  39. string sv_charg_shortcode = dr["sv_charg_shortcode"].ToString();
  40. string sv_command = dr["sv_command"].ToString();
  41. string sv_charg_url = dr["sv_charg_url"].ToString();
  42. string sv_charg_user = dr["sv_charg_user"].ToString();
  43. string sv_charg_pass = dr["sv_charg_pass"].ToString();
  44. string sv_char_timeout = dr["sv_char_timeout"].ToString();
  45. string sv_char_wscode = dr["sv_char_wscode"].ToString();
  46. string sv_charg_rawdata = dr["sv_charg_rawdata"].ToString();
  47. string sv_charg_gworder = dr["sv_charg_gworder"].ToString();
  48. string msisdn_temp = data.msisdn;
  49. string money = data.money;
  50. string reqid = SV_CODE + "_" + msisdn_temp+"_" + System.DateTime.Now.ToString("ddMMyyyyHHmmsss");
  51. string request = createdRequest(reqid, msisdn_temp, money, sv_charg_shortcode, sv_command, sv_charg_user, sv_charg_pass,
  52. sv_char_wscode, sv_charg_rawdata, sv_charg_gworder);
  53. logger.Info("Request :" + request);
  54. string resultPost = getContent(sv_charg_url, sv_char_timeout, request);
  55. logger.Info("Response :" + resultPost);
  56. string err_code_cmd = "-2000";
  57. string err_msg_cmd = "cmd err unknow";
  58. string ketqua = "-1000|unknow";
  59. string err_code = "-1000";
  60. string err_msg = "unknow";
  61. if (!string.IsNullOrEmpty(resultPost))
  62. {
  63. XmlDocument xmlDoc = new XmlDocument();
  64. xmlDoc.LoadXml(resultPost);
  65. err_code_cmd = xmlDoc.GetElementsByTagName("error").Item(0).InnerText;
  66. err_msg_cmd = xmlDoc.GetElementsByTagName("description").Item(0).InnerText;
  67. if (err_code_cmd == "0")
  68. {
  69. ketqua = xmlDoc.GetElementsByTagName("return").Item(0).InnerText;
  70. err_code = ketqua.Split('|')[0];
  71. err_msg = ketqua.Split('|')[1];
  72. logger.Info("send request id :" + reqid + " err_code: " + err_code + " err_msg: " + err_msg);
  73. }
  74. //update log charge
  75. DataSet ds_updateLog = systemDataAccess.SYS_UPDATE_LOG_CHARGE(data.msisdn, data.serviceId, data.money, err_code_cmd, err_msg_cmd, err_code, err_msg, data.isRenew);
  76. if (ds_updateLog != null & ds_updateLog.Tables[0].Rows.Count > 0)
  77. {
  78. response.status = ds_updateLog.Tables[0].Rows[0]["status"].ToString();
  79. response.message = ds_updateLog.Tables[0].Rows[0]["message"].ToString();
  80. }
  81. }
  82. }
  83. }
  84. catch (Exception ex)
  85. {
  86. logger.Info("Err:" + ex.ToString());
  87. }
  88. logger.Info("Responase to web: " + response.ToString());
  89. return Ok(response);
  90. }
  91. private string createdRequest(string requestid, string msisdn, string money, string shortcode, string command,
  92. string user, string pass, string sv_char_wscode, string sv_charg_rawdata, string sv_charg_gworder)
  93. {
  94. //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  95. //log4net.Config.XmlConfigurator.Configure();
  96. string request = "";
  97. try
  98. {
  99. string input = msisdn + "|" + shortcode + "|" + command + "|1|" + money + "|" + requestid;
  100. request = request + @"<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:web=""http://webservice.bccsgw.viettel.com/"">";
  101. request = request + @"<soapenv:Header/>";
  102. request = request + @"<soapenv:Body>";
  103. request = request + @"<web:gwOperation>";
  104. request = request + @"<Input>";
  105. request = request + @"<username>" + user + @"</username>";
  106. request = request + @"<password>" + pass + @"</password>";
  107. request = request + @"<wscode>" + sv_char_wscode + @"</wscode>";
  108. request = request + @"<param name=""GWORDER"" value=""" + sv_charg_gworder + @"""/>";
  109. request = request + @"<param name=""input"" value=""" + input + @"""/>";
  110. request = request + @"<rawData></rawData>";
  111. request = request + @"</Input>";
  112. request = request + @"</web:gwOperation>";
  113. request = request + @"</soapenv:Body>";
  114. request = request + @"</soapenv:Envelope>";
  115. }
  116. catch (Exception ex)
  117. {
  118. logger.Info("Err when create request: " + ex.ToString());
  119. }
  120. return request;
  121. }
  122. private string getContent(string api_path, string timeout, string xml)
  123. {
  124. //log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  125. //log4net.Config.XmlConfigurator.Configure();
  126. string rp = "";
  127. try
  128. {
  129. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(api_path);
  130. byte[] bytes;
  131. bytes = System.Text.Encoding.UTF8.GetBytes(xml);
  132. request.ContentType = "text/xml; encoding='utf-8'";
  133. request.ContentLength = bytes.Length;
  134. request.Method = "POST";
  135. request.Timeout = Convert.ToInt32(timeout);
  136. Stream requestStream = request.GetRequestStream();
  137. requestStream.Write(bytes, 0, bytes.Length);
  138. requestStream.Close();
  139. HttpWebResponse response;
  140. response = (HttpWebResponse)request.GetResponse();
  141. Stream responseStream = response.GetResponseStream();
  142. rp = new StreamReader(responseStream).ReadToEnd();
  143. }
  144. catch (Exception ex)
  145. {
  146. logger.Info("Err when post: " + ex.ToString());
  147. }
  148. return rp;
  149. }
  150. }
  151. }