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

开发PHP网站集成SAP B1:如何用PHP通过DI Server连接B1WS?

我刚好做过类似的SAP B1与PHP的集成,给你整理一套可行的步骤和代码示例,帮你快速用PHP通过DI Server连接B1WS(Web Services):

前提准备

先把基础环境确认好,避免后续踩坑:

  • 确保SAP B1 DI Server已经安装并正常启动,B1WS也部署完成(一般DI Server安装目录下自带B1WS,需要配置好Web服务器比如IIS,保证WSDL地址可访问)
  • 验证B1WS的WSDL地址能正常打开,格式大概是 http://<你的DI服务器IP>:<端口>/B1WS/Service.asmx?wsdl
  • PHP环境必须开启soap扩展,你可以通过phpinfo()查看状态,没开的话去php.ini里开启extension=soap就行
步骤1:初始化SOAP客户端并完成登录

B1WS所有操作都需要先登录获取会话ID,后续请求必须带上这个ID才能通过验证。直接用PHP原生的SoapClient就可以实现:

<?php
// 替换成你的B1WS WSDL地址
$wsdlUrl = 'http://192.168.1.100:8080/B1WS/Service.asmx?wsdl';

// 初始化SOAP客户端,开启trace方便调试
$soapClient = new SoapClient($wsdlUrl, [
    'trace' => 1,
    'exceptions' => true,
    'cache_wsdl' => WSDL_CACHE_NONE // 避免缓存旧的WSDL定义
]);

// 登录参数,替换成你的实际信息
$loginData = [
    'CompanyDB' => 'SBODEMOUS', // 你的SAP公司数据库名
    'UserName' => 'manager',    // SAP B1登录账号
    'Password' => 'manager',    // 对应密码
    'Server' => '192.168.1.101',// SAP数据库服务器IP
    'DbServerType' => 'MSSQL2019', // 数据库类型,比如MSSQL/MySQL
    'Language' => 'ln_English'  // 可选,指定语言
];

try {
    // 调用登录接口
    $loginResponse = $soapClient->Login($loginData);
    $sessionId = $loginResponse->LoginResult->SessionID;
    echo "登录成功!会话ID:{$sessionId}\n";

    // 把会话ID设置到SOAP请求头,后续所有请求都会自动带上
    $sessionHeader = new SoapHeader(
        'http://www.sap.com/SBO/DIS',
        'SessionID',
        $sessionId
    );
    $soapClient->__setSoapHeaders($sessionHeader);
} catch (SoapFault $e) {
    die("登录失败:{$e->getMessage()}");
}
?>
步骤2:调用业务接口(示例:查询物料列表)

登录成功后,就可以调用B1WS提供的各种业务对象接口了,比如查询物料列表:

// 构建查询参数,空的ItemCode表示查询所有,也可以指定具体编码
$itemQuery = [
    'ItemParams' => [
        'ItemCode' => '',
        'ItemName' => ''
    ],
    'QueryParams' => [
        'TopCount' => 10, // 只返回前10条数据
        'SkipCount' => 0
    ]
];

try {
    $itemListResponse = $soapClient->GetList($itemQuery);
    // 遍历返回的物料数据
    foreach ($itemListResponse->GetListResult->Items->Item as $item) {
        echo "物料编码:{$item->ItemCode} | 物料名称:{$item->ItemName}\n";
    }
} catch (SoapFault $e) {
    die("查询物料失败:{$e->getMessage()}");
}
步骤3:断开会话(务必执行)

操作完成后,记得调用Logout接口释放会话资源,避免占用SAP的连接数:

try {
    $soapClient->Logout();
    echo "已成功退出会话\n";
} catch (SoapFault $e) {
    die("退出会话失败:{$e->getMessage()}");
}
踩过的坑&注意事项
  • 版本兼容:DI Server、B1WS和SAP B1服务器的版本必须一致,不然会出现各种奇怪的报错
  • 权限问题:确保你用的SAP B1账号有对应业务对象的操作权限(比如查询物料的权限)
  • 调试技巧:开启trace参数后,可以用$soapClient->__getLastRequest()和$soapClient->__getLastResponse()查看实际的XML请求和响应,方便排查参数错误
  • 复杂操作:如果是创建/修改业务对象(比如新建物料),一定要严格按照WSDL定义的字段结构传参,必填字段不能少

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:15:41