نمایش نتایج 1 تا 5 از 5

نام تاپیک: دریافت اطلاعات از وب سرویس asp.net asmx توسط php

  1. #1

    Question دریافت اطلاعات از وب سرویس asp.net asmx توسط php

    سلام دوستان . من یه وب سرویس خارجی دارم به ادرس http://ota.acerentacar.com/Arac/RateService.asmx
    حالا میخوام از متد VehAvailRate در php استفاده کنم .

    طبق اموزش هایی که خوندم این متد باید یه سری پارامترها بگیره و یه سری پارامترها برگردونه . اما نمیدونم اسم این پارامتر هارو از کجا بیارم و چطوری تو php استفاده کنم .
    کدی که در حال حاضر دارم تو php اینه :


    <?php
    require 'lib/nusoap.php';
    $client = new SoapClient("http://ota.acerentacar.com/Arac/RateService.asmx?WSDL");
    $param = array('VehAvailRateSoapIn','xantia');
    $result = $client -> VehAvailRate($param);


    echo $result -> VehAvailRateResult;
    ?>


    استادان محترم ممنون میشم راهنمایی بفرمایین .

  2. #2

    نقل قول: دریافت اطلاعات از وب سرویس asp.net asmx توسط php

    یعنی بین اینهمه کاربر هیشکی نمیتونه کار مارو راه بندازه ؟؟؟؟ مرسی واقعا !!!

  3. #3

    نقل قول: دریافت اطلاعات از وب سرویس asp.net asmx توسط php

    نقل قول نوشته شده توسط a1994n1373 مشاهده تاپیک
    سلام دوستان . من یه وب سرویس خارجی دارم به ادرس http://ota.acerentacar.com/Arac/RateService.asmx
    حالا میخوام از متد VehAvailRate در php استفاده کنم .

    طبق اموزش هایی که خوندم این متد باید یه سری پارامترها بگیره و یه سری پارامترها برگردونه . اما نمیدونم اسم این پارامتر هارو از کجا بیارم و چطوری تو php استفاده کنم .
    کدی که در حال حاضر دارم تو php اینه :


    <?php
    require 'lib/nusoap.php';
    $client = new SoapClient("http://ota.acerentacar.com/Arac/RateService.asmx?WSDL");
    $param = array('VehAvailRateSoapIn','xantia');
    $result = $client -> VehAvailRate($param);


    echo $result -> VehAvailRateResult;
    ?>


    استادان محترم ممنون میشم راهنمایی بفرمایین .
    متدی که نیاز دارید استفاده کنید هم برای درخواست و هم پاسخ از ساختار پیچیده تو در تو استفاده کرده است. در نتیجه برای زبان هایی مثل php,js,ruby,... که strictly typed نیستن پیچیدگی پیاده سازی بیشتری دارید. (و برای همین پیچیدگی های soap/wsdl هست که شرکت های بزرگی مثل گوگل هم اون رو منسوخ کرده اند!)

    اما راه حل:

    اول از همه باید ببینید ساختار درخواست و پاسخ این متد چگونه است برای اینکار میتونید از wsdl اون یا از طریق php اینکارو انجام داد:
    http://ota.acerentacar.com/Arac/RateService.asmx?WSDL


    از روی خصیصه type میشه فهمید که با یک ساختار پیچیده تو در تو طرف هستید!

    برای جزییات بیشتر از php استفاده میکنیم:


    <?php


    $soap = new SoapClient('http://ota.acerentacar.com/Arac/RateService.asmx?WSDL');


    print_r($soap->__getFunctions());
    print_r($soap->__getTypes());



    من از دو متد getFunctions و getTypes استفاده کردم که متد ها و آبجکت های سرویس رو نشون میده.
    امضای متد مورد نیاز شما:

    OTA_VehAvailRateRS VehAvailRate(OTA_VehAvailRateRQ $Request)


    و ساختار درخواست:


    struct OTA_VehAvailRateRQ {
    ArrayOfSourceType POS;
    UniqueID_Type CustomerID;
    VehAvailRQCore VehAvailRQCore;
    VehicleAvailRQAdditionalInfoType VehAvailRQInfo;
    string EchoToken;
    dateTime TimeStamp;
    anonymous14 Target;
    string TargetName;
    string Version;
    string TransactionIdentifier;
    nonNegativeInteger SequenceNmbr;
    anonymous15 TransactionStatusCode;
    boolean RetransmissionIndicator;
    string CorrelationID;
    language PrimaryLangID;
    language AltLangID;
    string ReqRespVersion;
    positiveInteger MaxResponses;
    boolean MaxPerVendorInd;
    }


    بعضی نوع های ساده مثل string,boolean و ... هست و بعضی ساختارهای پیچیده تری مثل ArrayOfSourceType که به صورت تو در تو هستند.

    حالا چند راه دارید.

    ۱. استفاده از ارایه های تو در تو:
    https://www.drupal.org/node/2256251

    ۲. استفاده از StdClass :
    https://www.drupal.org/node/2256251

    ۳. استفاده از SoapVar
    http://php.net/manual/en/soapvar.soapvar.php

    4. استفاده از ClassMap:
    در این روش مثل C#‎‎‎‎‎‎‎‎ یا Java می تونید برای هر ساختارتون یه class بسازید و اونو به عنوان classmap به SoapClient بدید:


    class MyBook {
    public $title;
    public $author;
    }


    $server = new SoapClient("http://example.com/webservice?wsdl", [
    'classmap' => [
    'book' => "MyBook"
    ]
    ]);


    اطلاعات بیشتر:
    http://pookey.co.uk/wordpress/archiv...th-soap-in-php

    ۵. استفاده از پکیج phpro/soap-client برای تولید اتوماتیک classmap و type ها
    اگر سرویس ساده ای داشته باشید ساخت این classmap ها راحت هست اما وقتی پیچیده بشه خیلی کار زمان بری هست و احتمال خطا توش زیاد هست.
    می تونید از پکیج زیر استفاده کنید و با یک دستور کلاس ها و classmap رو ایجاد کنید. البته صرفا برای ساخت classmap نیست و امکان استفاده از سرویس و ایجاد کلاینت هم داره.
    لینک پکیچ +‌ مستندات:
    https://github.com/phpro/soap-client

    مثلا من با دستور زیر تمام کلاس های این سرویس رو ایجاد کردم:

    vendor/bin/soap-client generate:types --wsdl="http://ota.acerentacar.com/Arac/RateService.asmx?wsdl" ./types


    (تو سیستم عامل های مختلف ممکنه کمی فرق کنه + از composer باید استفاده کنید)

    مثلا کلاس OTA_VehAvailRateRQ که در بالا هم اشاره شد:


    <?php


    class OTA_VehAvailRateRQ
    {


    /**
    * @var ArrayOfSourceType
    */
    protected $POS;


    /**
    * @var UniqueID_Type
    */
    protected $CustomerID;


    /**
    * @var VehAvailRQCore
    */
    protected $VehAvailRQCore;


    /**
    * @var VehicleAvailRQAdditionalInfoType
    */
    protected $VehAvailRQInfo;


    /**
    * @var string
    */
    protected $EchoToken;


    /**
    * @var \DateTime
    */
    protected $TimeStamp;


    /**
    * @var anonymous14
    */
    protected $Target;


    /**
    * @var string
    */
    protected $TargetName;


    /**
    * @var string
    */
    protected $Version;


    /**
    * @var string
    */
    protected $TransactionIdentifier;


    /**
    * @var nonNegativeInteger
    */
    protected $SequenceNmbr;


    /**
    * @var anonymous15
    */
    protected $TransactionStatusCode;


    /**
    * @var bool
    */
    protected $RetransmissionIndicator;


    /**
    * @var string
    */
    protected $CorrelationID;


    /**
    * @var language
    */
    protected $PrimaryLangID;


    /**
    * @var language
    */
    protected $AltLangID;


    /**
    * @var string
    */
    protected $ReqRespVersion;


    /**
    * @var positiveInteger
    */
    protected $MaxResponses;


    /**
    * @var bool
    */
    protected $MaxPerVendorInd;


    }




    و با دستور زیر classmap رو براتون میسازه:

    vendor/bin/soap-client generate:classmap --wsdl="http://ota.acerentacar.com/Arac/RateService.asmx?wsdl"


    برای این سرویس این رو خروجی میده (خلاصه شده!)

    new ClassMapCollection([
    // ...
    new ClassMap('OTA_VehAvailRateRQ', \\OTA_VehAvailRateRQ::class),
    new ClassMap('VehAvailRQCore', \\VehAvailRQCore::class),
    new ClassMap('ArrayOfSourceType', \\ArrayOfSourceType::class),
    new ClassMap('SourceType', \\SourceType::class),
    new ClassMap('RequestorID', \\RequestorID::class),
    new ClassMap('Position', \\Position::class),
    new ClassMap('BookingChannel', \\BookingChannel::class),
    new ClassMap('UniqueID_Type', \\UniqueID_Type::class),
    // ...
    ]);


    6. استفاده از پکیج های دیگه مثل Zend Soap و ...
    https://packagist.org/search/?q=soap
    آخرین ویرایش به وسیله djtrex : شنبه 18 مهر 1394 در 15:07 عصر

  4. #4

    نقل قول: دریافت اطلاعات از وب سرویس asp.net asmx توسط php

    داداش دستت درد نکنه که وقت گذاشتی جواب دادی ولی باورت میشه من هنوز سردرگمم و نمیدونم باید چیکار کنم ؟!!!با است

    هدف اصلی من این هست که با استفاده از این وب سرویس که کلا کارش رزور و اجاره ماشین هست کاربر بتونه در سایتی که این متدهارو داخلش قرار میدیم ماشین اجاره کنه اجارشو لغو کنه و .... .

    تنها چیزی هم که دارم همین وب سرویسه متاسفانه !!!

  5. #5

    نقل قول: دریافت اطلاعات از وب سرویس asp.net asmx توسط php

    نقل قول نوشته شده توسط a1994n1373 مشاهده تاپیک
    داداش دستت درد نکنه که وقت گذاشتی جواب دادی ولی باورت میشه من هنوز سردرگمم و نمیدونم باید چیکار کنم ؟!!!با است

    هدف اصلی من این هست که با استفاده از این وب سرویس که کلا کارش رزور و اجاره ماشین هست کاربر بتونه در سایتی که این متدهارو داخلش قرار میدیم ماشین اجاره کنه اجارشو لغو کنه و .... .

    تنها چیزی هم که دارم همین وب سرویسه متاسفانه !!!
    شما نیاز به مستندات این وب سرویس دارید میتونید از خودشون درخواست کنید. در غیر این صورت تنها با WSDL اون باید به صورت صحیح و خطا کار کنید!
    اگه حالت دوم رو انتخاب کردید اکستنشن کروم Wizdler یا اپ دسکتاپ SoapUI ابزارهای خوبی برای تست هستند!

تاپیک های مشابه

  1. مشکل در ارسال پارامتر به وب سرویس ASP.Net از طریق Delphi
    نوشته شده توسط RezaJP در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 3
    آخرین پست: دوشنبه 12 آذر 1386, 10:53 صبح
  2. Post کردن اطلاعات بین صفحات در ASP.NET 2.0
    نوشته شده توسط morteza57 در بخش ASP.NET Web Forms
    پاسخ: 12
    آخرین پست: یک شنبه 06 آبان 1386, 00:17 صبح
  3. جلوگیری از ذخیره اطلاعات موقت در delphi2005 asp.net
    نوشته شده توسط ravanfar در بخش ASP.NET Web Forms
    پاسخ: 2
    آخرین پست: سه شنبه 15 دی 1383, 11:41 صبح
  4. عدم توانایی ذخیره اطلاعات فرم در delphi2005 asp.net
    نوشته شده توسط ravanfar در بخش برنامه نویسی در Delphi
    پاسخ: 0
    آخرین پست: دوشنبه 14 دی 1383, 12:18 عصر
  5. اطلاعات اولیه در مورد ASP.NET
    نوشته شده توسط پرنده کوچک در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: پنج شنبه 16 مهر 1383, 08:30 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •