Как я : вызов asmx из PHP с помощью curl
Я создаю веб-сервис для сохранения данных в базе данных
public string SaveData(String resultData) //save data to database { DLR service = new DLR(); Context.Response.ContentType = "application/json"; string filePath = Server.MapPath("~/Error.txt"); using (StreamWriter writer = new StreamWriter(filePath, true)) { writer.WriteLine("Json is sent :" + resultData + "" + Environment.NewLine + "Date :" + DateTime.Now.ToString()); writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine); } RootObject obj = JsonConvert.DeserializeObject<RootObject>(resultData); foreach (JsonData item in obj.results) { { var connStr = ConfigurationManager.ConnectionStrings["myCon1"].ConnectionString; SqlConnection con = new SqlConnection(connStr); try { SqlCommand cmd = new SqlCommand("[insert_RDL]", con); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@msgId", item.msgId); cmd.Parameters.AddWithValue("@to_mobile", item.to); cmd.Parameters.AddWithValue("@status", item.status); cmd.Parameters.AddWithValue("@ttest", ""); cmd.Parameters.AddWithValue("@newtest", ""); con.Open(); cmd.ExecuteNonQuery(); } finally { // } } } return "OK "; }
Когда я публикую json с помощью ajax на странице aspx или с помощью PHP SoapClient, страница отправляет json без проблем .
Но опубликуйте его с помощью PHP Curl
<?php $data = '{"results": [{"msgId": "001","to": "9665312114","status": "D"}, {"msgId": "859911880","to": "966535112578","status": "N"}, {"msgId": "859911880","to": "966535112579","status": "S"}]}' ; $param = array('resultData' => $data); var_dump($param); echo "<hr>"; print_r($param); $headers = array('Accept: application/json','Content-Type: application/json', ); echo "<hr>"; $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_URL, "http://asdm.sa/DLR.asmx/SaveData"); curl_setopt($ch, CURLOPT_POSTFIELDS, $param); $result =curl_exec($ch); print_r($result); echo "<hr>"; if(curl_exec($ch) === false) { echo 'Curl error: ' . curl_error($ch); } else { echo 'Operation completed without any errors'; } ?>
Проблема json отправляется или отправляется NULL
{"Message":"Invalid JSON primitive: --------------------------60620f7a041fa3f6.","StackTrace":" at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\r\n at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}
How i can sloved it Thank you
Что я уже пробовал:
Я почтальон, чтобы создать команду Curl для справки.
Но та же проблема >
Shashank Laxman
преобразуйте чистый json в строку json и попробуйте
{ \"тест\":\"некоторые данные\" }
Member 12857222
где
в веб-сервисе или PHP-странице
David_Wimbley
Найдите минутку и подумайте о написанном коде. Где вы потребляете код, который требует от вас манипулировать JSON. Вы используете PHP для доступа к ASP.NET веб-сервис (asmx) так где же будет иметь смысл, что вам нужно обработать упомянутое преобразование.
Я пытаюсь заставить вас думать самостоятельно вместо того, чтобы пытаться просто получить ответы на свои вопросы, вы никогда не научитесь этому.
Member 12857222
Я хорошо читаю код
Переменная (resultData) выдается из PHP с помощью curl-это JSON-строку
также переменная, полученная в методе (SaveData), является Строковой
Так что никаких проблем с конверсией нет .
Спасибо
Shashank Laxman
на странице PHP json должен быть в строковом формате,попробуйте, если он работает после преобразования в строку JSON
$data = '{\"results\": [{\"msgId\": \"001\",\"чтобы\": \"9665312114\",\"status\": \"D\"}, {\"msgId\": \"859911880\",\"чтобы\": \"966535112578\",\"status\": \"N\"}, {\"msgId\": \"859911880\",\"чтобы\": \"966535112579\",\"статус\": \"S\"}]}' ;