Перейти к содержимому


Фотография

Пример Интеграции С 1С

Интеграция API

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 19

#1 Malfarion

Malfarion

    Новичок

  • Пользователи
  • 13 сообщений

Отправлено 09 Январь 2016 - 19:25

Привожу пример интеграции с 1С для ваших клиентов. Желаю вам в новом году в 2 раза больше пользователей, и чтобы больше ваших разработчиков доводили до ума API (например метод с информацией о текущих звонках).

 

Самое сложное это сформировать заголовок авторизации потому что штатных средств формирования HMAC хэшей в 1С нет. 

&НаСервере
Функция ПолучитьПодпись(Метод,Данные) 
	Телефония_Key=Константы.Телефония_Key.Получить();
	Secret=Константы.Телефония_Secret.Получить();
	ScrptCtrl=Новый COMОбъект("MSScriptControl.ScriptControl");
	ScrptCtrl.language = "javascript";
	
	ScrptCtrl.AddCode("
	|var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase        */
	|var b64pad  = ""=""; /* base-64 pad character. ""="" for strict RFC compliance   */
	|var chrsz   = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode      */
	|function Auth_Hash(method,paramsStr,secret){ return base64_encode(hex_hmac_sha1(secret,method + paramsStr + md5(paramsStr)));}
	|function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}
	|function md5(s)    { return rstr2hex(rstr_md5(str2rstr_utf8(s))); }
	|function core_sha1(x, len)
	|{
	|  /* append padding */
	|  x[len >> 5] |= 0x80 << (24 - len % 32);
	|  x[((len + 64 >> 9) << 4) + 15] = len;
	|
	|  var w = Array(80);
	|  var a =  1732584193;
	|  var b = -271733879;
	|  var c = -1732584194;
	|  var d =  271733878;
	|  var e = -1009589776;
	|
	|  for(var i = 0; i < x.length; i += 16)
	|  {
	|    var olda = a;
	|    var oldb = b;
	|    var oldc = c;
	|    var oldd = d;
	|    var olde = e;
	|
	|    for(var j = 0; j < 80; j++)
	|    {
	|      if(j < 16) w[j] = x[i + j];
	|      else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
	|      var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
	|                       safe_add(safe_add(e, w[j]), sha1_kt(j)));
	|      e = d;
	|      d = c;
	|      c = rol(b, 30);
	|      b = a;
	|      a = t;
	|    }
	|
	|    a = safe_add(a, olda);
	|    b = safe_add(b, oldb);
	|    c = safe_add(c, oldc);
	|    d = safe_add(d, oldd);
	|    e = safe_add(e, olde);
	|  }
	|  return Array(a, b, c, d, e);
	|
	|}
	|
	|/*
	| * Perform the appropriate triplet combination function for the current
	| * iteration
	| */
	|function sha1_ft(t, b, c, d)
	|{
	|  if(t < 20) return (b & c) | ((~b) & d);
	|  if(t < 40) return b ^ c ^ d;
	|  if(t < 60) return (b & c) | (b & d) | (c & d);
	|  return b ^ c ^ d;
	|}
	|
	|/*
	| * Determine the appropriate additive constant for the current iteration
	| */
	|function sha1_kt(t)
	|{
	|  return (t < 20) ?  1518500249 : (t < 40) ?  1859775393 :
	|         (t < 60) ? -1894007588 : -899497514;
	|}
	|
	|/*
	| * Calculate the HMAC-SHA1 of a key and some data
	| */
	|function core_hmac_sha1(key, data)
	|{
	|  var bkey = str2binb(key);
	|  if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);
	|
	|  var ipad = Array(16), opad = Array(16);
	|  for(var i = 0; i < 16; i++)
	|  {
	|    ipad[i] = bkey[i] ^ 0x36363636;
	|    opad[i] = bkey[i] ^ 0x5C5C5C5C;
	|  }
	|
	|  var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
	|  return core_sha1(opad.concat(hash), 512 + 160);
	|}
	|
	|/*
	| * Add integers, wrapping at 2^32. This uses 16-bit operations internally
	| * to work around bugs in some JS interpreters.
	| */
	|function safe_add(x, y)
	|{
	|  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
	|  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
	|  return (msw << 16) | (lsw & 0xFFFF);
	|}
	|
	|/*
	| * Bitwise rotate a 32-bit number to the left.
	| */
	|function rol(num, cnt)
	|{
	|  return (num << cnt) | (num >>> (32 - cnt));
	|}
	|
	|/*
	| * Convert an 8-bit or 16-bit string to an array of big-endian words
	| * In 8-bit function, characters >255 have their hi-byte silently ignored.
	| */
	|function str2binb(str)
	|{
	|  var bin = Array();
	|  var mask = (1 << chrsz) - 1;
	|  for(var i = 0; i < str.length * chrsz; i += chrsz)
	|    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);
	|  return bin;
	|}
	|/*
	| * Convert an array of big-endian words to a hex string.
	| */
	|function binb2hex(binarray)
	|{
	|  var hex_tab = hexcase ? ""0123456789ABCDEF"" : ""0123456789abcdef"";
	|  var str = """";
	|  for(var i = 0; i < binarray.length * 4; i++)
	|  {
	|    str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
	|           hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8  )) & 0xF);
	|  }
	|  return str;
	|}
	|
	|/*
	| * Convert an array of big-endian words to a base-64 string
	| */
	|	function base64_encode( data ) {	// Encodes data with MIME base64
	|	// 
	|	// +   original by: Tyler Akins (http://rumkin.com)
	|	// +   improved by: Bayron Guevara
	|
	|	var b64 = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="";
	|	var o1, o2, o3, h1, h2, h3, h4, bits, i=0, enc='';
	|
	|	do { // pack three octets into four hexets
	|		o1 = data.charCodeAt(i++);
	|		o2 = data.charCodeAt(i++);
	|		o3 = data.charCodeAt(i++);
	|
	|		bits = o1<<16 | o2<<8 | o3;
	|
	|		h1 = bits>>18 & 0x3f;
	|		h2 = bits>>12 & 0x3f;
	|		h3 = bits>>6 & 0x3f;
	|		h4 = bits & 0x3f;
	|
	|		// use hexets to index into b64, and append result to encoded string
	|		enc += b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
	|	} while (i < data.length);
	|
	|	switch( data.length % 3 ){
	|		case 1:
	|			enc = enc.slice(0, -2) + '==';
	|		break;
	|		case 2:
	|			enc = enc.slice(0, -1) + '=';
	|		break;
	|	}
	|
	|	return enc;
	|} //////
	|function rstr_md5(s)
	|{
	|  return binl2rstr(binl_md5(rstr2binl(s), s.length * 8));
	|}
	|
	|/*
	| * Calculate the HMAC-MD5, of a key and some data (raw strings)
	| */
	|function rstr_hmac_md5(key, data)
	|{
	|  var bkey = rstr2binl(key);
	|  if(bkey.length > 16) bkey = binl_md5(bkey, key.length * 8);
	|
	|  var ipad = Array(16), opad = Array(16);
	|  for(var i = 0; i < 16; i++)
	|  {
	|    ipad[i] = bkey[i] ^ 0x36363636;
	|    opad[i] = bkey[i] ^ 0x5C5C5C5C;
	|  }
	|
	|  var hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
	|  return binl2rstr(binl_md5(opad.concat(hash), 512 + 128));
	|}
	|
	|/*
	| * Convert a raw string to a hex string
	| */
	|function rstr2hex(input)
	|{
	|  try { hexcase } catch(e) { hexcase=0; }
	|  var hex_tab = hexcase ? ""0123456789ABCDEF"" : ""0123456789abcdef"";
	|  var output = """";
	|  var x;
	|  for(var i = 0; i < input.length; i++)
	|  {
	|    x = input.charCodeAt(i);
	|    output += hex_tab.charAt((x >>> 4) & 0x0F)
	|           +  hex_tab.charAt( x        & 0x0F);
	|  }
	|  return output;
	|}
	|
	|/*
	| * Convert a raw string to a base-64 string
	| */
	|function rstr2b64(input)
	|{
	|  try { b64pad } catch(e) { b64pad=''; }
	|  var tab = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"";
	|  var output = """";
	|  var len = input.length;
	|  for(var i = 0; i < len; i += 3)
	|  {
	|    var triplet = (input.charCodeAt(i) << 16)
	|                | (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0)
	|                | (i + 2 < len ? input.charCodeAt(i+2)      : 0);
	|    for(var j = 0; j < 4; j++)
	|    {
	|      if(i * 8 + j * 6 > input.length * 8) output += b64pad;
	|      else output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F);
	|    }
	|  }
	|  return output;
	|}
	|
	|/*
	| * Convert a raw string to an arbitrary string encoding
	| */
	|function rstr2any(input, encoding)
	|{
	|  var divisor = encoding.length;
	|  var i, j, q, x, quotient;
	|
	|  /* Convert to an array of 16-bit big-endian values, forming the dividend */
	|  var dividend = Array(Math.ceil(input.length / 2));
	|  for(i = 0; i < dividend.length; i++)
	|  {
	|    dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1);
	|  }
	|
	|  /*
	|   * Repeatedly perform a long division. The binary array forms the dividend,
	|   * the length of the encoding is the divisor. Once computed, the quotient
	|   * forms the dividend for the next step. All remainders are stored for later
	|   * use.
	|   */
	|  var full_length = Math.ceil(input.length * 8 /
	|                                    (Math.log(encoding.length) / Math.log(2)));
	|  var remainders = Array(full_length);
	|  for(j = 0; j < full_length; j++)
	|  {
	|    quotient = Array();
	|    x = 0;
	|    for(i = 0; i < dividend.length; i++)
	|    {
	|      x = (x << 16) + dividend[i];
	|      q = Math.floor(x / divisor);
	|      x -= q * divisor;
	|      if(quotient.length > 0 || q > 0)
	|        quotient[quotient.length] = q;
	|    }
	|    remainders[j] = x;
	|    dividend = quotient;
	|  }
	|
	|  /* Convert the remainders to the output string */
	|  var output = """";
	|  for(i = remainders.length - 1; i >= 0; i--)
	|    output += encoding.charAt(remainders[i]);
	|
	|  return output;
	|}
	|
	|/*
	| * Encode a string as utf-8.
	| * For efficiency, this assumes the input is valid utf-16.
	| */
	|function str2rstr_utf8(input)
	|{
	|  var output = """";
	|  var i = -1;
	|  var x, y;
	|
	|  while(++i < input.length)
	|  {
	|    /* Decode utf-16 surrogate pairs */
	|    x = input.charCodeAt(i);
	|    y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0;
	|    if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF)
	|    {
	|      x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);
	|      i++;
	|    }
	|
	|    /* Encode output as utf-8 */
	|    if(x <= 0x7F)
	|      output += String.fromCharCode(x);
	|    else if(x <= 0x7FF)
	|      output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F),
	|                                    0x80 | ( x         & 0x3F));
	|    else if(x <= 0xFFFF)
	|      output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),
	|                                    0x80 | ((x >>> 6 ) & 0x3F),
	|                                    0x80 | ( x         & 0x3F));
	|    else if(x <= 0x1FFFFF)
	|      output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),
	|                                    0x80 | ((x >>> 12) & 0x3F),
	|                                    0x80 | ((x >>> 6 ) & 0x3F),
	|                                    0x80 | ( x         & 0x3F));
	|  }
	|  return output;
	|}
	|
	|/*
	| * Encode a string as utf-16
	| */
	|function str2rstr_utf16le(input)
	|{
	|  var output = """";
	|  for(var i = 0; i < input.length; i++)
	|    output += String.fromCharCode( input.charCodeAt(i)        & 0xFF,
	|                                  (input.charCodeAt(i) >>> 8) & 0xFF);
	|  return output;
	|}
	|
	|function str2rstr_utf16be(input)
	|{
	|  var output = """";
	|  for(var i = 0; i < input.length; i++)
	|    output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF,
	|                                   input.charCodeAt(i)        & 0xFF);
	|  return output;
	|}
	|
	|/*
	| * Convert a raw string to an array of little-endian words
	| * Characters >255 have their high-byte silently ignored.
	| */
	|function rstr2binl(input)
	|{
	|  var output = Array(input.length >> 2);
	|  for(var i = 0; i < output.length; i++)
	|    output[i] = 0;
	|  for(var i = 0; i < input.length * 8; i += 8)
	|    output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (i%32);
	|  return output;
	|}
	|
	|/*
	| * Convert an array of little-endian words to a string
	| */
	|function binl2rstr(input)
	|{
	|  var output = """";
	|  for(var i = 0; i < input.length * 32; i += 8)
	|    output += String.fromCharCode((input[i>>5] >>> (i % 32)) & 0xFF);
	|  return output;
	|}
	|
	|/*
	| * Calculate the MD5 of an array of little-endian words, and a bit length.
	| */
	|function binl_md5(x, len)
	|{
	|  /* append padding */
	|  x[len >> 5] |= 0x80 << ((len) % 32);
	|  x[(((len + 64) >>> 9) << 4) + 14] = len;
	|
	|  var a =  1732584193;
	|  var b = -271733879;
	|  var c = -1732584194;
	|  var d =  271733878;
	|
	|  for(var i = 0; i < x.length; i += 16)
	|  {
	|    var olda = a;
	|    var oldb = b;
	|    var oldc = c;
	|    var oldd = d;
	|
	|    a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
	|    d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
	|    c = md5_ff(c, d, a, b, x[i+ 2], 17,  606105819);
	|    b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
	|    a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
	|    d = md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426);
	|    c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
	|    b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
	|    a = md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
	|    d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
	|    c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
	|    b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
	|    a = md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682);
	|    d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
	|    c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
	|    b = md5_ff(b, c, d, a, x[i+15], 22,  1236535329);
	|
	|    a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
	|    d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
	|    c = md5_gg(c, d, a, b, x[i+11], 14,  643717713);
	|    b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
	|    a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
	|    d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);
	|    c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
	|    b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
	|    a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
	|    d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
	|    c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
	|    b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);
	|    a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
	|    d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
	|    c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473);
	|    b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
	|
	|    a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
	|    d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
	|    c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562);
	|    b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
	|    a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
	|    d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);
	|    c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
	|    b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
	|    a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174);
	|    d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
	|    c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
	|    b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);
	|    a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
	|    d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
	|    c = md5_hh(c, d, a, b, x[i+15], 16,  530742520);
	|    b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
	|
	|    a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
	|    d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415);
	|    c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
	|    b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
	|    a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);
	|    d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
	|    c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
	|    b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
	|    a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
	|    d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
	|    c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
	|    b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649);
	|    a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
	|    d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
	|    c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);
	|    b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
	|
	|    a = safe_add(a, olda);
	|    b = safe_add(b, oldb);
	|    c = safe_add(c, oldc);
	|    d = safe_add(d, oldd);
	|  }
	|  return Array(a, b, c, d);
	|}
	|
	|/*
	| * These functions implement the four basic operations the algorithm uses.
	| */
	|function md5_cmn(q, a, b, x, s, t)
	|{
	|  return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
	|}
	|function md5_ff(a, b, c, d, x, s, t)
	|{
	|  return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
	|}
	|function md5_gg(a, b, c, d, x, s, t)
	|{
	|  return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
	|}
	|function md5_hh(a, b, c, d, x, s, t)
	|{
	|  return md5_cmn(b ^ c ^ d, a, b, x, s, t);
	|}
	|function md5_ii(a, b, c, d, x, s, t)
	|{
	|  return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
	|}
	|
	|/*
	| * Add integers, wrapping at 2^32. This uses 16-bit operations internally
	| * to work around bugs in some JS interpreters.
	| */
	|function safe_add(x, y)
	|{
	|  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
	|  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
	|  return (msw << 16) | (lsw & 0xFFFF);
	|}
	|
	|/*
	| * Bitwise rotate a 32-bit number to the left.
	| */
	|function bit_rol(num, cnt)
	|{
	|  return (num << cnt) | (num >>> (32 - cnt));
	|}");
	Рез=ScrptCtrl.Run("Auth_Hash",Метод,Данные,Secret);
	Возврат Телефония_Key+":"+Рез;
КонецФункции

&НаСервере
Процедура CallНаСервере(ВнутреннийНомер,ТелефонНазначения) Экспорт
	Если ВнутреннийНомер="" тогда
		Сообщить("У пользователя не указан внутренний номер.Вызов отменен!");
		Возврат;
	КонецЕсли;	
	Метод="/v1/request/callback/";
	Данные="format=json&from="+ВнутреннийНомер+"&sip="+ВнутреннийНомер+"&to="+ТелефонНазначения;	     
	Заголовки=Новый Соответствие();
	Заголовки.Вставить("Authorization",ПолучитьПодпись(Метод,Данные));
	HTTP=Новый HTTPСоединение("api.zadarma.com",,,,,,Новый ЗащищенноеСоединениеOpenSSL());
	Запрос=Новый HTTPЗапрос(Метод+"?"+Данные,Заголовки);
	Ответ=HTTP.Получить(Запрос);
КонецПроцедуры

Вам необходимы 2 константы в составе конфигурации :

Телефония_Key
Телефония_Secret

значение которых можно получить https://ss.zadarma.com/api/

 

Приведен пример функции CallBack. По аналогии не сложно сделать любую другую из API.

по вопросам можно обращаться andrey.k собака a-system.biz



#2 Igor

Igor

    Продвинутый участник

  • Главные администраторы
  • 4 828 сообщений

Отправлено 10 Январь 2016 - 23:46

Спасибо большое!Вас также с Новым Годом и Рождеством!



#3 Igor

Igor

    Продвинутый участник

  • Главные администраторы
  • 4 828 сообщений

Отправлено 01 Август 2016 - 23:38

Для желающих интегрироваться не своими руками есть новость:

Существует уже готовая полная интеграция 1С и АТС Zadarma, (правда эта интеграция не бесплатная) подробней у них на сайте: http://simplit.com.ua/blog/?p=1328



#4 Виктор

Виктор

    Новичок

  • Пользователи
  • 2 сообщений

Отправлено 03 Март 2017 - 19:56

День добрый. В 1с появилась возможность обрабатывать GET запросы. Для этого добавлен объект HTTP-сервис.

 

Пока вернуть проверочный параметр мне не удалось

 

строку для PHP

<?php if (isset($_GET['zd_echo'])) exit($_GET['zd_echo']); ?>

 

в терминах 1с я вижу так

 

Ответ = Новый HTTPСервисОтвет(200);
    Если НЕ(Запрос.ПараметрыЗапроса.Получить("zd_echo")=Неопределено) Тогда
        Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
        Ответ.УстановитьТелоИзСтроки(Запрос.ПараметрыЗапроса.Получить("zd_echo"));
 
        Возврат Ответ;
    КонеЦесли;

 

при проверке через браузер, выводится значение параметра zd_echo.

подскажите, куда нужно запихнуть это zd_echo, или формат, чтоб система приняла ответ?



#5 Виктор

Виктор

    Новичок

  • Пользователи
  • 2 сообщений

Отправлено 06 Март 2017 - 14:33

Героически, с помощью доблестной тех поддержки решено
 
Ответ.УстановитьТелоИзСтроки(Запрос.ПараметрыЗапроса.Получить("zd_echo"),,ИспользованиеByteOrderMark.НеИспользовать);


#6 Clevelus

Clevelus

    Продвинутый участник

  • Пользователи
  • 1 043 сообщений
  • Пол:Мужчина
  • Город:Москва
  • Интересы:Программирование, администрирование, финансы. Подробнее на clevelus.ru

Отправлено 25 Декабрь 2018 - 13:32

А почему до сих пор Задарма нет в 1С "из коробки" ?

Скрытый текст


#7 Igor

Igor

    Продвинутый участник

  • Главные администраторы
  • 4 828 сообщений

Отправлено 25 Декабрь 2018 - 22:55

Не слышал про интеграцию на уровне API и вебхуков.  То что раньше было требовало отдельных сборок и настроек для каждой версии, потому проще было с посредниками.

 

Насколько знаю все что они делали в сторону нормальной интеграции они делали в "1С CRM" что так-же далеко от 1С как и Битрикс24 :) Но и там на сайте отображается на тему интеграций "Элемент не найден" :)



#8 Clevelus

Clevelus

    Продвинутый участник

  • Пользователи
  • 1 043 сообщений
  • Пол:Мужчина
  • Город:Москва
  • Интересы:Программирование, администрирование, финансы. Подробнее на clevelus.ru

Отправлено 25 Декабрь 2018 - 23:00

>> Уточним может что-то у них изменилось.

 

Думаю, нужно поднимать на форуме этот вопрос.

В той же 1С:УНФ есть интерфейс, позволяющий отправить пожелания в 1С по включению сервисов ...

Прямо там же, на странице интеграции телефонии ниже.

 

Там сейчас много сервисов (в том числе от 1С, который работает в виде приложения на мобильном телефоне - может быть и в эту сторону еще посмотреть и доработать свое приложение).

Но Задарма нет :( 



#9 Igor

Igor

    Продвинутый участник

  • Главные администраторы
  • 4 828 сообщений

Отправлено 25 Декабрь 2018 - 23:38

Не уверен что какой-то из сервисов предоставляет интеграцию с 1С бесплатно (установку настройку сопровождение).

Не потому что всем жалко а потому что двумя кликами как например с Zoho оно работать не будет. Плюс есть нереальный зоопарк сборок и версий.

Поддерживать весь этот зоопарк могут только специалисты для 1С, чей труд не бесплатен.

На сейчас я знаю минимум 2-3 сервиса которые за немного денег берут на себя танец с бубном с любой версией 1С и интеграцией с Zadarma. И главное поддержку этого со стороны 1С.

Мы поддержку бухгалтера работающего с 1С делать точно не сможем, либо это тоже будет не бесплатно. А если не бесплатно то все уже есть и очень давно.



#10 Clevelus

Clevelus

    Продвинутый участник

  • Пользователи
  • 1 043 сообщений
  • Пол:Мужчина
  • Город:Москва
  • Интересы:Программирование, администрирование, финансы. Подробнее на clevelus.ru

Отправлено 07 Январь 2019 - 16:50

Все сервисы подключаются "бесплатно". Настройка в два клика (в поддерживаемых конфигурациях) - поставить галку и указать от 1 до 3 параметров (в зависимости от оператора).

 

Оно работает в два клика (проверил на нескольких операторах). При чем все функции есть, в том числе номера ответственных и т.п.

 

Конфигурация "Управление нашей фирмой", например, достаточно дешевая. При этом телефония есть и в базовой конфигурации (не только в КОРП). То есть за 5400 рублей (с этого года) навсегда получаешь базовую версию, с примитивной CRM, с возможностью фнт грации с телефонией (более 60 операторов), с почтой ... (в базовой версии возможны интеграции только с тем, что есть в конфигурации)

 

Работает из коробки. "Бесплатно"

>> На сейчас я знаю минимум 2-3 сервиса которые за немного денег берут на себя танец с бубном с любой версией 1С и интеграцией с Zadarma.

Вот именно. Уже три компании не захотели сменить телефонию по моему совету из-за интеграции в 1С (там нет Задарма, настраивал же интеграцию "бухгалтер", никаких денег никто никому не платил - но это я проверил).

 

Кроме зоопарка есть и универсальный модуль.

https://its.1c.ru/db...ntent:7056:hdoc

Из недостатков - подключить можно только одного оператора (ставишь галку на одного, у другого исчезает).

 

Универсальная интеграция (требует выбрать оператора), но кажется у всех выглядит одинаково.

А вот те которое отдельно - свои параметры (часто вообще один - просто гуид и все).

Скрытый текст


#11 Igor

Igor

    Продвинутый участник

  • Главные администраторы
  • 4 828 сообщений

Отправлено 07 Январь 2019 - 17:17

Ок спасибо, посмотрим, может у 1С действительно все изменилось за последний год-полтора.



#12 Clevelus

Clevelus

    Продвинутый участник

  • Пользователи
  • 1 043 сообщений
  • Пол:Мужчина
  • Город:Москва
  • Интересы:Программирование, администрирование, финансы. Подробнее на clevelus.ru

Отправлено 07 Январь 2019 - 17:48

Вряд ли у них что-то изменилось.

Их нужно научиться готовить.

Попробую получить статус Франчайзи, и посмотрю что там у них в документации по этому поводу.

 

И как вариант: раз есть "универсальный" способ, то значит можно подстроиться под него. Вполне возможно, что этот "способ" работает не только в 1С, но и в других местах.



#13 Igor

Igor

    Продвинутый участник

  • Главные администраторы
  • 4 828 сообщений

Отправлено 10 Январь 2019 - 00:26

Универсальный способ это API/Webhook.

 

Но как с ними работает 1С (и работает-ли) не знаю. Точно не как в других местах, больше нигде код на кирилице не написан )))



#14 Gendens

Gendens

    Новичок

  • Пользователи
  • 1 сообщений

Отправлено 20 Январь 2019 - 21:35

Так как, есть вероятность что в 1С УНФ появится телефония Zadarma? Или не стоит ждать?



#15 Clevelus

Clevelus

    Продвинутый участник

  • Пользователи
  • 1 043 сообщений
  • Пол:Мужчина
  • Город:Москва
  • Интересы:Программирование, администрирование, финансы. Подробнее на clevelus.ru

Отправлено 24 Январь 2019 - 09:20

Igor, не смотрел, но "Универсальный" в понятии 1С может быть что угодно. Скорее всего да, это стандартизированный API, ибо там уже более 50 операторов по нему работает и всего три поля заполнить.

 

Gendens, теоретически обработку для 1С:УНФ под Задарма найти можно. Именно внешнюю обработку, чтобы не вмешиваться в конфигурацию. Но из все что нормально находится, это украинский производитель с непонятными гарантиями. На инфорстарте при этом его нет (а покупая там получаешь определенную гарантию), при этом они там были несколько лет назад, но теперь нет, отзывы были плохими. На инфостарте можно комбайны найти под Задарма ... но как-то все плохо. При чем в комментариях еще и выводы делают - раз Задарма не добавлена, то это плохая телефония, поэтому никто и не добавляет, так как никому не нужно.

 

При этом API у Задарма вполне нормальная. Есть пара особенностей "ни как у других", но в целом они никак не должны влиять на возможность написать обработку. А вот "универсальные" работать не будут из-за них точно.

Даже задумался себе обработку написать. На управляемых формах и чтобы работало в WEB версии 1С (на своем сервере). Может быть получится и под фрез версию (просто не смотрел еще какие там особенности).



#16 Igor

Igor

    Продвинутый участник

  • Главные администраторы
  • 4 828 сообщений

Отправлено 25 Январь 2019 - 00:01

Еще есть из "нормальных" обработчик в "простые звонки".



#17 Clevelus

Clevelus

    Продвинутый участник

  • Пользователи
  • 1 043 сообщений
  • Пол:Мужчина
  • Город:Москва
  • Интересы:Программирование, администрирование, финансы. Подробнее на clevelus.ru

Отправлено 25 Январь 2019 - 10:05

Еще есть из "нормальных" обработчик в "простые звонки".

Это тоже из серии комбайнов. То есть, появляется промежуточное звено.

Интеграция с Задарма на 5 пользователей (судя по их сайту) стоит 5000 рублей в год.

Какая разница сколько пользователей? Это чистый "маркетинг" ...

 

Но о них не знал, кстати. Да, это вариант.



#18 Igor

Igor

    Продвинутый участник

  • Главные администраторы
  • 4 828 сообщений

Отправлено 13 Февраль 2019 - 19:35

Судя по всей информации что у меня есть, встроенная интеграция есть только в 1C:УНФ. Им мы написали, они ответили что подумают хотят-ли с нами интегрировать, вот так..

С остальными версиями 1С можно только через "прослойки" например simplit или "простые звонки". Судя по исследованию крупнейших операторов, у всех аналогично.



#19 Clevelus

Clevelus

    Продвинутый участник

  • Пользователи
  • 1 043 сообщений
  • Пол:Мужчина
  • Город:Москва
  • Интересы:Программирование, администрирование, финансы. Подробнее на clevelus.ru

Отправлено 13 Февраль 2019 - 20:05

Я так понял это касается УНФ и ERP (максимальная конфигурация). В остальных просто нет функций CRM систем )) Зачем подключать телефонию в 1С бухгалтеру? А вот менеджеру в УНФ - да, нужно. Кроме это есть куча решений франчайзи и они их делают (если нужны функции CRM) на основе одной из этих двух конфигураций.

Поэтому "у всех аналогично".

 

Но имеем факт, Задарма нет, а куча других операторов в УНФ (одна из самых популярных конфигураций если не для бухгалтера) - есть.

И да, в УНФ куча интеграций, и с Интернет-магазинами, и с ЭДО ...

Но в данном случае интеграция именно с CRM частью УНФ (некоторые только ради нее и покупают УНФ, базовая версия всего 5000 рублей с пожизненными обновлениями), отключая иные модули. Используют только CRM, контрагентов и выставление счетов. А УНФ интегрируют с торговлей или с бухгалтерией, в которой работает уже бухгалтер. Счета попадают из УНФ в управление торговлей, оплаты из торговли в УНФ. Управленческий учет и эффективность менеджеров - в УНФ, а расчеты и бухгалтерия со сдачей отчетности - в УТ (но в целом все можно делать вообще только в УНФ)



#20 lustin

lustin

    Новичок

  • Пользователи
  • 1 сообщений

Отправлено 10 Июнь 2019 - 15:27

У меня больше вопрос - к формированию заголовка авторизации.

 

Можно как-то его упростить-заменить ? С какой целью вообще авторизация сделана именно такой ?







Темы с аналогичным тегами Интеграция, 1с, API

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых пользователей