Загрузка...

Connection/Shop id - RuKassa?

Thread in Thematic questions created by LilPeep Today at 5:10 PM. 50 views

  1. LilPeep
    LilPeep Topic starter Today at 5:10 PM Hate me
    Делаю интеграцию по документации, но при создании платежа получаю ошибку:

    “Попробуйте позже или напишите в поддержку — error shop_id or token.

    В поддержку уже обращался — там ответили, что shop_id получить нельзя, поэтому я переписал интеграцию и использую только API-токен, но ошибка всё равно остаётся.

    Код показать не могу, поэтому прошу пример в общем виде:

    как у вас реализована привязка мерчанта и токена при создании платежа?
    Мерчант у меня верифицирован.
     
    1. ChatGPT
      avatarLilPeep , если у тебя в тексте только упоминание, то ориентируюсь на заголовок и прошлое сообщение.

      Ошибка shop_id or token обычно значит одно из трёх:


      передаётся неправильный shop_id
      токен не от этого мерчанта
      запрос собирается не в том формате, который ждёт RuKassa


      Если поддержка сказала, что shop_id получить нельзя, то тут ключевой момент: некоторые интеграции реально работают не по "свободному" shop_id, а по данным мерчанта из ЛК/API, где идентификатор уже жёстко привязан к токену. То есть просто убрать shop_id из логики не всегда можно — иногда он всё равно должен участвовать в запросе, просто берётся не "вручную".

      В общем виде схема обычно такая:

      Code

      $config = [
      'merchant_id' => 'ID_МЕРЧАНТА_ИЛИ_SHOP_ID',
      'token' => 'API_TOKEN',
      'base_url' => 'https://...',
      ];
      При создании платежа:

      Code

      $payload = [
      'amount' => 100.00,
      'order_id' => '12345',
      'currency' => 'RUB',
      'desc' => 'Оплата заказа 12345',
      ];
      Дальше запрос подписывается/авторизуется токеном:

      Code

      $headers = [
      'Authorization: Bearer ' . $config['token'],
      'Content-Type: application/json',
      ];
      И отправляется на метод создания счёта/платежа:

      Code

      POST /api/payment/create
      {
      "shop_id": "merchant_id",
      "amount": 100.00,
      "order_id": "12345",
      "currency": "RUB",
      "desc": "Оплата заказа 12345"
      }
      То есть логика обычно такая:

      token — подтверждает, что ты имеешь право работать с API
      shop_id / merchant_id — указывает, для какого именно магазина создаётся платёж


      Если передавать только токен, а метод всё равно ждёт shop_id, будет как раз твоя ошибка.

      Что бы я проверил у тебя в первую очередь:


      Не перепутан ли API token от одного проекта с merchant/shop от другого
      Нет ли пробелов в токене в начале/конце
      Передаёшь ли ты shop_id именно в том поле, которое ждёт метод
      Не отправляешь ли form-data вместо JSON, если в доке нужен JSON
      Не используешь ли тестовый токен на боевом URL или наоборот
      Совпадает ли название поля: где-то shop_id, где-то merchant_id, где-то просто shop


      Ещё важный момент: если мерчант верифицирован, это не значит автоматически, что API-доступ активен корректно именно для этого токена. Иногда токен перевыпущен, отключён или относится к другому приложению.

      Пример "в общем виде", как я бы строил:

      Code

      $shopId = 'твой_shop_id';
      $token = 'твой_api_token';

      $data = [
      'shop_id' => $shopId,
      'amount' => 150,
      'order_id' => 'ORDER_1001',
      'currency' => 'RUB',
      'description' => 'Пополнение баланса',
      ];

      $ch = curl_init('https://api.example.com/payment/create');
      curl_setopt($ch, CURLOPT_POST, true);
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
      'Content-Type: application/json',
      'Authorization: Bearer ' . $token,
      ]);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

      $response = curl_exec($ch);
      $error = curl_error($ch);
      curl_close($ch);
      Если совсем кратко: токен не заменяет shop_id, если endpoint требует оба параметра.

      Чтобы не гадать, можешь без кода скинуть сюда:

      точное название метода из документации
      какие поля ты отправляешь
      куда именно кладёшь токен — в header, body, query
      пример ответа API целиком без секретов


      Тогда я уже скажу точнее, в какой именно связке у тебя ломается авторизация.
Loading...