За последние 24 часа нас посетили 15197 программистов и 1671 робот. Сейчас ищут 846 программистов ...

Нужно дёрнуть метод через SOAP посредством PHP.

Тема в разделе "Прочие вопросы по PHP", создана пользователем Sergusgus, 6 авг 2014.

  1. Sergusgus

    Sergusgus Новичок

    С нами с:
    6 авг 2014
    Сообщения:
    8
    Симпатии:
    0
    Всем привет!
    Ребят, стоит такая задача: нужно получить некий ответ (данные) с SOAP-сервиса.
    Что имеется:
    1. WSDL;
    2. линк на сервис;
    3. пример SOAP-запроса:
    <soapenv:Header>
    <UsernameToken xmlns="http://siebel.com/webservices">CASHSFR</UsernameToken>
    <PasswordText xmlns="http://siebel.com/webservices">We8h!bG0</PasswordText>
    <SessionType xmlns="http://siebel.com/webservices">Stateless</SessionType>
    </soapenv:Header>;
    4. Примеры заявок, на которых можно тренироваться:
    1-9CGkBS
    1-AXQKaI
    1-BHwU97N.

    Подскажите, люди добрые, как правильно сделать запрос, имея эти данные и получить нужный ответ?
    Известен даже метод, который нужно дёргать.

    Что было мною проделано:

    Код (Text):
    1. $client = new SoapClient('test_otpcbcash.wsdl', Array("exceptions"=>0,"trace" => 1)); // подключаю wsdl-файл
    2. var_dump($client->__getFunctions()); // смотрю, какие методы имеются
    Вижу:

    Код (Text):
    1. array(9) {
    2.   [0]=>
    3.   string(80) "registerAgreem_Output registerAgreem(registerAgreem_Input $registerAgreem_Input)"
    4.   [1]=>
    5.   string(80) "cancelOptyCash_Output cancelOptyCash(cancelOptyCash_Input $cancelOptyCash_Input)"
    6.   [2]=>
    7.   string(84) "checkOptyStatus_Output checkOptyStatus(checkOptyStatus_Input $checkOptyStatus_Input)"
    8.   [3]=>
    9.   string(72) "createAgreem_Output createAgreem(createAgreem_Input $createAgreem_Input)"
    10.   [4]=>
    11.   string(64) "authAgreem_Output authAgreem(authAgreem_Input $authAgreem_Input)"
    12.   [5]=>
    13.   string(80) "setCardAccount_Output setCardAccount(setCardAccount_Input $setCardAccount_Input)"
    14.   [6]=>
    15.   string(88) "cancelAuthAgreem_Output cancelAuthAgreem(cancelAuthAgreem_Input $cancelAuthAgreem_Input)"
    16.   [7]=>
    17.   string(80) "createOptyCash_Output createOptyCash(createOptyCash_Input $createOptyCash_Input)"
    18.   [8]=>
    19.   string(68) "checkAgreem_Output checkAgreem(checkAgreem_Input $checkAgreem_Input)"
    20. }
    Меня интересует метод checkOptyStatus.
    Вот не пойму, что ему передать в качестве аргументов?

    Также, разработчики дали пример вызова через соап метода checkOptyStatus:

    Код (Text):
    1. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.otpcredit2.macc.com.ua">
    2.    <soapenv:Header>
    3.       <UsernameToken xmlns="http://siebel.com/webservices">GHYL</UsernameToken>
    4.       <PasswordText xmlns="http://siebel.com/webservices">Hdy7Heej</PasswordText>
    5.       <SessionType xmlns="http://siebel.com/webservices">Stateless</SessionType>
    6.    </soapenv:Header>
    7.    <soapenv:Body>
    8.       <ws:checkOptyStatus_Input>
    9.          <ws:optyId>1-BHwU97N</ws:optyId>
    10.       </ws:checkOptyStatus_Input>
    11.    </soapenv:Body>
    12. </soapenv:Envelope>
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    смотри wsdl, он для того и создан, чтобы описывать интерфейсы.
     
  3. Sergusgus

    Sergusgus Новичок

    С нами с:
    6 авг 2014
    Сообщения:
    8
    Симпатии:
    0
    Что именно глянуть?
    Код (Text):
    1. var_dump($client->__getTypes());
    показывает:

    Код (Text):
    1. array(37) {
    2.   [0]=>
    3.   string(69) "struct registerAgreem_Input {
    4.  string agreementId;
    5.  string loginId;
    6. }"
    7.   [1]=>
    8.   string(69) "struct registerAgreem_Output {
    9.  string errCode;
    10.  string errMessage;
    11. }"
    12.   [2]=>
    13.   string(60) "struct cancelOptyCash_Input {
    14.  string why;
    15.  string optyId;
    16. }"
    17.   [3]=>
    18.   string(69) "struct cancelOptyCash_Output {
    19.  string errCode;
    20.  string errMessage;
    21. }"
    22.   [4]=>
    23.   string(48) "struct checkOptyStatus_Input {
    24.  string optyId;
    25. }"
    26.   [5]=>
    27.   string(133) "struct checkOptyStatus_Output {
    28.  string errCode;
    29.  string errMessage;
    30.  string negativeReason;
    31.  string optyStage;
    32.  string optyStatus;
    33. }"
    34.   [6]=>
    35.   string(45) "struct createAgreem_Input {
    36.  string optyId;
    37. }"
    38.   [7]=>
    39.   string(104) "struct createAgreem_Output {
    40.  string agreementId;
    41.  string docUrl;
    42.  string errCode;
    43.  string errMessage;
    44. }"
    45.   [8]=>
    46.   string(64) "struct authAgreem_Input {
    47.  string docUrl;
    48.  string agreementId;
    49. }"
    50.   [9]=>
    51.   string(65) "struct authAgreem_Output {
    52.  string errCode;
    53.  string errMessage;
    54. }"
    55.   [10]=>
    56.   string(88) "struct setCardAccount_Input {
    57.  string paymentPurpose;
    58.  string optyId;
    59.  string cardNum;
    60. }"
    61.   [11]=>
    62.   string(85) "struct setCardAccount_Output {
    63.  string errCode;
    64.  string errMessage;
    65.  string result;
    66. }"
    67.   [12]=>
    68.   string(54) "struct cancelAuthAgreem_Input {
    69.  string agreementId;
    70. }"
    71.   [13]=>
    72.   string(71) "struct cancelAuthAgreem_Output {
    73.  string errCode;
    74.  string errMessage;
    75. }"
    76.   [14]=>
    77.   string(55) "struct createOptyCash_Input {
    78.  createOpty createOpty;
    79. }"
    80.   [15]=>
    81.   string(62) "struct createOptyCash_Output {
    82.  OtpCBResponse OtpCBResponse;
    83. }"
    84.   [16]=>
    85.   string(49) "struct checkAgreem_Input {
    86.  string agreementId;
    87. }"
    88.   [17]=>
    89.   string(134) "struct checkAgreem_Output {
    90.  string agreementStatus;
    91.  string archiveReason;
    92.  string authStatus;
    93.  string errCode;
    94.  string errMessage;
    95. }"
    96.   [18]=>
    97.   string(52) "struct createOptyTopElmt {
    98.  createOpty createOpty;
    99. }"
    100.   [19]=>
    101.   string(33) "struct createOpty {
    102.  Opty Opty;
    103. }"
    104.   [20]=>
    105.   string(4656) "struct Opty {
    106.  ListOfInsurance ListOfInsurance;
    107.  string TIN;
    108.  string addDocIssueDate;
    109.  ListOfPhoto ListOfPhoto;
    110.  string addDocIssuer;
    111.  ListOfEstate ListOfEstate;
    112.  string addDocNumber;
    113.  ListOfIncomeSrc ListOfIncomeSrc;
    114.  string addDocSeries;
    115.  ListOfExpenses ListOfExpenses;
    116.  string addDocType;
    117.  ListOfCredit ListOfCredit;
    118.  string addServiceAward;
    119.  string addServiceToCredit;
    120.  string address;
    121.  string birthday;
    122.  string businessPartner;
    123.  string childCount;
    124.  string citizenship;
    125.  string clientIsPensioner;
    126.  string clientIsStudent;
    127.  string clientIsWorking;
    128.  string clientPosition;
    129.  string clientVector;
    130.  string coOwner;
    131.  string codeAgentInBroker;
    132.  string codeNetwork;
    133.  string codeTradePointInBroker;
    134.  string company;
    135.  string companyAddress;
    136.  string companyCapitalType;
    137.  string companyCorpus;
    138.  string companyHouse;
    139.  string companyIndex;
    140.  string companyPhone1;
    141.  string companyPhone2;
    142.  string companyPhone3;
    143.  string confirmIncomeForm;
    144.  string contactFullName;
    145.  string corpus;
    146.  string costPaper;
    147.  string costPaperDoc;
    148.  string country;
    149.  string credBank;
    150.  string credComment;
    151.  string creditFirsPay;
    152.  string creditIsOpen;
    153.  string creditTime;
    154.  string curAddress;
    155.  string curCorpus;
    156.  string curFlat;
    157.  string curHouse;
    158.  string curIndex;
    159.  string curPlace;
    160.  string curTime;
    161.  string dependentCount;
    162.  string depositInOtherBank;
    163.  string depositInOtherBankDoc;
    164.  string docIssueDate;
    165.  string docIssuer;
    166.  string docNumber;
    167.  string docSeries;
    168.  string docType;
    169.  string education;
    170.  string email;
    171.  string estate;
    172.  string familyIncome;
    173.  string flat;
    174.  string founderComment;
    175.  string founderEDRPOU;
    176.  string founderName;
    177.  string founderPart;
    178.  string founderPartOther;
    179.  string house;
    180.  string index;
    181.  string invoiceDate;
    182.  string invoiceNumber;
    183.  string isAccountInOtherBank;
    184.  string isAddService;
    185.  string isCredit;
    186.  string isCreditOperation;
    187.  string isDeterminateInfluence;
    188.  string isFounder;
    189.  string isMonthlyIncomeDocument;
    190.  string isOTPMember;
    191.  string isOTPServicer;
    192.  string isOtherActive;
    193.  string isOtherActiveDoc;
    194.  string isOwnerCommercPlace;
    195.  string isOwnerCommercPlaceDoc;
    196.  string isOwnerFlat;
    197.  string isOwnerFlatDoc;
    198.  string isOwnerGround;
    199.  string isOwnerGroundDoc;
    200.  string isOwnerHouse;
    201.  string isOwnerHouseDoc;
    202.  string isOwnerOther;
    203.  string isOwnerOtherDoc;
    204.  string isOwnerTransport;
    205.  string isOwnerTransportDoc;
    206.  string isPrivateBusinessman;
    207.  string isPublicWorker;
    208.  string isUtilityPayment;
    209.  string keyWord;
    210.  string lastName;
    211.  string maritalStatus;
    212.  string maxFirstPay;
    213.  string maxLoanSum;
    214.  string maxPercent;
    215.  string middleName;
    216.  string minFirstPay;
    217.  string minLoanSum;
    218.  string minPercent;
    219.  string model;
    220.  string monthlyIncome;
    221.  string name;
    222.  string officeNumber;
    223.  string otherActiveComment;
    224.  string otherBankAccountNumber;
    225.  string otherBankCode;
    226.  string otherBankName;
    227.  string otpComment;
    228.  string otpConnection;
    229.  string otpOtherComment;
    230.  string overdueCredInOtherBank;
    231.  string overdueCredInOtherBankDoc;
    232.  string ownerOtherComment;
    233.  string CardInsFlag;
    234.  string OTPChannel;
    235.  string blackListReason;
    236.  string ownership;
    237.  string personalIncome;
    238.  string phoneContactFace;
    239.  string phoneCurrent;
    240.  string phoneInformation;
    241.  string phoneMobile;
    242.  string phoneMobile2;
    243.  string phoneReg;
    244.  string postIndexFlag;
    245.  string privateBusinessRegDate;
    246.  string privateBusinessRegNumber;
    247.  string privateBusinessRegOrg;
    248.  string privateBusinessView;
    249.  string publicWorkerComment;
    250.  string regAddress;
    251.  string regCorpus;
    252.  string regDate;
    253.  string regFlat;
    254.  string regHouse;
    255.  string regIndex;
    256.  string regPlace;
    257.  string region;
    258.  string releaseYear;
    259.  string sector;
    260.  string serviceCompany;
    261.  string serviceProduct;
    262.  string serviceType;
    263.  string settlement;
    264.  string sex;
    265.  string spouseFullName;
    266.  string spouseIsPensioner;
    267.  string spouseIsStudent;
    268.  string spouseIsWorking;
    269.  string typeSettlement;
    270.  string vendorCounty;
    271.  string visualEvaluation;
    272.  string workCategory;
    273.  string workInCompanyTime;
    274.  string companyCountry;
    275.  string companyProvince;
    276.  string companyRegion;
    277.  string companyLocationType;
    278.  string companyCity;
    279.  string companyStreetType;
    280.  string companyStreet;
    281.  string regCountry;
    282.  string regProvince;
    283.  string regRegion;
    284.  string regLocationType;
    285.  string regCity;
    286.  string regStreetType;
    287.  string regStreet;
    288.  string curCountry;
    289.  string curProvince;
    290.  string curRegion;
    291.  string curLocationType;
    292.  string curCity;
    293.  string curStreetType;
    294.  string curStreet;
    295.  string postCountry;
    296.  string postProvince;
    297.  string postRegion;
    298.  string postLocationType;
    299.  string postCity;
    300.  string postStreetType;
    301.  string postStreet;
    302.  string Channel;
    303.  string postRegDate;
    304.  string companyemp;
    305.  string creditProductCode;
    306.  string srcType;
    307.  string OrgCode;
    308.  string LoginName;
    309.  string optyType;
    310.  string contactRelation;
    311.  string applicationAmount;
    312. }"
    313.   [21]=>
    314.   string(48) "struct ListOfInsurance {
    315.  Insurance Insurance;
    316. }"
    317.   [22]=>
    318.   string(87) "struct Insurance {
    319.  string30 InsuranceCompanyId;
    320.  string30 ProductId;
    321.  string50 Type;
    322. }"
    323.   [23]=>
    324.   string(36) "struct ListOfPhoto {
    325.  Photo Photo;
    326. }"
    327.   [24]=>
    328.   string(95) "struct Photo {
    329.  string FileName;
    330.  base64Binary PhotoValue;
    331.  string FileExt;
    332.  string DocType2;
    333. }"
    334.   [25]=>
    335.   string(41) "struct ListOfEstate {
    336.  Estate2 Estate2;
    337. }"
    338.   [26]=>
    339.   string(86) "struct Estate2 {
    340.  string EstateCategory;
    341.  string EstateOwner;
    342.  string EstateComment;
    343. }"
    344.   [27]=>
    345.   string(48) "struct ListOfIncomeSrc {
    346.  IncomeSrc IncomeSrc;
    347. }"
    348.   [28]=>
    349.   string(87) "struct IncomeSrc {
    350.  string IncomeSource;
    351.  string IncomeAmount;
    352.  string IncomeComment;
    353. }"
    354.   [29]=>
    355.   string(45) "struct ListOfExpenses {
    356.  Expenses Expenses;
    357. }"
    358.   [30]=>
    359.   string(91) "struct Expenses {
    360.  string ExpenseCategory;
    361.  string ExpenseAmount;
    362.  string ExpenseComment;
    363. }"
    364.   [31]=>
    365.   string(39) "struct ListOfCredit {
    366.  Credit Credit;
    367. }"
    368.   [32]=>
    369.   string(83) "struct Credit {
    370.  string creditBank;
    371.  string creditComment;
    372.  string creditIsOpen2;
    373. }"
    374.   [33]=>
    375.   string(15) "string string50"
    376.   [34]=>
    377.   string(15) "string string30"
    378.   [35]=>
    379.   string(61) "struct OtpCBResponseTopElmt {
    380.  OtpCBResponse OtpCBResponse;
    381. }"
    382.   [36]=>
    383.   string(73) "struct OtpCBResponse {
    384.  string UUID;
    385.  string code;
    386.  string description;
    387. }"
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    wsdl. просто посмотри глазами. это текстовый файл :)
     
  5. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Ну, не совсем текстовый, XML, но глазами смотрится :)
    Вообще - есть смысл воспользоваться специальными утилитами для работы с соапом. Например, SoapUI
     
  6. Sergusgus

    Sergusgus Новичок

    С нами с:
    6 авг 2014
    Сообщения:
    8
    Симпатии:
    0
    Ребят, вот в WSDL смотрю есть часть кода, где упоминается метод checkOptyStatus:

    Код (Text):
    1. <portType name="checkOptyStatus">
    2.         <operation name="checkOptyStatus">
    3.                 <input message="tns:checkOptyStatus_Input"></input>
    4.                 <output message="tns:checkOptyStatus_Output"></output>
    5.         </operation>
    6. </portType>
    и вот ещё:

    Код (Text):
    1. <binding name="checkOptyStatus" type="tns:checkOptyStatus">
    2.         <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></soap:binding>
    3.         <operation name="checkOptyStatus">
    4.                 <soap:operation soapAction="document/http://ws.xxxxxxxxxx:checkOptyStatus"></soap:operation>
    5.                 <input>
    6.                         <soap:body use="literal"></soap:body></input>
    7.                         <output>
    8.                                 <soap:body use="literal"></soap:body>
    9.                         </output>
    10.          </operation>
    11. </binding>
    Как это использовать, вернее, на что обратить внимание, чтобы вызвать метод checkOptyStatus?
     
  7. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Судя по тегам input и output, метод принимает на вход одну переменную типа "строка" и отдает тоже одну переменную типа "строка".
     
  8. Sergusgus

    Sergusgus Новичок

    С нами с:
    6 авг 2014
    Сообщения:
    8
    Симпатии:
    0
    Ок, я пытаюсь вызвать этот метод следующим образом:

    Код (Text):
    1. $client = new SoapClient('test_otpcbcash.wsdl', Array("exceptions"=>1,"trace" => 0));
    2. $result = $client->checkOptyStatus(array("optyId"=>"1-DYhfT")); // этот optyId присутствует
    3. print_r($result);
    Результат:

    Fatal error: Uncaught SoapFault exception: [SOAP-ENV:Client] Error Code: 10944642 Error Message: Error: Inbound SOAP Message - Session Token is missing or invalid or has expired in /var/www/bua/admin/application_status/index.php:104 Stack trace: #0 /var/www/bua/admin/application_status/index.php(104): SoapClient->__call('checkOptyStatus', Array) #1 /var/www/bua/admin/application_status/index.php(104): SoapClient->checkOptyStatus(Array) #2 {main} thrown in /var/www/bua/admin/application_status/index.php on line 104 .

    Что не так?
     
  9. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Ну, тут уж гугл вам в помощь. Wsdl, я смотрю, локальный, как он работает, только автору известно.
     
  10. Sergusgus

    Sergusgus Новичок

    С нами с:
    6 авг 2014
    Сообщения:
    8
    Симпатии:
    0
    Я могу показать wsdl.
    Я же выдержку из него специально показал, или нужно что-то ещё?
     
  11. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Попробуйте SoapUI все-таки. Если ошибка сохранится, значит, проблемы на их стороне, если нет - у вас что-то с кодом. Первое, что требуется при дебаге - найти место ошибки.
     
  12. Sergusgus

    Sergusgus Новичок

    С нами с:
    6 авг 2014
    Сообщения:
    8
    Симпатии:
    0
    Ребят, вопрос остаётся открытым.

    Нужно вызвать метод checkOptyStatus.
    В wsdl вижу, что его параметры не описаны, а описаны параметры checkOptyStatus_Input, кот. передаётся этому методу в качестве параметров.

    Код (Text):
    1. checkOptyStatus(checkOptyStatus_Input $checkOptyStatus_Input)
    2.  
    3. string(48) "struct checkOptyStatus_Input {
    4.  string optyId;
    5. }"
    Вот именно сюда мне и нужно передать array("optyId"=>"1-DYhfT");

    Т.е. метод checkOptyStatus в чистом виде не принимает "optyId"=>"1-DYhfT", а принимает через checkOptyStatus_Input.
    Т.е. такая конструкция вызывает ошибку -
    Код (Text):
    1. $client->checkOptyStatus(array("optyId"=>"1-DYhfT"));
    Вот как сюда впихнуть этот checkOptyStatus_Input и ему в качестве параметров дать array("optyId"=>"1-DYhfT")?
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    $client->checkOptyStatus("1-DYhfT");

    не?
     
  14. Sergusgus

    Sergusgus Новичок

    С нами с:
    6 авг 2014
    Сообщения:
    8
    Симпатии:
    0
    Код (Text):
    1. Fatal error: Uncaught SoapFault exception: [SOAP-ENV:Client] Error Code: 10944642 Error Message: Error: Inbound SOAP Message - Session Token is missing or invalid or has expired in /var/www/bua/admin/application_status/index.php:126 Stack trace: #0 /var/www/bua/admin/application_status/index.php(126): SoapClient->__call('checkOptyStatus', Array) #1 /var/www/bua/admin/application_status/index.php(126): SoapClient->checkOptyStatus('1-DYhfT') #2 {main} thrown in /var/www/bua/admin/application_status/index.php on line 126
    Похоже он просит массив.
    Ему нужно что-то типа

    Код (Text):
    1. $result = $client->checkOptyStatus(checkOptyStatus_Input(array("optyId"=>"1-DYhfT")));
    Но это

    Код (Text):
    1. Fatal error: Call to undefined function checkOptyStatus_Input() in /var/www/bua/admin/application_status/index.php on line 126
    да и понятно.
     
  15. Sergusgus

    Sergusgus Новичок

    С нами с:
    6 авг 2014
    Сообщения:
    8
    Симпатии:
    0
    Думаю, нужно передать хедер, т.е. залогиниться.

    Код (Text):
    1. $client = new SoapClient("test_otpcbcash.wsdl", array(
    2.                                                 "uri" => 'xxxxx',
    3.                                                 'UsernameToken' => "xxxxx",
    4.                                                 'PasswordText' => "xxxxx",
    5.                                                 'SessionType' => "xxxxxx"));
    6.  
    7. echo "Request :<br>". $client->__getLastRequest(). "<br>";
    8. echo "Response :<br>". $client->__getLastResponse(). "<br>";
    Почему-то не формируется запрос, Request и Response пустые.