Inhalte aufrufen

Profilbild

Kundenimport OData Provider

webapi odata

  • Bitte melden Sie sich an, um eine Antwort zu verfassen.
4 Antworten zu diesem Thema

#1 Bertwin

Bertwin

    Newbie

  • Members
  • 3 Beiträge

Geschrieben: 13 April 2016 - 12:21

Hallo zusammen,

 

wir möchten über den OData Provider Kunden importieren.

Der Zugriff in einem c# Projekt erfolgt über eine Service Referenz zum ../odata/v1/$metadata

Das Abfragen der Daten klappt soweit. Beim Anlegen von Daten mit z. B. AddToCustomers() und SaveChanges(), bekomme ich immer ein "Unauthorized" zurück.

 

Die Dokumentation und Beispiele dazu (https://github.com/s...rtStoreNET/wiki ) ist sehr lückenhaft. 

Gibt es Beispiele wie man z.B. Kunden, Produkte, usw. über den OData Provider anlegt? Das wäre sehr hilfreich.

 

Danke und viele Grüße

Bertwin



#2 Murat Cakir

Murat Cakir

    SmartStore AG

  • Administrators
  • 1103 Beiträge

Geschrieben: 13 April 2016 - 16:01

Die offizielle Dokumentation zur WebApi findest du unter http://docs.smartsto...play/SD/Web API. Der Inhalt im GitHub-Wiki ist veraltet und wird bald gelöscht werden. Das Unauthorized Result deutet darauf hin, dass die HMAC Authentifizierung nicht durchgeführt wurde.


Murat Cakir
SmartStore AG


#3 Bertwin

Bertwin

    Newbie

  • Members
  • 3 Beiträge

Geschrieben: 15 April 2016 - 10:59

Danke für die Antwort.

Daten auslesen ist über die WebAPI direkt kein Problem, Authorisierung usw klappt.

 

Beim Versuch einen Kunden anzulegen bekomme ich immer ein 500 zurück. :(

Kann mir jemand sagen was ich hier falsch mache????


C# Console .....
 
using System.Security.Cryptography;
 
  static void Main(string[] args)
  {
      InsertCustomer();
   }
 
        private static void InsertCustomer()
        {
            string content = "{\"CustomerGuid\":\"65d1fca9-a7c7-4bbe-9e91-38165d20d491\"," +
                "\"Username\":\"DevAdmin2\"," +
                "\"Email\":\"b.bartha2@itatbusiness.de\"," +
                "\"IsTaxExempt\":false," +
                "\"AffiliateId\":0," +
                "\"Active\":true," +
                "\"IsSystemAccount\":false," +
                "\"Id\":39}";
            
            byte[] data = Encoding.UTF8.GetBytes(content);
            string contHash = CreateContentMd5Hash(data);
 
            string publicKey = "687d2b629ce9eef4f05c1415437c1fa0";
            string secretKey = "47bd9250f6f2914815ddf056e6ae884f";
            string method = "post";
            string accept = "application/json, text/javascript, */*";
            string timestamp = DateTime.UtcNow.ToString("o");   // 2013-11-11T10:15:54.1731069Z
            string url = "http://store/odata/v1/Customers";
 
            string messageRepresentation = string.Join("\n",
                method.ToLower(),
                contHash,
                accept.ToLower(),
                url.ToLower(),
                timestamp,
                publicKey.ToLower()
            );
            Console.WriteLine(messageRepresentation);
 
            string signature = CreateSignature(secretKey, messageRepresentation);   // hWce6V2KA0kkB0GBbIK0GSw5QAcS3+vj+m+WN/8k9EE=
 
            var request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = method;
            request.UserAgent = "My shopping data consumer v.1.0";
            request.Accept = accept;
            request.Headers.Add("Accept-Charset", "UTF-8");
            request.Headers.Add("SmartStore-Net-Api-PublicKey", publicKey);
            request.Headers.Add("SmartStore-Net-Api-Date", timestamp);
            request.Headers.Add("Authorization", "SmNetHmac1 " + signature);
            request.ContentType = "application/json; charset=utf-8";
            request.ContentLength = data.Length;
            request.Headers.Add("Content-MD5", contHash); //optional            
 
            for (int i = 0; i < request.Headers.Count; i++)
            {
                Console.WriteLine("H {0} {1}", request.Headers.GetKey(i), request.Headers.GetValues(i)[0]);
            }
 
            using (var stream = request.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }
 
            WebResponse response = request.GetResponse();   //<- Exception: 500
 
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            var dataStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);
            Console.WriteLine(reader.ReadToEnd());
 
        }
 
 
 
        public static string CreateContentMd5Hash(byte[] content)
        {
            string result = "";
            if (content != null && content.Length > 0)
            {
                using (var md5 = MD5.Create())
                {
                    byte[] hash = md5.ComputeHash(content);
                    result = Convert.ToBase64String(hash);
                }
            }
            return result;
        }
 
        public static string CreateSignature(string secretKey, string messageRepresentation)
        {
            if (string.IsNullOrWhiteSpace(secretKey) || string.IsNullOrWhiteSpace(messageRepresentation))
                return "";
            string signature;
            var secretBytes = Encoding.UTF8.GetBytes(secretKey);
            var valueBytes = Encoding.UTF8.GetBytes(messageRepresentation);
 
            using (var hmac = new HMACSHA256(secretBytes))
            {
                var hash = hmac.ComputeHash(valueBytes);
                signature = Convert.ToBase64String(hash);
            }
            return signature;
        }


#4 Marcus Gesing

Marcus Gesing

    SmartStore AG

  • Administrators
  • 3424 Beiträge

Geschrieben: 15 April 2016 - 12:08

Die Angabe einer genauen Fehlermeldung wäre hilfreich. Das Feld Id musst bei POST weggelassen werden, da Id durch die Datenbank vergebener Primärschlüssel. Beispiel:
POST http://localhost:1242/odata/v1/Customers
{"CustomerGuid":"e247521b-6251-42a3-8c34-ed114049986a","Username":"DevAdmin2","Email":"b.bartha2@itatbusiness.de","IsTaxExempt":false,"AffiliateId":0,"Active":true,IsSystemAccount:false,"CreatedOnUtc":"2016-04-15T10:00:00","LastActivityDateUtc":"2016-04-15T10:00:00"}

Schöne Grüße aus Düsseldorf,
Marcus Gesing


#5 Bertwin

Bertwin

    Newbie

  • Members
  • 3 Beiträge

Geschrieben: 15 April 2016 - 12:59

 

Die Angabe einer genauen Fehlermeldung wäre hilfreich. Das Feld Id musst bei POST weggelassen werden, da Id durch die Datenbank vergebener Primärschlüssel. Beispiel:
POST http://localhost:1242/odata/v1/Customers
{"CustomerGuid":"e247521b-6251-42a3-8c34-ed114049986a","Username":"DevAdmin2","Email":"b.bartha2@itatbusiness.de","IsTaxExempt":false,"AffiliateId":0,"Active":true,IsSystemAccount:false,"CreatedOnUtc":"2016-04-15T10:00:00","LastActivityDateUtc":"2016-04-15T10:00:00"}

 

 

Das wars, lag nur an der ID, danke!

Habe leider nur ein "500 (Internen Server Fehler)" zurückbekommen und auf die IIS Logs hab ich z. Zt. keinen Zugriff.

 

Schönes Wochenende!




Auch markiert mit einem oder mehrerer dieser Schlüsselwörter: webapi, odata