Хобрук: Ваш путь к мастерству в программировании

Получение У вызывающего абонента нет разрешения при попытке updateBillingInfo

Я пытаюсь программно обновить платежный аккаунт для одного из моих проектов. Я использую клиентскую библиотеку узла для googleapis REST. Это мой код:

const { google } = require('googleapis');
const cloudbilling = google.cloudbilling('v1');
async function main() {
  let authClient;
  try {
    authClient = await authorize();
    console.log('AUTH', authClient);
  } catch (err) {
    console.error(err);
  }
  const request = {            
      name: "projects/rensi-28",   
      requestBody: {
        billingAccountName: "billingAccounts/My Billing Account" 
      }    
           
  };
  google.options({auth: authClient});
  try {
    const response = (await cloudbilling.projects.updateBillingInfo(request)).data;    
    console.log(JSON.stringify(response, null, 2));
  } catch (err) {
    console.error('error:', err);
  }
  
}
main();

async function authorize() {
  const auth = new google.auth.GoogleAuth({
    scopes: ['https://www.googleapis.com/auth/cloud-platform']
  });
  return await auth.getClient();
}

Это ошибка, которую я получаю:

errors: [
    {
      message: 'The caller does not have permission',
      domain: 'global',
      reason: 'forbidden'
    }
  ]

Я использую учетную запись службы, и переменная среды установлена ​​правильно, потому что я могу создавать проекты и использовать другие API.

Моя учетная запись службы имеет следующие роли:

Level Role
Project Project Billing Manager
Project Owner
Organization Billing Account Administrator
Organization Billing Account Creator
Organization Project Billing Manager
Organization Billing Account Viewer
Organization Owner
Billing Account Billing Account Administrator
Billing Account Billing Account User
Billing Account Billing Account Viewer

Если включить биллинг из gcloud с той же учетной записью службы, он работает:

gcloud alpha billing projects link p001  --billing-account 45FG32-45FG32-45FG32
gcloud alpha billing projects link p001  --billing-account 45FG32-45FG32-45FG32
billingAccountName: billingAccounts/45FG32-45FG32-45FG32
billingEnabled: true
name: projects/p001/billingInfo
projectId: bxtrb-rensi-28

Что мне не хватает?


Ответы:


1

названия параметров непонятны, попробуйте использовать

идентификатор проекта вместо имени проекта и вместо имени платежной учетной записи используйте идентификатор платежной учетной записи

const request = { 
      name: "projects/rensi-28",   // projectId
      requestBody: {
        billingAccountName: "billingAccounts/My Billing Account" //billingAcountId
      }    
           
  };
28.05.2021
  • Да, я использовал название проекта и имя учетной записи для выставления счетов, а также был необходим идентификатор проекта и идентификатор учетной записи для выставления счетов. 28.05.2021

  • 2

    Неверный формат billingAccountName.

    Используйте формат billingAccounts/45FG32-45FG32-45FG32.

    Ссылка: ProjectBillingInfo.

    28.05.2021
  • Спасибо, имя платежного аккаунта и идентификатор проекта были неверными. 28.05.2021
  • Новые материалы

    Понимание дженериков в TypeScript: подробное руководство
    Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..