GASでクラウド会計のデータを取得したいのですが、うまくいきません…
解決したいこと
GASを使用してマネーフォワードクラウド会計Plusのデータをスプレッドシートに取得したいのですがOAuth認証の時点でうまくいかずとても困っています。
無知すぎて一人では解決できず…どなたかご教授いただけないでしょうか?
Webで調べてもクラウド請求書のデータ取得方法は記事が多数あるのですが、クラウド会計についてはどこにもないので、そもそもできないのかな?とも思いだしております。。。泣
実行しているGASコード
※クライアントIDは ${ClientID} に書き変えてます
/**
* 認証を行いアクセストークンをログ出力する
*/
function authorize() {
const service = getMFInvoiceService_();
const authorizationUrl = service.getAuthorizationUrl();
const authorizationUrl2 = authorizationUrl.replace("client_id=${ClientID}&response_type=code&","response_type=code&client_id=${ClientID}&scope=mfc/admin/office.read&"); /** 認証先URLの並び順がおかしいので変更する */
console.log(authorizationUrl3);
/** ★ここで表示された認証先URLをWebでアクセスし、認証ボタンを押した後にエラーになってます… */
}
/**
* 指定した名前で新しいMFクラウド請求書のサービスを作成する
*/
function getMFInvoiceService_() {
const serviceName = 'mfInvoice';
const authorizationBaseUrl = 'https://api.biz.moneyforward.com/authorize';
const tokenUrl = 'https://api.biz.moneyforward.com/token';
const properties = PropertiesService.getScriptProperties();
const clientId = properties.getProperty('CLIENT_ID');
const clientSecret = properties.getProperty('CLIENT_SECRET');
return OAuth2.createService(serviceName)
.setAuthorizationBaseUrl(authorizationBaseUrl)
.setTokenUrl(tokenUrl)
.setClientId(clientId)
.setClientSecret(clientSecret)
.setCallbackFunction('authCallback_')
.setPropertyStore(PropertiesService.getUserProperties())
}
/**
* OAuth認証の処理終了時に呼び出される関数、認証の成否をWebページとして表示する
*/
function authCallback_(request) {
const service = getMFInvoiceService_();
const isAuthorized = service.handleCallback(request);
if (isAuthorized) {
return HtmlService.createHtmlOutput('Success! You can close this tab.');
} else {
return HtmlService.createHtmlOutput('Denied. You can close this tab');
}
}
自分で試したこと・発生しているエラー
1:クラウド請求書のAPI連携で参考にさせて頂いているサイト(https://tonari-it.com/moneyforward-invoice-api-test/)
を元にOAuth認証用のGASコードを作成して実行しました。
2:OAuth認証URL(コードの★の所)でエラー
.getAuthorizationUrl()で取得したURLのままではどうしてもアクセス時にエラーになってログイン画面がでなかったので、.replace関数を使用してマネーフォワード公式のアクセスURLを元に認証URLを並び替えてみたら、ログイン画面がでたのでそのままアクセスしました(これをしないとどうにもアクセス出来ませんでした‥‥)
マネーフォワード公式チュートリアル:
https://developers.biz.moneyforward.com/docs/tutorial/step-1/
※GASのプロパティにはCLIENT_SECRETが入力されており、「const clientSecret = properties.getProperty('CLIENT_SECRET');」で問題なく取得出来ていることをログ出力で確認ずみです。
やはり、.getAuthorizationUrl()で取得したURLを書き換えてるからダメなのでしょうか?でも書き換えないとアクセス画面もでなくて…💦
どなたかご教授いただけますと助かります。。😭