NODEJS/PHP WSDL SOAP:对象引用未设置为对象的实例

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

未捕获的SoapFault异常:[a:InternalServiceFault]对象引用未设置为对象的实例。排队

已经有很多问题与此相关,但我无法使它的工作,所以张贴这个可能的重复再次

我在请求中遗漏了一些东西,但无法找到它。感谢您的帮助

我在PHP和NodeJS中都试过了,但在这两个版本中都出现了相同的错误

<?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中声明,所以我是基于您的结构