2017-02-27 4 views
3

Bitrix24 CRM a webhook functional pour ajouter des prospects (clients) à CRM. Toute la documentation est écrite sur PHP, mais je veux utiliser ASP.NET. Voilà comment ils le font sur php:La demande de publication de l'API de repos Bitrix24 à l'aide d'ASP.NET

$queryUrl = 'https://restapi.bitrix24.ru/rest/1/31uhq2q855fk1foj/crm.lead.add.json'; 
$queryData = http_build_query(array(
    'fields' => array(
     "TITLE" => "NEW LEAD" 
    ), 
    'params' => array(
     "REGISTER_SONET_EVENT" => "Y" 
    ) 
)); 

$curl = curl_init(); 
curl_setopt_array($curl, array(
    CURLOPT_SSL_VERIFYPEER => 0, 
    CURLOPT_POST => 1, 
    CURLOPT_HEADER => 0, 
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_URL => $queryUrl, 
    CURLOPT_POSTFIELDS => $queryData 
)); 

$result = curl_exec($curl); 
curl_close($curl); 

$result = json_decode($result, 1); 

Je suis en train de faire la même chose en utilisant ASP.NET, mais obtenir l'erreur 400 comme une réponse. Je suis presque sûr que le problème est dans les paramètres de demande, ligne const string data = @"[{""fields"":{""title"":""Test""}}]";. J'ai essayé des tonnes de combinaisons, mais rien n'a fonctionné.

const string url = @ "https://companyname.bitrix24.ru/rest/14/31uhq2q855fk1foj/crm.lead.add.json"; 
const string data = @"[{""fields"":{""title"":""Test""}}]"; 

HttpClient client = new HttpClient(); 
client.BaseAddress = new Uri(url); 
byte[] cred = Encoding.UTF8.GetBytes("email:password"); 
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(cred)); 
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); 

HttpContent content = new StringContent(data, Encoding.UTF8, "application/json"); 
HttpResponseMessage messge = client.PostAsync(url, content).Result; 
string description; 
if (messge.IsSuccessStatusCode) { 
    string result = messge.Content.ReadAsStringAsync().Result; 
    description = result; 
} 

Répondre

3

soutien Bitrix24 sont très « heureux » avec php et ne connaît pas d'autres langues :(Après quelques recherches, j'ai trouvé ainsi avec des objets anonymes et json.net Votre échantillon doit ressembler:.

var data = new { 
    fields = new { 
    TITLE = "NEW LEAD" 
    }, 
    @params = new { 
    REGISTER_SONET_EVENT = "Y" 
    } 
}; 
var contentText = JsonConvert.SerializeObject(data); 

var content = new StringContent(contentText, Encoding.UTF8, "application/json"); 
// and so on with HttpClient 
+0

Merci beaucoup pour cette réponse.Une chose: j'ai dû changer 'params' à' @ params' parce que c'est un mot-clé.Tout d'autre a bien fonctionné :) – randomsuffer

+0

Oups, oui. Désolé, j'ai regardé dans ma source pour une autre méthode et j'ai écrit le code "par exemple" directement dans la réponse SO. J'ai corrigé ma réponse. – Dmitry