Я пытаюсь подключить свое приложение Rails к стороннему API. В их примере кода весь код для подключения к их сервису написан на PHP. С PHP
не знаком.
Это код:
<?php
// Token generation
$timestamp = time();
$uri = "https://api.website.com/post.json";
$password = "somePassword";
$security_token = sha1($timestamp.$uri.$password);
// Webservice call
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $uri);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$post = array();
$post["timestamp"] = $timestamp;
$post["security_token"] = $security_token;
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
curl_setopt($ch, CURLOPT_POST, true);
// USE THIS CODE TO CHECK THAT SSL CERTIFICATE IS VALID:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, "path/to/certifcate/file/certificate.crt");
$ret = curl_exec($ch);
// Check response
if (curl_errno($ch)) {
curl_close($ch);
die("CURL error: ".curl_error($ch));
}
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($http_code != 200) {
die("Server error, HTTP code: $http_code");
}
curl_close($ch);
// Parse response
try {
$json = json_decode($ret);
var_dump($json);
}
catch(Exception $e) {
die("Failed to decode server response");
}
?>
Любая помощь в преобразовании этого в обычный cURL
будет принята с благодарностью и заранее благодарим!
@ miken32 Раньше забыл добавить, но добавил. обычно у меня есть ключ API внутри URL-адреса, и это то, что «позволяет» получить данные, но эта часть: $ security_token = sha1 ($ timestamp. $ uri. $ password); сбивает меня с толку
Что в этом непонятного? Это некоторые строки, отправленные в функцию. Документация PHP находится по адресу php.net/sha1. Ваш код Ruby не показывает попытки сделать правильный запрос, даже не включено тело POST.
Я увидел, что код рубина был неправильным, я скоро отправлю правильный @ miken32
Вот как я это сделал, и это сработало.
uri = URI.parse("https://apilink/post.json")
pass = 'supper-password'
timestamp = Time.now
token = Digest::SHA1(timestamp + uri + pass)
request = Net::HTTP::Post.new(uri)
# request.body = "timestamp&security_token"
req_options = {
use_ssl: uri.scheme == "https",
}
response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(request)
end
render json: response.code
Я не вижу здесь кода Ruby.