Решение:
JSON не поддерживает перенос строк в значениях, их появление ломает JSON. Следует заменить символ \n на "\\n"
В этом случае все будет работать как запланировано
--- /оригинальный ответ/
Если посмотреть на пример (например, js sdk)
https://github.com/odnoklassniki/ok-js-sdk/blob/ma...
то можно заметить что при подсчете подписи участвуют оригинальные строки, а при передачи этих же параметров делается encodeURIComponent. Попробуйте сделать также.
PS: Вероятно, требование с encoding-ом не будет если вы будете общаться с API через POST.