Bitrix24-Rest-API-post-request mit ASP.NET

Bitrix24 CRM haben webhook funktionale hinzufügen führt (clients), CRM. Die gesamte Dokumentation ist geschrieben in php, aber ich will ASP.NET. Hier ist, wie Sie tun es auf php:

$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);

Ich versuche das gleiche zu tun, mit ASP.NET, bekomme aber immer den Fehler 400 als Antwort. Ich fast sicher, dass das problem in der Anfrage Parameter, Zeile const string data = @"[{""fields"":{""title"":""Test""}}]";. Ich habe versucht, Tonnen von Kombinationen, aber nichts funktioniert.

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;
}
InformationsquelleAutor randomsuffer | 2017-02-27



2 Replies
  1. 5

    Bitrix24 support sind sehr „glücklich“ mit php und weiß nicht, über andere Sprachen 🙁 Nach einigen Untersuchungen fand ich, Weg mit anonymen Objekten und json.net. Das Beispiel sollte sieht wie folgt aus:

    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

    Update-Dec 13:

    Manchmal können Sie nicht (oder nicht wollen) legen Sie die Feldnamen direkt in ein anonymes Objekt. So, ein Wörterbuch verwendet werden kann:

    var data = new
    {
        ID = someId,
        FIELDS = new Dictionary<string, object>()
        {
            [options.SomeFieldName] = fieldValue,
        },
    };
  2. 0

    Habe ich das problem gelöst mit diesem code:

    public void CreateLead( string title, decimal opportunity, string contactName, string phoneNumber, string email )
        {
            try
            {                
                string accessToken = GetNewAccessToken();
    
                string url = string.Format( "https://{0}/rest/crm.lead.add.json", portal_name );
    
                var data = new
                {
                    fields = new
                    {
                        TITLE = title,
                        CURRENCY_ID = "RUB",
                        STATUS_ID = "NEW",
                        OPENED = "Y",
                        OPPORTUNITY = opportunity,
                        ASSIGNED_BY_ID = 46,
                        COMPANY_TITLE = contactName,
                        PHONE =  new List<PHONE>() { new PHONE() { VALUE_TYPE = "WORK", TYPE_ID = "PHONE", VALUE = phoneNumber } }.ToArray(),
                        EMAIL = new List<EMAIL>() { new EMAIL() { VALUE_TYPE = "WORK", TYPE_ID = "EMAIL", VALUE = email } }.ToArray()
                    },
                    @params = new
                    {
                        REGISTER_SONET_EVENT = "Y"
                    }
                };
    
                BitrixLead lead = new BitrixLead();
    
                lead.TITLE = title;
                lead.CURRENCY_ID = "RUB";
                lead.STATUS_ID = "NEW";
                lead.OPENED = "Y";
                lead.OPPORTUNITY = opportunity.ToString();                
    
                if (!string.IsNullOrEmpty( contactName ))
                    lead.COMPANY_TITLE = contactName;
    
                if (!string.IsNullOrEmpty( phoneNumber ))
                    lead.PHONE = new List<PHONE>() { new PHONE() { VALUE_TYPE="WORK", TYPE_ID="PHONE", VALUE = phoneNumber }}.ToArray();
    
                if (!string.IsNullOrEmpty( email ))
                    lead.EMAIL = new List<EMAIL>() { new EMAIL() { VALUE_TYPE = "WORK", TYPE_ID = "EMAIL", VALUE = email } }.ToArray();
    
    
                PostToAPI( url, accessToken, data );
            }
            catch (Exception exc)
            {
            }
        }
    
    private void PostToAPI( string url, string token, object data )
        {
            string json = Newtonsoft.Json.JsonConvert.SerializeObject( data );
    
            var http = (HttpWebRequest)WebRequest.Create( new Uri( url ) );
            http.Accept = "application/json; charset=utf-8";
            http.ContentType = "application/json; charset=utf-8";
            http.Method = "POST";            
            http.Headers.Add( "Authorization", "Bearer " + token );
    
            UTF8Encoding encoding = new UTF8Encoding();
            Byte[] bytes = encoding.GetBytes( json );
    
            Stream newStream = http.GetRequestStream();
            newStream.Write( bytes, 0, bytes.Length );
            newStream.Close();
    
            var response = http.GetResponse();            
        }
    • Während dieser code kann die Frage beantworten, die Bereitstellung zusätzlicher Rahmen an, wie und/oder warum es das problem behebt, das würde verbessern die Antwort, die langfristigen Wert.Read this.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.