Como gerar a assinatura correta (SIG) na API OK.RU. Trabalhamos com um erro 104

Não faz muito tempo, tive dificuldade. Não consegui criar o SIG correto (erro 104) quando solicitei a API no OK.RU (colegas de classe). Como se viu, eu não era o único, as receitas oferecidas na rede não funcionaram muito bem (verifiquei muitas usando o método poke). Na verdade, eles funcionaram, eu simplesmente não entendi como criar a consulta correta corretamente, para que o SIG também estivesse correto.

Especificamente, esta postagem é dedicada especificamente ao erro da API 104 OK.RU.

PARAM_SIGNATURE 104   

Abaixo está um código simples para obter uma lista de álbuns. O código é um pouco complicado (escrevi a classe certa para mim, mas é específico e não muito útil para ninguém), mas descreve a essência, e muitos programadores iniciantes podem criar sua própria classe com base em um exemplo.

 protected $params = array( 'application_id' => '5*******6', 'application_key' => 'C***********A', 'session_secret_key' => '*************0' ); protected $apiUrl = 'https://api.ok.ru/fb.do?'; public function getalbums( Request $request ) { //access_token        . $userok = Userok::where('useroks.user_id', '=', $request->user_id)->first(); $paramsArray = array( 'application_key' => $this->params['application_key'], 'format' => 'json', 'method' => 'photos.getAlbums', ); ksort($paramsArray); foreach($paramsArray as $k=>$v) { $paramsStr .= $k . "=" . $v; } /***    .   ,     (    ). $sig = strtolower( md5( $paramsStr) . md5( $userok->access_token .$this->params['session_secret_key'] ) ); **/ $sectret_key = md5($userok->access_token.$this->params['session_secret_key']); $sig = md5($paramsStr.$sectret_key); $paramsArray['sig'] = $sig; $paramsArray['access_token'] = $userok->access_token; return $this->sendRequest( $this->apiUrl, $paramsArray, 'POST' ); } protected function sendRequest($url = '', $params = array(), $method = 'POST') { if(is_array($params)) { $params = http_build_query($params); } $ch = curl_init(); if($method == 'GET') { $url .= $params; } else if($method == 'POST') { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); $result = curl_exec($ch); curl_close($ch); return json_decode($result, true); } 

Mas para que isso funcione, você precisa do $ paramsArray correto; caso contrário, você resolverá o 104º erro, mas obterá outro. Muitos programadores iniciantes provavelmente ignorarão os esforços do OK.RU para ajudar os desenvolvedores.

Então, siga o link https://apiok.ru/dev/methods/ .

Encontramos este formulário:



Nós preenchemos os dados necessários e obtemos essencialmente uma instrução pronta e, além disso, testamos nossa solicitação.

Espero que o artigo tenha sido útil.

Source: https://habr.com/ru/post/pt468315/


All Articles