Merhaba; Yazımıza hoş geldiniz umarım işinize yarar ben entegrasyon işlemini yaparken epey uğraştım. Arkadaşlar yardımcı oldu ama verdikleri kod örnekleri çok karmaşık geldi. Bende daha kolay bir kod yazmak istedim.
Şifreleme Kodumuz
Migros Yemek Entegrasyon işleminde veri çekerken şifreleme AES şifreleme istiyor bunu yapmazsanız veri çekmenize izin vermiyor. Aşağıdaki kodu projenize eklemeniz gerekiyor.
public static string AESEncrypt(string toEncrypt, string key) { if (string.IsNullOrWhiteSpace(toEncrypt)) return ""; byte[] keyArray = Encoding.UTF8.GetBytes(key); byte[] toEncryptArray = Encoding.UTF8.GetBytes(toEncrypt); RijndaelManaged rDel = new RijndaelManaged(); rDel.Key = keyArray; rDel.Mode = CipherMode.ECB; rDel.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = rDel.CreateEncryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Convert.ToBase64String(resultArray, 0, resultArray.Length); }
SSL/TLS Kısıtlamasını Aşmak için Kodumuz
Temel alınan bağlantı kapatıldı: SSL/TLS güvenli kanalı içi güven ilişkisi kurulamadı.
Yukarıdaki hatayı alırsanız veya sorgu sonucu boş döner ise hatayı aşmak için aşağıdaki kodu da projenize eklemeniz gerekiyor.
public class ServicePointManagerX509Helper : IDisposable { private readonly SecurityProtocolType _originalProtocol; public ServicePointManagerX509Helper() { _originalProtocol = ServicePointManager.SecurityProtocol; ServicePointManager.ServerCertificateValidationCallback += TrustingCallBack; } public void Dispose() { ServicePointManager.SecurityProtocol = _originalProtocol; ServicePointManager.ServerCertificateValidationCallback -= TrustingCallBack; } private bool TrustingCallBack(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { // The logic for acceptance of your certificates here return true; } }
Migros Yemek Entegrasyon Kodumuz
SecretKey, XApiKey, ŞubeID Bilgileri Migros Yemek tarafından verilecek. Kod sonucunda size string ifade dönüyor onuda artık kendiniz parçalayın bölün 🙂
private string MigrosYemekEntegrasyon() { string SecretKey = "Migros Yemek Tarafından Verilecek"; string XApiKey = "Migros Yemek Tarafından Verilecek"; string ŞubeID = "Migros Yemek Tarafından Verilecek"; string Cevap = string.Empty; using (new ServicePointManagerX509Helper()) { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; var data = new { storeIds = new[] { ŞubeID }, limit = "20", offset = "0" }; string data_string = JsonConvert.SerializeObject(data); var sifre = new { value = AESEncrypt(data_string, SecretKey) }; string sifre_string = JsonConvert.SerializeObject(sifre); var client = new RestClient("https://test.gourmet.migrosonline.com/Order/ActiveOrdersWithStores"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("XApiKey", XApiKey); request.AddHeader("ContentType", "application/json"); request.AddHeader("User-Agent", "HttpClientFactoryUsingSample"); request.AddParameter("application/json", sifre_string, ParameterType.RequestBody); IRestResponse response = client.Execute(request); Cevap = response.Content; } return Cevap; }
- Projenize Newtonsoft.Json ve RestSharp eklemeniz gerekiyor.
- Ben .NET 4.5.2 üzerinde çalışıyorum. Ama versiyon çok fark etmez eklentiler kuruldu ise.
- Ben sadece Aktif Siparişleri (ActiveOrdersWithStores) çekme sistemini gösterdim gerisi sizde 🙂
- Sorgulara bu link üzerinden bakabilirsiniz. https://documenter.getpostman.com/view/20885276/UzBpK64L