Добрый день.
Где-то в темах проскакивало взаимодействие 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
Нравится
Добрый день, Евгений!
Вы пробовали создать такой-же контакт используя 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);