// POST: api/CompleteTransaction public CompleteTransactionResponse Post([FromBody] CompleteTransactionRequest completeTransactionRequest) { SalePersistence sp = new SalePersistence(); int result = sp.updateTransactionStatus(completeTransactionRequest); CompleteTransactionResponse completeTransactionResponse = new CompleteTransactionResponse(); completeTransactionResponse.status = result.ToString(); return(completeTransactionResponse); }
// POST: api/DoTransaction public async System.Threading.Tasks.Task <JObject> Post([FromBody] DoTransactionRequest doTransactionRequest) { Utilities util = new Utilities(); SalePersistence sp = new SalePersistence(); PosnetRequest posnetRequest = sp.selectTransactionByGuid(Convert.ToInt64(doTransactionRequest.guid)); //merchant,terminal,amount dbden çekip doldu. //ApiType,ApiVersion ,IsMailOrder,PaymentInstrumentType,currencycode obje oluşurken doldu. posnetRequest.ApiType = "JSON"; posnetRequest.ApiVersion = "1.0.0.0"; posnetRequest.IsMailOrder = "N"; posnetRequest.PaymentInstrumentType = "CARD"; posnetRequest.CurrencyCode = "TL"; posnetRequest.OrderId = "MPOS_" + doTransactionRequest.guid.PadLeft(19, '0');//üret posnetRequest.CardInformationData = new CardInformationData(); posnetRequest.CardInformationData.CardNo = doTransactionRequest.card_no; posnetRequest.CardInformationData.Cvc2 = doTransactionRequest.cvc2; posnetRequest.CardInformationData.ExpireDate = doTransactionRequest.expire_date; posnetRequest.InstallmentCount = doTransactionRequest.installment_num; if (doTransactionRequest.installment_num > 0) { posnetRequest.InstallmentType = "Y"; } else { posnetRequest.InstallmentType = "N"; } //Get values from WebConfig string encryptionKey = ConfigurationManager.AppSettings["EncryptionKey"].ToString(); posnetRequest.MACParams = "MerchantNo:TerminalNo:CardNo:Cvc2:ExpireDate"; string merchantNo = ConfigurationManager.AppSettings["MerchantNo"].ToString(); string terminalNo = ConfigurationManager.AppSettings["TerminalNo"].ToString(); string macCheck = merchantNo.Trim() + terminalNo.Trim() + doTransactionRequest.card_no + doTransactionRequest.cvc2 + doTransactionRequest.expire_date + encryptionKey.Trim();//util.generateMac(posnetRequest) + encryptionKey.Trim(); string k = util.generateMac(posnetRequest) + encryptionKey.Trim(); if (macCheck == k) { string a = ";"; } var sha = new SHA256CryptoServiceProvider(); var hashedMacCheck = Convert.ToBase64String(sha.ComputeHash(Encoding.UTF8.GetBytes(macCheck))); posnetRequest.MAC = hashedMacCheck; sha.Clear(); //posnetRequest.MAC = util.generateMac(posnetRequest); //TripleDESCustom tripleDES = new TripleDESCustom(); //string macString = util.generateMac(posnetRequest); //var EncHashMacString = tripleDES.Encrypt(encryptionKey, macString, CipherMode.CBC); //posnetRequest.MAC = EncHashMacString; ////abdullah abinin servisini çağır posnetRequest ile,responsu ile de gelsin using (HttpClient client = new HttpClient()) { string serviceUrl = "https://posnetict.yapikredi.com.tr/MerchantService/MerchantJSONAPI.svc/Sale"; string serviceUrlMerchant = "https://posnetict.yapikredi.com.tr/MerchantBE/api/CompleteTransaction"; client.DefaultRequestHeaders.Clear(); var username = "******"; var password = "******"; client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes($"{username}:{password}"))); JObject payLoad = new JObject( new JProperty("ApiType", posnetRequest.ApiType), new JProperty("ApiVersion", posnetRequest.ApiVersion), new JProperty("MAC", posnetRequest.MAC), new JProperty("MACParams", posnetRequest.MACParams), new JProperty("MerchantNo", posnetRequest.MerchantNo), new JProperty("TerminalNo", posnetRequest.TerminalNo), new JProperty("CardInformationData", new JObject( new JProperty("CardHolderName", "MEHMET EMIN TOPRAK"), new JProperty("CardNo", posnetRequest.CardInformationData.CardNo), new JProperty("Cvc2", posnetRequest.CardInformationData.Cvc2), new JProperty("ExpireDate", posnetRequest.CardInformationData.ExpireDate) ) ), new JProperty("IsMailOrder", posnetRequest.IsMailOrder), new JProperty("IsTDSecureMerchant", null), new JProperty("PaymentInstrumentType", posnetRequest.PaymentInstrumentType), new JProperty("Amount", posnetRequest.Amount), new JProperty("CurrencyCode", posnetRequest.CurrencyCode), new JProperty("OrderId", posnetRequest.OrderId), new JProperty("InstallmentCount", posnetRequest.InstallmentCount.ToString()), new JProperty("InstallmentType", posnetRequest.InstallmentType), new JProperty("PointAmount", null) ); var httpContent = new StringContent(payLoad.ToString(), Encoding.UTF8, "application/json"); using (HttpResponseMessage response = await client.PostAsync(serviceUrl, httpContent)) { try { response.EnsureSuccessStatusCode(); // Handle success } catch (HttpRequestException e) { // Handle failure } int timeflag = 0; JObject jsonResponse = new JObject(); string errorCode = ""; string errorDesc = ""; string status = "P"; string merchant_transaction_guid = ""; string responseBody = await response.Content.ReadAsStringAsync(); if (responseBody != "") { //gelen response daki bank_transaction_guid i where guid i mrcguid olanla dbde update et,tokendatayıda update et şekerim //"{\"ServiceResponseData\":{\"ResponseCode\":\"E216\",\"ResponseDescription\":\"Mac Doğrulama hatalı\"},\"AuthCode\":null,\"ReferenceCode\":null,\"PointDataList\":null,\"InstallmentData\":null,\"MessageData\":null}" JObject json = JObject.Parse(responseBody); errorCode = json["ServiceResponseData"]["ResponseCode"].ToString().PadLeft(7, '0'); errorDesc = json["ServiceResponseData"]["ResponseDescription"].ToString(); /*Cevap Gelmişse, Insert YKBDMZ Log*/ sp.insertTransactionLog("doSale-YKBDMZ", responseBody, payLoad.ToString(), Convert.ToInt64(doTransactionRequest.guid), serviceUrl);//string methodName, string responseJson, string requestJson, long guidOrginal } if (errorCode == "0000000") { status = "C"; //başarılı } else { status = "E"; //hatalı } //bankanın işlem statüsünü günceller sp.updateTransactionStatus(status, Convert.ToInt64(doTransactionRequest.guid)); //merchant_ın guidsi elimde zaten merchant_transaction_guid = sp.selectMerchantGuidByGuid(Convert.ToInt64(doTransactionRequest.guid)); //MerchantBE servisini çağır JObject jsonMerchant = new JObject( new JProperty("status", status), new JProperty("merchant_guid", merchant_transaction_guid)); httpContent = new StringContent(jsonMerchant.ToString(), Encoding.UTF8, "application/json"); using (HttpResponseMessage responseMerchant = await client.PostAsync(serviceUrlMerchant, httpContent)) { try { responseMerchant.EnsureSuccessStatusCode(); // Handle success } catch (HttpRequestException e1) { // Handle failure } string responseBodyMerchant = await response.Content.ReadAsStringAsync(); } // "{\"ServiceResponseData\":{\"ResponseCode\":\"E216\",\"ResponseDescription\":\"Mac Doğrulama hatalı\"},\"AuthCode\":null,\"ReferenceCode\":null,\"PointDataList\":null,\"InstallmentData\":null,\"MessageData\":null}" jsonResponse = new JObject( new JProperty("error_code", errorCode), new JProperty("error_desc", errorDesc), new JProperty("token_data", ""), new JProperty("bank_transaction_guid", "")); /*Cevap Gelmişse, Insert YKBDMZ Log*/ sp.insertTransactionLog("MerchantBECompleteTransaction", jsonResponse.ToString(), jsonMerchant.ToString(), Convert.ToInt64(doTransactionRequest.guid), serviceUrlMerchant);//string methodName, string responseJson, string requestJson, long guidOrginal return(jsonResponse); } } }