Вопрос

Odata PHP

Добрый день.

Где-то в темах проскакивало взаимодействие php и odata. Решил сделать свой запрос на добавление контакта, запросы кросс-доменные, пример . Авторизация проходит(code=0), но данные в bpm не добавляются. в iis 500 ошибка.





<?php
$url = "http://localhost:8001/ServiceModel/AuthService.svc/Login";
$requestData["UserName"] = "User";
$requestData["UserPassword"] = "Password";
$jcres = json_encode($requestData);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_COOKIEJAR,'cookie.txt');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jcres);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jcres))
);
$result = curl_exec($ch);
echo $result;
curl_close($ch);

//Запрос odata
$urlGetCardInfo = "http://localhost:8001/0/ServiceModel/EntityDataService.svc/ContactCollection";
$requestDataService["Name"] = "123";
$jcres = json_encode($requestDataService);
$ch = curl_init($urlGetCardInfo);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR,'cookie.txt');
$file = "cookie.txt";
$lines = file( $file );
$str =  $lines[6];
$prefix = "BPMCSRF";
$index = strpos($str, $prefix) + strlen($prefix);
$token = trim(substr($str, $index));
echo $token;
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json;odata=verbose',
      'BPMCSRF:' .  $token,
        'Content-Length: ' . strlen($jcres))
);
curl_setopt($ch, CURLOPT_HEADER, 1);
$result = curl_exec($ch);
curl_close($ch);

echo $jcres;

echo "
";
echo var_dump($result);
?>

 

Куки:

# Netscape HTTP Cookie File

# http://curl.haxx.se/docs/http-cookies.html

# This file was generated by libcurl! Edit at your own risk.

#HttpOnly_localhost    FALSE    /    FALSE    0    BPMLOADER    fnmuevt2z4bpsxmyookyy3g3

#HttpOnly_localhost    FALSE    /    FALSE    0    .ASPXAUTH    BCF0752E4949BD3D6EC56072B957CB5C1B9517D2F7C19B9C3F70E0BBA6ED4BD46FE55B0E90853EF5E88CD83EE9AA689C5595517AA5B7F7DF913873919C440E5ED7607A04F4C0C14D61216682067F860D1EC6DC3872811FFAF710CA7F8FC8A8B0C0F77A146D40447FBEE6629EC37546E4C7B08DAFFC8EA37F2F5D7AF522D1816B16A968A0BAAC80738D874AEE3C2A0A9730B7C7155430F3B033C6A934F56AF04FF659C62C191822CC743FEA070757841FF4C73B7FC67EFA5CE4C4B430CFA8E798B085E84BAD37C56D80FFBB9244AC5ED83DCF8052F30D442637EB668DD93B2A4C591382EC09F3A0CE8CB18C56BD327745A983E70A9D3F911439AE4173AF04849AA84713883CEB089AB5D9F89A324ADA0FC02CDA670B07FBCD0B10670FD9F6ADC8D58B7DB2E9A27CD49FE0DCB9E21AEDAD76EA95134024BACE86C9BDFAEB2A30FDC177927BFFF25A16AC80A3B37084D0D4067DBAFD992CB95E14BEC365E5CB26BA82CB393B

localhost    FALSE    /    FALSE    0    BPMCSRF    Ao/SdrXnBoquQZZ39643ue

#HttpOnly_localhost    FALSE    /    FALSE    1526629837    UserName    83|117|112|101|114|118|105|115|111|114 

Нравится

4 комментария

Добрый день, Евгений!

Вы пробовали создать такой-же контакт используя Fiddler? Тут есть инструкция: https://academy.terrasoft.ru/documents/technic-sdk/7-12/vypolnenie-zaprosov-po-protokolu-odata-s-pomoshchyu-fiddler-0

Также, хочу обратить внимание что если на сайте ключена Csrf-защита то куки стоит формировать следующим образом: Но это явно не причина ошибки, так как в результате бы вернулся статус код 403.

 

Через Fiddler

отправляю post http://localhost:8001/0/ServiceModel/EntityDataService.svc/ContactColle…

Accept: application/atom+xml

Content-Type: application/atom+xml;type=entry

Cookie: BPMCSRF=fBo.TKVbav4GK31oDrDQTu; BPMLOADER=c3wb3plqvydzx1rgfsy5mgst; .ASPXAUTH=CEE35EFBF41088EA3F2835F9509497C89CF69A9E856192FCC0C9CF74DD91D9A5D5AAF37048F2326F4AFC1C9FE051CE91DF622A5345F143761E4D6B42668043C96506AAED141C4FA97802D4992C3DF49F134750F147D6320D2899561B45FC468F66D531151A067788195CED937DD3192FAA0B3A804F01BBDBEA0C0BDFECB36277C3FABC5CE02474B1B5C21317D3FD2ED64F946504935FD19D09598CB65640AE332309D198200160CF53715714FB16DAD11B4B8FAB76204FCAA1A99B1F77D99E1AD804197342D8D3F7B8604BE9BCFC559029ED353C877190547E03C8F51AA780665361BF5EBE144A7A0E1E0911507B2027E71F7BE3D452AF4AEF6A74B2777546230FBB1236F088074EB2C7345157666D71E0D437489538D4F4D4CBFF82B36721B105CE2A96458E01AF0A9E010579B42532DF808B9EA0C9B3272C83283E74BF037C02029FBF65C2A84F3B25275F48F3DDA4C868C4EE;

BPMCSRF: fBo.TKVbav4GK31oDrDQTu;

Host: localhost:8001

Content-Length: 597

 

Тело 

<?xml version="1.0" encoding="utf-8"?>

<entry xmlns="http://www.w3.org/2005/Atom">

    <content type="application/xml">

        <properties xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">

            <Title xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">Title</Title>

            <Notes xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">mail@mail.ru</Notes>

            <OwnerId xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">410006E1-CA4E-4502-A9EC-E54D922D2C00</OwnerId>

        </properties>

    </content>

</entry>

 

Возвращает 403 ошибку, пользователю прав доступа на операции к Odata и объекту Contact для доступа к внешним сервисам дал.

В чем может быть проблема еще?

Кстати проверил через Fiddler запрос, который указан в первичном тексте вопроса на php

POST http://localhost:8001/0/ServiceModel/EntityDataService.svc/ContactColle… HTTP/1.1

Content-Type: application/json;odata=verbose

Cookie: BPMCSRF=uUgOi6S8fuXqmug7vK2Ixe; BPMLOADER=lbe4eo5r33xib5qzd4ilx0bo; .ASPXAUTH=9630392393DE5EA7C5C41399383A5C111A47ABD6DCE480276852590B03DBD938B354ACB488248FB6B2DE737C412A6CAD487A526C576BCAEA8D48B4751FB045606900009B81DCBACC54C4802571A4AF339B05F101E2993A6AD6D93708FC79FCDACAB6F7411105FC0E2A2D9AB123968243E02990824FC08B401999FFF8F5A7A1240AB69D56771E64F9495EEAB17F094FAB101016326A99081644034ABA4C64F797E974EC2D833037F7282F04E46D6FA8F04FFC85BFD9030D39916F99F082C122CEFE53EFF585FD40E913474A949B9E38601E86C0C4C921541B4082B0E9732B8645F73E508304ABFBC92D7BB581858040760374F25368001F2DEF1CE2458A0B4DC81352952FBBAEE05F59E4C9D330198361B929FF0A4D5392D4956CB7F46CD6B97D3D909A92A37D3FCA07AAD00396BB38F911BAA1DEEA23E53395A7C6D88009B148F468F2D237EF132055A71C8ABD923EA22460A916B38F17DE2DDB202622EEF54424D06F7B;

BPMCSRF: uUgOi6S8fuXqmug7vK2Ixe

Host: localhost:8001

Content-Length: 16

{"Name": "1233"}

Запись создается удачно. Почему тогда через php не работает? есть пример post на php для odata ?

Получилось.

$url_1 = "http://localhost:8001/0/ServiceModel/EntityDataService.svc/ContactCollection/";

$requestDataService["Name"] = "123";
$jcres = json_encode($requestDataService);
$ch5 = curl_init($url_1);
curl_setopt($ch5, CURLOPT_COOKIEFILE, 'cookie.txt');

//curl_setopt($ch5, CURLOPT_HTTPHEADER, array(
//    'Accept: application/json;odata=verbose'));

curl_setopt($ch5, CURLOPT_COOKIEJAR,'cookie.txt');
curl_setopt($ch5, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch5, CURLOPT_POSTFIELDS, $jcres);
curl_setopt($ch5, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch5, CURLOPT_HEADER   ,FALSE);
curl_setopt($ch5, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json;odata=verbose',
        'BPMCSRF: ' .$token,
        'Content-Length: ' . strlen($jcres))
);

$result5 = curl_exec($ch5);
curl_close($ch5);
Показать все комментарии