A
A
AlexSn20202020-06-24 18:35:56
Python
AlexSn2020, 2020-06-24 18:35:56

How to generate a request to create an Exmo code?

Hello! I've looked all over the net and can't find any clues. I'm trying to remake a trading bot so that it cuts off the exmo code. I changed the program a little, but I just can’t form the correct request.
Tell me what should I do?

import urllib, http.client
import time
import json
# эти модули нужны для генерации подписи API
import hmac, hashlib
from exmo_key import *

# ключи API, которые предоставила exmo
API_KEY = a
# обратите внимание, что добавлена 'b' перед строкой
API_SECRET = b

CURRENCY='RUB'

# базовые настройки
API_URL = 'api.exmo.com'
API_VERSION = 'v1'

# Свой класс исключений
class ScriptError(Exception):
    pass
class ScriptQuitCondition(Exception):
    pass

# все обращения к API проходят через эту функцию
def call_api(api_method, http_method="POST", **kwargs):
    # Составляем словарь {ключ:значение} для отправки на биржу
    # пока что в нём {'nonce':123172368123}
    payload = {'nonce': int(round(time.time()*1000))}

    # Если в ф-цию переданы параметры в формате ключ:значение
    if kwargs:
        # добавляем каждый параметр в словарь payload
        # Получится {'nonce':123172368123, 'param1':'val1', 'param2':'val2'}
        payload.update(kwargs)

    # Переводим словарь payload в строку, в формат для отправки через GET/POST и т.п.
    payload =  urllib.parse.urlencode(payload)

    # Из строки payload получаем "подпись", хешируем с помощью секретного ключа API
    # sing - получаемый ключ, который будет отправлен на биржу для проверки
    H = hmac.new(key=API_SECRET, digestmod=hashlib.sha512)
    H.update(payload.encode('utf-8'))
    sign = H.hexdigest()

    # Формируем заголовки request для отправки запроса на биржу. 
    # Передается публичный ключ API и подпись, полученная с помощью hmac
    headers = {"Content-type": "application/x-www-form-urlencoded",
           "Key":API_KEY,
           "Sign":sign,
            "currency":CURRENCY,
            "amount":10
        }

    # Создаем подключение к бирже, если в течении 60 сек не удалось подключиться, обрыв соединения
    conn = http.client.HTTPSConnection(API_URL, timeout=60)
    # После установления связи, запрашиваем переданный адрес
    # В заголовке запроса уходят headers, в теле - payload
    conn.request(http_method,"/"+API_VERSION + "/" + api_method, payload, headers)
    # Получаем ответ с биржи и читаем его в переменную response
    response = conn.getresponse().read()
    # Закрываем подключение
    conn.close()
    return response

ex_code=call_api('excode_create')
print(ex_code)

Here is the data for the POST request:
curl --location --request POST ' https://api.exmo.com/v1/excode_create ' \
--header 'Content-Type: application/x-www-form-urlencoded' \
- -header 'Key: ' \
--header 'Sign: ' \
--data-urlencode 'currency=BTC' \
--data-urlencode 'amount=10' \
--data-urlencode 'login=test_user' \
-- data-urlencode 'nonce=1592989431'

Answer the question

In order to leave comments, you need to log in

2 answer(s)
A
AlexSn2020, 2020-06-25
@AlexSn2020

No one will answer?)

H
h4r7w3l1, 2020-08-07
@h4r7w3l1

## Getting Started
Install composer in your project: ```curl -s https://getcomposer.org/installer | php```

Create a composer.json file in your project root: ```{
    "require": {
        "exmo/api": "1.*"
    }
}```

Install via composer:```php composer.phar install```

```php
use Exmo\Api\Request;

require 'vendor/autoload.php';

$request = new Request('your_key', 'your_secret');
$result = $request->query('user_info');
...
```

https://github.com/exmo-dev/exmo_composer.git
create new file ./exmo_composer/exmo_make_gc.php
insert your api keys "K-xxxxxxxxxxxxxxx" + "S-xxxxxxxxxxxxxxxxxx"
<?php
use Exmo\Api\Request;
require 'vendor/autoload.php';

$request = new Request('K-00000000000000aaaaaaaaaaaaaaaaaaaaa', 'S-dddddddddddddddddaaaaaaaaaaaaaaassssss');
$result = $request->query('excode_create', Array(   'currency'=>'RUB',    'amount'=>1000,));
var_dump($result);

Request will return code for redeem

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question