Member 12857222 Ответов: 0

Как я : вызов 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\"}]}' ;

0 Ответов