Search code examples
apigeezoho

Custom Json to XML convert in PreFlow


I need help to create api Proxies that join 2 services Zoho Creator and ebay Trading API

Zoho Creator have possibility to send https POST with json but constructor in Zoho doesn’t support multilayer json (only simple pair), eBay trading api accept only https XML

I send simple json request

{“XMLDATA”:”<GeteBayOfficialTimeRequest xmlns="urn:ebay:apis:eBLBaseComponents">...}

i need to convert this into XML request with value of XMLDATA in the body and change type of Content-type: in the header to "text/xml"

When i post request from Zoho creator, i obtain in apigee Content-type: application/x-www-form-urlencoded Content-length: 234 Content: XMLDATA=%3CGeteBayOfficialTimeRequest+xmlns%3D%22urn%3Aebay%3Aapis%3AeBLBaseComponents%22%3E+%3CRequesterCredentials%3E+%3CeBayAuthToken%3EMyToken%3C%2FeBayAuthToken%3E+%3C%2FRequesterCredentials%3E+%3C%2FGeteBayOfficialTimeRequest%3E

Value of XMLDATA - url encoded.

Can someone help me how to get it work.

On exit i need:

Content-type: text/xml

Content like:

<?xml version="1.0" encoding="utf-8"?><GeteBayOfficialTimeRequest xmlns="urn:ebay:apis:eBLBaseComponents"><RequesterCredentials><eBayAuthToken>

Solution

  • well i get it works. In Zoho Creator

    headerMap = map();
    headerMap.put("X-EBAY-API-COMPATIBILITY-LEVEL", "855");
    headerMap.put("X-EBAY-API-DEV-NAME", "...");
    headerMap.put("X-EBAY-API-APP-NAME", "...");
    headerMap.put("X-EBAY-API-CERT-NAME", "...");
    headerMap.put("X-EBAY-API-SITEID", "3");
    headerMap.put("X-EBAY-API-CALL-NAME", "GetItem");
    token = “...”;
    reqMap = map();
    reqMap.put("token", token);
    reqMap.put("xmlns", "urn:ebay:apis:eBLBaseComponents");
    reqMap.put("body", "<ItemID>...itemid...</ItemID>");
    url = ".....apigeeurl......";
    resp = postUrl(url, reqMap, headerMap);
    

    1) ExtractVariables Policy

    <ExtractVariables async="false" continueOnError="false" enabled="true" name="extractform">
    <DisplayName>ExtractVar</DisplayName>
    <FaultRules/>
    <Properties/>
    <Header name="X-EBAY-API-CALL-NAME">
        <Pattern ignoreCase="false">{CallName}</Pattern>
    </Header>
    <FormParam name="token">
        <Pattern>{token}</Pattern>
    </FormParam>
    <FormParam name="xmlns">
        <Pattern>{xmlns}</Pattern>
    </FormParam>
      <FormParam name="body">
        <Pattern>{body}</Pattern>
    </FormParam>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <Source clearPayload="false">request</Source>
    </ExtractVariables>
    

    2) AssignMessage Policy to create new POST

    <AssignMessage async="false" continueOnError="false" enabled="true" name="getebayofficialtime">
    <DisplayName>FormXml</DisplayName>
    <FaultRules/>
    <Properties/>
    <Set>
        <Headers>
            <Header name="Content-type">text/xml</Header>
        </Headers>
        <Payload>
    &lt;?xml version="1.0" encoding="utf-8"?&gt;
    &lt;{CallName}Request xmlns="{xmlns}"&gt;
    &lt;RequesterCredentials&gt;
    &lt;eBayAuthToken&gt;{token}&lt;/eBayAuthToken&gt;
    &lt;/RequesterCredentials&gt;
    {body}
    &lt;/{CallName}Request&gt;
    </Payload>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>