You need to enable JavaScript to run this app. WSO2 3.2.0使用Call Mediator调用Magento 2.4.1 API报错如何解决
优惠活动
大模型
产品
解决方案
定价
更多

WSO2 3.2.0使用Call Mediator调用Magento 2.4.1 API报错如何解决

问题根因

你遇到的二次请求问题是WSO2 APIM的默认请求处理流程导致的:WSO2 APIM默认的请求流转逻辑为「执行自定义in序列 -> 转发请求到配置的生产端点 -> 执行out序列 -> 返回响应给客户端」。你在in序列中使用的call mediator只是额外发起了一次Magento token请求,并不会终止默认的转发流程,因此在你的自定义序列执行完成后,网关还会发起第二次请求到你配置的Magento生产端点,此时请求体已经不是你用payloadFactory构造的用户名密码内容,所以Magento返回参数缺失错误,该错误响应最终被返回给客户端。
你之前使用To头配置可以正常返回,是因为该方式直接修改了默认转发的目标地址,仅会发起一次请求,没有二次转发的问题,但这种方案无法支持多步服务链调用。

解决方案

只需要在你的自定义序列所有业务逻辑执行完成后,添加respond mediator终止后续的默认转发流程,直接将当前消息体作为响应返回给客户端即可。

修改后的序列示例

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="service_chain_request_magento" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <property action="remove" name="REST_URL_POSTFIX" scope="axis2"/>
    <property name="FORCE_HTTP_1.0" scope="axis2" type="STRING" value="true"/>
    <property name="DISABLE_CHUNKING" scope="axis2" type="STRING" value="true"/>
    <payloadFactory media-type="json">
        <format>{"username":"<username>","password":"<pwd>"}</format>
        <args/>
    </payloadFactory>
    <property name="messageType" value="application/json" scope="axis2"/>
    <call blocking="true">
        <endpoint>
            <http method="post" uri-template="http://<magento_ip>/index.php/rest/all/V1/integration/admin/token">
                <timeout>
                    <duration>6000</duration>
                    <responseAction>fault</responseAction>
                </timeout>
            </http>
        </endpoint>
    </call>
    <enrich>
       <source type="body" clone="true"/>
       <target type="property" action="child" property="body_of_first_call"/>
    </enrich>
    <log level="full"/>
    <!-- 新增配置:设置响应状态码为200 -->
    <property name="HTTP_SC" scope="axis2" value="200" type="STRING"/>
    <!-- 新增配置:终止后续默认转发,直接返回当前响应给客户端 -->
    <respond/>
</sequence>
服务链扩展说明

如果你需要追加更多call mediator实现多步服务调用,不需要修改现有逻辑,只需在respond mediator之前添加后续的调用逻辑即可:

  • 可以从body_of_first_call属性中提取已经拿到的token
  • 用payloadFactory构造下一个接口的请求参数
  • 新增call mediator调用Magento其他业务接口
  • 所有调用完成并构造好最终返回给客户端的响应体后,再执行respond终止流程即可。

内容的提问来源于stack exchange,提问作者hubfix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 09:48:03