Капча в wall.post (vkontakte openapi)

Доброго времени суток!

Подскажите, пожалуйста. Столкнулся с такой проблемой.

У меня есть сайт, подключенный к vkontakte openapi. Мне нужно с него публиковать сообщения на стены пользователей (одно сообщение одному пользователю по запросу). У пользователя приложение (мой подключенный сайт) установлено со всеми необходимыми правами (8195). Пользователь заведомо залогинен Вконтакте.

При загрузке страницы выполняется такой скрипт:

/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .javascript.geshi_code {font-family:monospace;} .javascript.geshi_code .imp {font-weight: bold; color: red;} .javascript.geshi_code .kw1 {color: #000066; font-weight: bold;} .javascript.geshi_code .kw2 {color: #003366; font-weight: bold;} .javascript.geshi_code .kw3 {color: #000066;} .javascript.geshi_code .co1 {color: #006600; font-style: italic;} .javascript.geshi_code .co2 {color: #009966; font-style: italic;} .javascript.geshi_code .coMULTI {color: #006600; font-style: italic;} .javascript.geshi_code .es0 {color: #000099; font-weight: bold;} .javascript.geshi_code .br0 {color: #009900;} .javascript.geshi_code .sy0 {color: #339933;} .javascript.geshi_code .st0 {color: #3366CC;} .javascript.geshi_code .nu0 {color: #CC0000;} .javascript.geshi_code .me1 {color: #660066;} .javascript.geshi_code span.xtra { display:block; }

VK.init({
  apiId: 111111     //тут 111111 = id приложения сайта
    });
 


Затем выполняется выборка друзей пользователя:

/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .javascript.geshi_code {font-family:monospace;} .javascript.geshi_code .imp {font-weight: bold; color: red;} .javascript.geshi_code .kw1 {color: #000066; font-weight: bold;} .javascript.geshi_code .kw2 {color: #003366; font-weight: bold;} .javascript.geshi_code .kw3 {color: #000066;} .javascript.geshi_code .co1 {color: #006600; font-style: italic;} .javascript.geshi_code .co2 {color: #009966; font-style: italic;} .javascript.geshi_code .coMULTI {color: #006600; font-style: italic;} .javascript.geshi_code .es0 {color: #000099; font-weight: bold;} .javascript.geshi_code .br0 {color: #009900;} .javascript.geshi_code .sy0 {color: #339933;} .javascript.geshi_code .st0 {color: #3366CC;} .javascript.geshi_code .nu0 {color: #CC0000;} .javascript.geshi_code .me1 {color: #660066;} .javascript.geshi_code span.xtra { display:block; }

    VK.Auth.getLoginStatus(function(response){
  if (response.session) {
      var uid = response.session.mid;
      VK.Api.call("friends.get",{
    uid: uid,
    fields: 'uid,first_name,last_name,photo'
      },function(data){
    buildFriendList(data.response);
      });
  } else {
      VK.Auth.login(function(response){
    if (response.session) {
        var uid = response.session.mid;
        VK.Api.call("friends.get",{
      uids: uid,
      fields: 'uid,first_name,last_name,photo'
        },function(data){
      buildFriendList(data.response);
        });
    } else {
        alert('Authorisation error');
    }
      },8195);
  }
    });
 


По клику на кнопку выполняется такой код:

/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .javascript.geshi_code {font-family:monospace;} .javascript.geshi_code .imp {font-weight: bold; color: red;} .javascript.geshi_code .kw1 {color: #000066; font-weight: bold;} .javascript.geshi_code .kw2 {color: #003366; font-weight: bold;} .javascript.geshi_code .kw3 {color: #000066;} .javascript.geshi_code .co1 {color: #006600; font-style: italic;} .javascript.geshi_code .co2 {color: #009966; font-style: italic;} .javascript.geshi_code .coMULTI {color: #006600; font-style: italic;} .javascript.geshi_code .es0 {color: #000099; font-weight: bold;} .javascript.geshi_code .br0 {color: #009900;} .javascript.geshi_code .sy0 {color: #339933;} .javascript.geshi_code .st0 {color: #3366CC;} .javascript.geshi_code .nu0 {color: #CC0000;} .javascript.geshi_code .me1 {color: #660066;} .javascript.geshi_code span.xtra { display:block; }

    VK.Auth.getLoginStatus(function(response){
  if (response.session) {
      VK.Api.call("wall.post", {
    owner_id: uid,           // id пользователя, на стену которого публикуется запись.  
    message: 'Привет!'
      }, function(data){
    if (data.response) {
        alert("OK");
    } else if (data.error) {
        if (data.error.error_code == 14) {
      alert("captcha");
        } else if (data.error.error_code == 214) {
      alert("Disabled by target user");
        } else if (data.error.error_code == 10007) {
      return false;        //отменено пользователем
        }
    } else {
        alert("Unknown error");
    }
      });
  }
    });
 


Так вот, при нажатии на кнопку, как и положено, появляется окошко Вконтакте, где нужно пожтвердить публикацию на стену. Нажимаем в нем "Разрешить"... И видим перед собой alert "Captcha". То есть openapi вернул error_code=14. Причем, если капчу потом заполнить и отправить, сообщение публикуется.

В документации Вконтакте эта ошибка описана так:

Если какое-либо действие (например, отправка сообщения) выполняется пользователем слишком часто, то запрос к API может возвращать ошибку "Captcha needed". При этом пользователю понадобится ввести код с изображения и отправить запрос повторно с передачей введенного кода Captcha в параметрах запроса.

Но проблема в том, что у меня капча вылезает даже при первом обращении и вообще постоянно! Ни одного сообщения вообще нельзя опубликовать без капчи. Это совершенно неприемлемо.

Подскажите, пожалуйста, что я делаю не так?

1 ответов


Проблема была в том, что в тексте сообщения содержалась ссылка для перехода на сайт. Когда на стену постится ссылка, вконтакте требует ввести капчу (как защита от спама).


Подскажите пример кода который вызовет форму ввода капчи пользователю


так вот я и прошу пример по

Формировать форму капчи нужно своими силами. После ввода символов с картинки, необходимо повторить запрос wall.post, добавив туда дополнительные параметры: captcha_sig и captcha_key.


вот это не понимаю как сделать