You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js(Next.js)调用SOAP API并获取JSON响应方案咨询

在Next.js中调用SOAP API并将响应转为JSON格式

我来帮你调整代码,实现在Next.js中调用SOAP API并获取JSON响应的需求。你的原代码已经走对了第一步,但还有几个关键步骤需要补充——比如缺少SOAP API必需的请求头、没有解析响应的XML内容并转换为JSON。

第一步:安装XML转JSON的依赖

SOAP API返回的是XML格式,我们需要用xml2js库把它转换成JSON。在你的Next.js项目中安装这个依赖:

npm install xml2js
# 或者用yarn
yarn add xml2js

第二步:调整后的完整代码

下面是补全后的代码,包含请求头修正、XML解析和错误处理:

import xml2js from 'xml2js';

async function fetchHourlyTransactions() {
  // 注意替换为你的实际登录凭证
  const login = "your-actual-login";
  const password = "your-actual-password";

  const xml = `<?xml version='1.0' encoding='utf-8'?>
<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>
  <soap:Body>
    <HourlyTransactions xmlns='https://secure.myterminals.com/ConfigStatusSyncService'>
      <StartTime>2020-12-17 00:00</StartTime>
      <EndTime>2020-12-18 00:00</EndTime>
      <Login>${login}</Login>
      <Password>${password}</Password>
    </HourlyTransactions>
  </soap:Body>
</soap:Envelope>`;

  try {
    const res = await fetch("https://secure.myterminals.com/ConfigStatusSyncService/DataQuery.asmx", {
      method: "POST",
      headers: {
        "Content-Type": "text/xml; charset=utf-8",
        // SOAP API必需的头,指定要调用的方法
        "SOAPAction": "https://secure.myterminals.com/ConfigStatusSyncService/HourlyTransactions"
      },
      body: xml,
    });

    // 检查HTTP响应状态
    if (!res.ok) {
      throw new Error(`请求失败,状态码: ${res.status}`);
    }

    // 读取响应的XML文本内容
    const xmlResponse = await res.text();
    // 初始化XML解析器,配置让JSON结果更简洁
    const parser = new xml2js.Parser({ 
      explicitArray: false, // 避免单个元素被转成数组
      ignoreAttrs: true // 忽略XML中的属性
    });
    // 把XML转换成JSON
    const jsonResponse = await parser.parseStringPromise(xmlResponse);

    // 提取实际的业务数据(根据SOAP响应结构调整路径)
    const transactionData = jsonResponse['soap:Envelope']['soap:Body'].HourlyTransactionsResponse.HourlyTransactionsResult;
    console.log("JSON格式的交易数据:", transactionData);
    return transactionData;
  } catch (error) {
    console.error("调用SOAP API时出错:", error);
    throw error;
  }
}

// 示例:在Next.js的API路由中调用(pages/api/transactions.js 或 app/api/transactions/route.js)
export async function GET() {
  try {
    const data = await fetchHourlyTransactions();
    return Response.json(data);
  } catch (error) {
    return Response.json({ error: error.message }, { status: 500 });
  }
}

关键调整说明

  • 添加SOAPAction请求头:几乎所有SOAP API都要求这个头来明确指定要调用的方法,Postman会自动帮你填充,但手动发送请求时必须自己添加。这里的取值是你的方法命名空间加上方法名,和XML中的HourlyTransactions元素的命名空间一致。
  • 解析XML到JSON:使用xml2js的parseStringPromise方法异步解析XML,配置参数让生成的JSON结构更符合日常使用习惯——不会把单个节点转成数组,也不会保留XML的属性。
  • 错误处理:增加了HTTP状态检查和全局try-catch,方便你排查请求失败的原因(比如凭证错误、网络问题等)。
  • Next.js适配:如果是在客户端组件中调用这个函数,记得加上'use client'指令;如果遇到跨域问题,可以在next.config.js中配置反向代理,把请求转发到SOAP API地址。

注意事项

  • 务必替换代码中的your-actual-login和your-actual-password为你的真实凭证。
  • 如果API返回的XML结构和示例不同,需要调整提取数据的路径(比如打印jsonResponse查看完整结构后修改)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:08:14