Beispiel #1
0
        public string generateMac(PosnetRequest posnetRequest)
        {
            //MacParams: "MerchantNo:TerminalNo:CardNo:Cvc2:ExpireDate"  - EncryptionKey
            String[] splittedParameters = posnetRequest.MACParams.Split(':');
            String   macCheck           = "";

            foreach (var keyName in splittedParameters)
            {
                macCheck += getRequestDataValue(keyName, posnetRequest);
            }

            //byte[] hashMac = TripleDESCustom.sha256Hashing(macCheck);
            //var hashMacStr = Convert.ToBase64String(hashMac);

            return(macCheck);
        }
Beispiel #2
0
        public PosnetRequest selectTransactionByGuid(Int64 guid)
        {
            PosnetRequest   posnetRequest   = new PosnetRequest();
            MySqlDataReader rdr             = null;
            string          sqlStringInsert = "select merchant_no, terminal_no, amount from bank.bank_transaction where guid = " + guid;

            MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(sqlStringInsert, conn);
            rdr = cmd.ExecuteReader();
            if (rdr.Read())
            {
                posnetRequest.MerchantNo = rdr.GetString(0);
                posnetRequest.TerminalNo = rdr.GetString(1);
                posnetRequest.Amount     = (Convert.ToDouble(rdr.GetString(2)) * 100).ToString();
            }
            rdr.Close();
            return(posnetRequest);
        }
Beispiel #3
0
        public PosnetRequest selectTransactionByGuid(Int64 guid)
        {
            MySqlDataReader rdr             = null;
            PosnetRequest   posnetRequest   = new PosnetRequest();
            string          sqlStringInsert = "select MERCHANT_NO, TERMINAL_NO, AMOUNT from BANK_TRANSACTION where GUID = " + guid;

            MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand(sqlStringInsert, conn);
            rdr = cmd.ExecuteReader();
            if (rdr.Read())
            {
                posnetRequest.MerchantNo = rdr.GetString(0).ToString();
                posnetRequest.TerminalNo = rdr.GetString(1).ToString();
                posnetRequest.Amount     = (rdr.GetDecimal(2) * 100).ToString();
            }
            rdr.Close();
            return(posnetRequest);
        }
Beispiel #4
0
        private string getRequestDataValue(string keyName, PosnetRequest posnetRequest)
        {
            switch (keyName)
            {
            case "MerchantNo":
                return(posnetRequest.MerchantNo);

            case "TerminalNo":
                return(posnetRequest.TerminalNo);

            case "CardNo":
                return(posnetRequest.CardInformationData.CardNo);

            case "Cvc2":
                return(posnetRequest.CardInformationData.Cvc2);

            case "ExpireDate":
                return(posnetRequest.CardInformationData.ExpireDate);

            case "Amount":
                return(posnetRequest.Amount);
            }
            return(null);
        }
Beispiel #5
0
        // 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);
                }
            }
        }