سؤال

أحاول إجراء مكالمة غير WSDL في PHP (5.2.5) مثل هذا. أنا متأكد من أنني أفتقد شيئا بسيطا. هذه المكالمة لديها معلمة واحدة، سلسلة، تسمى "timezone":

    $URL = 'http://www.nanonull.com/TimeService/TimeService.asmx';

    $client = new SoapClient(null, array(
        'location' => $URL,
        'uri'      => "http://www.Nanonull.com/TimeService/",
        'trace'    => 1,
        ));

// First attempt:
// FAILS: SoapFault: Object reference not set to an instance of an object
   $return = $client->__soapCall("getTimeZoneTime",
       array(new SoapParam('ZULU', 'timezone')),
       array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime')
    );

// Second attempt:
// FAILS: Generated soap Request uses "param0" instead of "timezone"
   $return = $client->__soapCall("getTimeZoneTime",
       array('timezone'=>'ZULU' ),
       array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime')
   );

شكرا لأي اقتراحات
-Dave.

هل كانت مفيدة؟

المحلول 2

شكرا. إليك المثال الكامل الذي يعمل الآن:

$URL = 'http://www.nanonull.com/TimeService/TimeService.asmx';

$client = new SoapClient(null, array(
    'location' => $URL,
    'uri'      => "http://www.Nanonull.com/TimeService/",
    'trace'    => 1,
    ));

$return = $client->__soapCall("getTimeZoneTime",
   array(new SoapParam('ZULU', 'ns1:timezone')),
   array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime')
);

نصائح أخرى

لم يعمل حل Dave C بالنسبة لي. تبحث حولها توصلت إلى حل آخر:

$URL = 'http://www.nanonull.com/TimeService/TimeService.asmx';

$client = new SoapClient(null, array(
    'location' => $URL,
    'uri'      => "http://www.Nanonull.com/TimeService/",
    'trace'    => 1,
    ));

$return = $client->__soapCall("getTimeZoneTime",
   array(new SoapParam(new SoapVar('ZULU', XSD_DATETIME), 'timezone')),
   array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime')
);

آمل أن يساعد هذا شخص ما.

تكمن المشكلة في مكان ما في عدم وجود معلومات مساحة الاسم في المعلمة. لقد استخدمت الحالة الأولى من مثالك لأنها كانت الأقرب إلى ما جئت إليه.

إذا قمت بتغيير السطر:

array(new SoapParam('ZULU', 'timezone')),

ل:

array(new SoapParam('ZULU', 'ns1:timezone')),

يجب أن تعطيك النتيجة التي توقعتها.

يمكنك محاولة إضافة آخر array() اتصل حول معاييرك مثل هذا:

$params = array('timezone'=>'ZULU' );
$return = $client->__soapCall("getTimeZoneTime",
    array($params),
    array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime')
);

لا أستطيع اختبار هذا، ولكن يمكنك ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top