NODEJS/PHP WSDL SOAP:对象引用未设置为对象的实例
未捕获的SoapFault异常:[a:InternalServiceFault]对象引用未设置为对象的实例。排队 已经有很多问题与此相关,但我无法使它的工作,所以张贴这个可能的重复再次 我在请求中遗漏了一些东西,但无法找到它。感谢您的帮助 我在PHP和NodeJS中都试过了,但在这两个版本中都出现了相同的错误NODEJS/PHP WSDL SOAP:对象引用未设置为对象的实例,php,node.js,soap,wsdl,object-reference,Php,Node.js,Soap,Wsdl,Object Reference,未捕获的SoapFault异常:[a:InternalServiceFault]对象引用未设置为对象的实例。排队 已经有很多问题与此相关,但我无法使它的工作,所以张贴这个可能的重复再次 我在请求中遗漏了一些东西,但无法找到它。感谢您的帮助 我在PHP和NodeJS中都试过了,但在这两个版本中都出现了相同的错误 <?php $wsdl = 'http://test.eprabhu.com/Api/Utility.svc?wsdl'; $params = array( "UserN
<?php
$wsdl = 'http://test.eprabhu.com/Api/Utility.svc?wsdl';
$params = array(
"UserName" => "CLIENT",
"Password" => "CLIENT12",
"OperatorCode" => 2,
"MobileNumber" => "9803111111",
"Amount" => 100,
"PartnerTxnId" => "P2019042205330171261"
);
$client = new SoapClient($wsdl, ['trace' => true]);
print_r($client->__getFunctions());
// gives
// Array
// (
// [0] => MobileTopupResponse MobileTopup(MobileTopup $parameters)
// [1] => RechargePinsResponse RechargePins(RechargePins $parameters)
// ...
// )
print_r($client->__getTypes());
// gives
// Array
// (
// [0] => struct InputMobileTopup {
// string UserName;
// string Password;
// int OperatorCode;
// string MobileNumber;
// float Amount;
// string PartnerTxnId;
// }
// [1] => struct ReturnTransaction {
// string Code;
// string Message;
// string TransactionId;
// string Data;
// }
// ...
// )
// $r = $client->MobileTopup($params);
// or
$response = $client->__soapCall("MobileTopup", [$params]);
// gives error Object reference not set to an instance of an object
var_dump($response);
$xml = $soapClient->__getLastRequest();
print_r($xml);
// Also I tried using the class after looking into __getTypes result
$wsdl = 'http://test.eprabhu.com/Api/Utility.svc?wsdl';
class InputMobileTopup {
public function __construct($UserName, $Password, $OperatorCode, $MobileNumber, $Amount, $PartnerTxnId) {
$this->UserName = $UserName;
$this->Password = $Password;
$this->OperatorCode = $OperatorCode;
$this->MobileNumber = $MobileNumber;
$this->Amount = $Amount;
$this->PartnerTxnId = $PartnerTxnId;
}
}
$InputMobileTopup = new InputMobileTopup("CLIENT", "CLIENT12", 2, "9803111111", 1000, "P2019042205330171261");
print_r($InputMobileTopup);
$client = new SoapClient($wsdl, ['trace' => true]);
$response = $client->__soapCall("MobileTopup", [$InputMobileTopup]);
var_dump($response);
$xml = $soapClient->__getLastRequest();
print_r($xml);
// Still the same error.
任何帮助都将不胜感激。塔克斯。
请为NodeJS的答案排定优先级 根据您的WSDL,函数
MobileTopup
将MobileTopup
类型的消息作为参数:
Array
(
[0] => MobileTopupResponse MobileTopup(MobileTopup $parameters)
[1] => RechargePinsResponse RechargePins(RechargePins $parameters)
...
)
另一方面,类型MobileTopup
的定义如下:
Array
(
...
[85] => struct MobileTopup {
InputMobileTopup MobileTopupRequest;
}
...
)
因此,您必须像这样调用函数:
$response = $client->__soapCall("MobileTopup", ['MobileTopup' => ['MobileTopupRequest' => $params]]);
var requestArgs = {
MobileTopupRequest: {
UserName: 'CLIENT',
Password: 'CLIENT12',
OperatorCode: 2,
MobileNumber: '9803111111',
Amount: 100,
PartnerTxnId: 'P201904220218335187'
}
};
返回(根据您设置的参数)
我想node.js也是如此
更新
在node.js中,问题来自requestArgs
对象。应该是这样的:
$response = $client->__soapCall("MobileTopup", ['MobileTopup' => ['MobileTopupRequest' => $params]]);
var requestArgs = {
MobileTopupRequest: {
UserName: 'CLIENT',
Password: 'CLIENT12',
OperatorCode: 2,
MobileNumber: '9803111111',
Amount: 100,
PartnerTxnId: 'P201904220218335187'
}
};
对php来说很好,它起作用了。谢谢。。。但对于节点,它不起作用。我们需要生成信封并发送标题,但无法做到。@SanjayKhadka我已经更新了node.js的答案,请查看它是否有效。。。我遇到的唯一问题是,我像在php
{MobileTopup:MobileTopupRequest:{Username:..}中一样重新尝试了这种格式代码>我还为你的答案添加了一笔赏金…:)顺便说一句,你能解释一件事吗。您如何或我们如何了解查看xml wsdl的MobileToppupRequest请求参数格式。。有办法理解吗?@SanjayKhadka实际上它并没有在WSDL中声明,所以我是基于您的结构