2013-08-30 6 views
0

Je voudrais effectuer une opération PUT sur un service Web en utilisant CURL. Supposons que:Comment effectuer une opération PUT en utilisant CURL en PHP?

url webservice: http://stageapi.myprepaid.co.za/api/ConsumerRegisterRequest/cac52674-1711-e311-b4a8-00155d4905d3

commune = NMBM sgc = 12 345

J'ai écrit le code ci-dessous, mais il émet ce message d'erreur: "ExceptionMessage": "Référence d'objet non mettre à une instance d'un objet. ". Toute aide serait tellement appréciée. Merci!

<?php 
function sendJSONRequest($url, $data) 
{    
    $data_string = json_encode($data); 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(      
     'Content-Type: application/json', 
     'Accept: application/json', 
     'X-MP-Version: 10072013')      
    ); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    ob_start(); 
    $result = curl_exec($ch); 
    $info = curl_getinfo($ch); 
    if ($result === false || $info['http_code'] == 400) { 
     return $result; 
    } else { 
     return $result; 
    } 
    ob_end_clean(); 
    curl_close($ch); 
} 

$mun = $_GET['municipality']; 
$sgc = $_GET['sgc']; 
$req = $_GET['req']; //cac52674-1711-e311-b4a8-00155d4905d3 

//myPrepaid PUT URL 
echo $mpurl = "http://stageapi.myprepaid.co.za/api/ConsumerRegisterRequest/$req"; 

// Set Variables 
$data = array("Municipality" => "$mun", "SGC" => "$sgc"); 

//Get Response 
echo $response = sendJSONRequest($mpurl, $data); 

?> 
+0

duplication possible de [Utilisation de la méthode PUT avec PHP cUrl Library] (http://stackoverflow.com/questions/3958226/using-put-method-with-php-curl-library) –

Répondre

0

Je copiais votre code, mais changé il pointé sur un serveur HTTP très basique sur mon localhost. Votre code fonctionne correctement, et faire la demande suivante:

PUT /api/ConsumerRegisterRequest/cac52674-1711-e311-b4a8-00155d4905d3 HTTP/1.1 
Host: localhost:9420 
Content-Type: application/json 
Accept: application/json 
X-MP-Version: 10072013 
Content-Length: 37 

{"Municipality":"NMBM","SGC":"12345"} 

Le message d'erreur que vous recevez provient du serveur stageapi.myprepaid.co.za. Ceci est la réponse complète quand je signale revenir à eux

HTTP/1.1 500 Internal Server Error 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Type: application/json; charset=utf-8 
Expires: -1 
Server: Microsoft-IIS/8.0 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Fri, 30 Aug 2013 04:30:41 GMT 
Connection: close 
Content-Length: 867 

{"Message":"An error has occurred.","ExceptionMessage":"Object reference not set to an instance of an object.","ExceptionType":"System.NullReferenceException","StackTrace":" at MyPrepaidApi.Controllers.ConsumerRegisterRequestController.Put(CrmRegisterRequest value) in c:\\Workspace\\MyPrepaid\\Prepaid Vending System\\PrepaidCloud\\WebApi\\Controllers\\ConsumerRegisterRequestController.cs:line 190\r\n at lambda_method(Closure , Object , Object[])\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass13.<GetExecutor>b__c(Object instance, Object[] methodParameters)\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)\r\n at System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func`1 func, CancellationToken cancellationToken)"} 

Vous pouvez consulter l'API pour vous assurer que vous les transmettre les informations correctes. Si vous êtes, le problème pourrait être de leur côté.

Et même si je me rends compte que cela ne fait pas partie de votre question et que cela est en cours de développement, n'oubliez pas de désinfecter toutes les données de $_GET. :)

+0

Merci. Je pense que le code fonctionne correctement. J'ai essayé un codage différent et il m'a quand même donné le message d'erreur mentionné ci-dessus. Peut-être qu'il y a vraiment quelque chose qui ne va pas dans la fin du webservice. – maikelsabido

0

Essayez avec:

curl_setopt($ch, CURLOPT_PUT, true); 
+0

J'ai essayé d'utiliser ceci déjà mais cela n'a toujours pas fonctionné. Merci quand même. :) – maikelsabido

Questions connexes