Cómo generar la firma correcta (SIG) en la API OK.RU. Trabajamos con un error 104

No hace mucho me encontré con dificultades. No logré crear el SIG correcto (error 104) cuando solicité la API en OK.RU (compañeros de clase). Al final resultó que no era el único, las recetas ofrecidas en la red no funcionaron muy bien (verifiqué muchas utilizando el método de empuje). En realidad funcionaron, simplemente no entendí cómo construir la consulta correcta correctamente, por lo que SIG también era correcto.

Específicamente, esta publicación está dedicada específicamente al error 104 OK.RU API.

PARAM_SIGNATURE 104   

A continuación hay un código simple para obtener una lista de álbumes. El código es una pequeña muleta (escribí la clase correcta para mí, pero es específica y no es muy útil para nadie), pero describe la esencia, y muchos programadores novatos pueden crear su propia clase basándose en un ejemplo.

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

Pero para que esto funcione, necesita el $ paramsArray correcto, de lo contrario resolverá el error 104, pero obtendrá otro. Muchos programadores principiantes probablemente ignorarán los esfuerzos de OK.RU para ayudar a los desarrolladores.

Entonces, siga el enlace https://apiok.ru/dev/methods/ .

Encontramos este formulario:



Completamos los datos necesarios y obtenemos esencialmente una instrucción preparada, y además probamos nuestra solicitud.

Espero que el artículo haya sido útil.

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


All Articles