开发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
相关产品推荐
相关产品推荐

