c# मैं.Net अनुप्रयोग में Magento 2.0 SOAP API ऑब्जेक्ट के टोकन आधारित प्रमाणीकरण को कैसे कॉन्फ़िगर कर सकता हूं



web-services wsdl (1)

मैं नेट प्रक्षेपण Magento 2.0 SOAP API को नेट अनुप्रयोग में उपभोग करने की कोशिश कर रहा हूं। लेकिन नए संरचित अंतिम बिंदुओं के अनुसार wsdl परिवर्तन, फ़ंक्शन कॉल निष्पादन पूर्व संस्करण से थोड़ा अलग है ..

क्या किसी के हाथ में खपत और नेट एपीआई साबुन ऑब्जेक्ट फ़ंक्शन है, जो नेटुक 2.0 में है? नेट एप्लीकेशन ??

यदि हां आप उसी के कुछ स्निपेट कोड प्रदान कर सकते हैं

अग्रिम में धन्यवाद!


मैं अंत में Magento 2 SOAP एपीआई और .NET एक दूसरे से बात कर रहा था। यह चरण-दर-चरण है जो मेरे लिए काम करता है:

Magento 2 बैकएंड में

सिस्टम> एकीकृत> नया एकीकरण जोड़ें

केवल नाम और ईमेल भरें, क्योंकि हम सिर्फ अपनी खुद की दुकान पर वापस पोस्ट करना चाहते हैं और Magento आपके लिए टोकन और चाबियाँ सहेजने दें। अलग टैब पर एकीकरण के लिए अपनी अनुमतियां निर्धारित करने के लिए मत भूलना

नोट: यदि आप VM का उपयोग कर रहे हैं तो सुनिश्चित करें कि आपके / etc / hosts फ़ाइल में स्वयं के लिए एक प्रविष्टि है, क्योंकि वेब सर्वर वापस अपने आप में पोस्ट कर रहा होगा।

आपके पास प्रतिक्रिया में प्रदर्शित एक पहुंच टोकन होना चाहिए। इसके बाद के लिए एक नोट बनाओ

विजुअल स्टूडियो 2013 में

अपने प्रोजेक्ट समाधान एक्सप्लोरर में, संदर्भ को ठीक क्लिक करें और सेवा संदर्भ जोड़ें चुनें पता कुछ ऐसा होगा:

http://MyMagentoStore.com/soap/default?wsdl=1&services=catalogProductAttributeGroupRepositoryV1,catalogProductAttributeManagementV1

जहां सेवाओं = आप सेवाओं की एक अल्पविराम-सीमांकित सूची द्वारा उपभोग की जाती है

सभी उपलब्ध सेवाओं को देखने के लिए, अपने स्टोर में निम्नलिखित यूआरएल पर जाएं:

http://MyMagentoStore.com/soap/default?wsdl_list=1

मैं उन सभी को चुनने की अनुशंसा नहीं करता क्योंकि यह SOAP कॉल यूआरएल को बहुत लंबा बना देगा मैंने सेवाओं को सूचीपुस्तक, ग्राहक, आदि जैसे वर्गों में समूहबद्ध किया और प्रत्येक सेट के लिए सर्वव्यापी सेवाओं के संदर्भ तैयार किए।

अपने यूआरएल का निर्माण और इसे ऐड सर्विस रेफरेंस डायलॉग में चिपकाएं और गो क्लिक करें।

अगर आपने मुझे जैसी सेवाओं को तोड़ने का चुनाव किया है, तो बस प्रत्येक सेवा को एक अच्छा नाम स्थान दें मैं Magento2Soap.Customer, Magento2Soap.CatalogProduct आदि के साथ गया था। किसी भी मामले में, संवाद के निचले भाग पर एक नेमस्पेस चुनें और ठीक क्लिक करें। यह Magento से कनेक्ट करने के लिए कोड उत्पन्न करेगा।

वास्तव में Magento से सफलतापूर्वक बात कर रहा है

अब सबसे मुश्किल हिस्सा यह पता लगाने के लिए: वास्तव में इसे काम करने के लिए हो रही है

आपको अपने SOAP कॉल में उचित प्राधिकरण शीर्षलेख जोड़ने के लिए WCF पुस्तकालयों का उपयोग करना होगा। ऐसा करना स्पष्ट नहीं था। यहां एक स्निपेट है:

    var client = new customerCustomerRepositoryV1PortTypeClient();
    client.Endpoint.Binding = new BasicHttpBinding();

    HttpRequestMessageProperty hrmp = new HttpRequestMessageProperty();
    hrmp.Headers.Add("Authorization", "Bearer " + yourAccessToken);

    OperationContextScope contextScope = new OperationContextScope(client.InnerChannel);
    OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = hrmp;

    CustomerCustomerRepositoryV1GetByIdResponse response = client.customerCustomerRepositoryV1GetById(
        new CustomerCustomerRepositoryV1GetByIdRequest() { 
            customerId = 1 
        }
    );
    Console.WriteLine(response.result.firstname);

ध्यान दें कि आपको सिस्टम। सेवा मॉडेल के लिए एक प्रोजेक्ट संदर्भ जोड़ना होगा। आप यह अपने सोल्यूशन एक्सप्लोरर पर राइट-क्लिक रेफरल करके कर सकते हैं और फिर संदर्भ जोड़ें। यह मूल पुस्तकालयों की सूची में होगा।

मुझे प्रत्येक अलग तरह के कॉल के लिए बहुरूपता का उपयोग करने का एक शानदार तरीका नहीं मिला क्योंकि उत्पन्न वर्ग किसी भी आम वर्ग या इंटरफ़ेस से वंचित नहीं होते हैं, और मैं गतिशील प्रकार के पास नहीं जा रहा था। मैंने चीजों को सरल बनाने के लिए एक स्थैतिक वर्ग बना दिया:

public static class MagentoSOAP {

    private static BasicHttpBinding GetBinding() {
        return new BasicHttpBinding();
    }

    private static void AddAuthorizationHeader(IClientChannel clientChannel) {
        HttpRequestMessageProperty hrmp = new HttpRequestMessageProperty();
        hrmp.Headers.Add("Authorization", "Bearer " + Constants.MAGENTO_SOAP_ACCESS_TOKEN);

        OperationContextScope contextScope = new OperationContextScope(clientChannel);
        OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = hrmp;
    }

    public static customerCustomerRepositoryV1PortTypeClient Customer {
        get {
            var client = new customerCustomerRepositoryV1PortTypeClient();
            client.Endpoint.Binding = GetBinding();
            AddAuthorizationHeader(client.InnerChannel);
            return client;
        }
    }

    public static catalogProductRepositoryV1PortTypeClient Product {
        get {
            var client = new catalogProductRepositoryV1PortTypeClient();
            client.Endpoint.Binding = GetBinding();
            AddAuthorizationHeader(client.InnerChannel);
            return client;
        }
    }
}

और व्यवहार में:

var product = MagentoSOAP.Product.catalogProductRepositoryV1Get(new Magento2SOAP.CatalogProduct.CatalogProductRepositoryV1GetRequest() {
    sku = "My Product SKU"
});
int id = product.result.id;

मुझे आशा है कि यह मददगार है। मैं किसी भी सुधार या सुझाव का स्वागत करता हूं





wsdl