0

我需要帮助来创建加入 2 个服务 Zoho Creator 和 ebay Trading API 的 api 代理

Zoho Creator 可以使用 json 发送 https POST,但 Zoho 中的构造函数不支持多层 json(仅简单对),eBay 交易 api 仅接受 https XML

我发送简单的 json 请求

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

我需要将其转换为 XML 请求,正文中的值为 XMLDATA,并将标头中的 Content-type: 类型更改为“text/xml”

当我从 Zoho 创建者发布请求时,我在 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

XMLDATA 的值 - url 编码。

有人可以帮我如何让它工作。

退出时我需要:

Content-type: text/xml

内容如:

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

4 回答 4

2

看起来很简单,但如果我遗漏了什么,请告诉我。

1) ExtractVariables 政策

如果您的入站有效负载如下所示:

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

然后像这样进行 JSON 提取:

<JSONPayload>
    <Variable name="xmldata">
        <JSONPath>$.XMLDATA</JSONPath>
    </Variable>
</JSONPayload>

这仅在您的请求的 Content-Type 是 application/json 时才有效(如果您想强制它,请在它之前执行一个 AssignMessage 策略并且

<Set>
  <Headers>
    <Header name="Content-type">application/json</Header>
  </Headers>
</Set>

2)AssignMessage 策略创建新的 POST 有效负载

现在您有了一个名为 xmldata 的变量,您可以使用如下所示的 AssignMessage 策略创建新的请求消息:

  <Payload contentType="text/xml">
    &lt;?xml version="1.0" encoding="utf-8"?&gt;
    &lt;GeteBayOfficialTimeRequest xmlns="{xmldata}"&gt;
    &lt;RequesterCredentials&gt;
    &lt;eBayAuthToken&gt;
    </Payload>
  </Set>

请注意,您必须对 Payload XML 中的 < 和 > 进行转义(否则 Apigee 会尝试将其解析为配置 XML)并注意花括号中的 {xmldata} 变量。

如果您需要有关政策的更多详细信息,请访问 Apigee 文档的链接:

提取变量 http://apigee.com/docs/api-services/content/extract-message-content-using-extractvariables

分配消息 http://apigee.com/docs/api-services/content/extract-message-content-using-extractvariables

于 2014-01-24T00:54:48.947 回答
1

如果将 XML 放入 JSON 中,您需要确保 XML 被转义并正确处理。否则,您将获得无效的 JSON。如果可能,请尝试使用您需要的数据提交 JSON 请求,并且不要嵌入 XML。然后正如之前的答案所建议的:

  1. ExtractVariables使用策略和<JSONPath>配置 从 JSON 请求负载中提取所需信息。
  2. AssignMessage使用策略构建 XML 请求。
于 2014-01-24T01:15:44.417 回答
0

好吧,我明白了。在 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 政策

<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策略创建新的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>
于 2014-01-27T12:04:08.523 回答
0

试试 DefiantJS ( http://defiantjs.com ),它的功能可能对您有所帮助。其中,它使您能够使用 XPath 查询表达式搜索 JSON 结构,将 XML 转换为 JSON 结构或从 JSON 结构转换。

您可以在此处找到 DefiantJS 和 XPAth 示例:http:
//defiantjs.com/#xpath-evaluator

以这个 jsfiddle 为例;
http://jsfiddle.net/hbi99/Yc6cc/

var data = {
    "coupons":{
        "item1":{
            "id":"155",
            "name":"First Item",
            "value":-5199.6
        },
        "item2":{
            "id":"255",
            "name":"Second Item",
            "value":-424.91
        }
    }
},
res = JSON.search( data, '//*[id]' );
于 2014-01-25T21:16:22.077 回答