GMO サイン: 封筒用文書登録

GMO サイン: 封筒用文書登録

GMO Sign: Regist Envelope Document

この工程は GMO サイン に署名依頼向けの封筒用文書(PDFファイル)を登録します。

Auto Step icon
Configs for this Auto Step
conf_OAuth2
C1: シークレットキー *
cusId
C2: 顧客ID *#{EL}
accessUrl
C3: アクセス先URL(例 api.gmosign.com) *#{EL}
registFile
C4: 登録するファイル(ドキュメント)が保存されているファイル型データ項目 *
documentCode
C5: ドキュメントコード を保存する文字型データ項目 *
Script (click to open)


//ファイルサイズ制限50MB
//https://helpcenter.gmosign.com/hc/ja/articles/900005461666
const SIZE_LIMIT = 52428800; //File size border of Box

/*
JSON例

・アクセストークン生成 AccessToken_Generate_Post
{
  "secret_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "cus_id": "XXXXXXXXXX"
}


・封筒用文書登録 Envelope_Document_Regist_Post
※アップできるのはPDFのみ
{
  "secret_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "cus_id": "XXXXXXXXXX",
  "access_token": "(取得したトークン)",
  "document": "(Base64変換したファイル)"
}
*/


main();

function main() {

    //// == 工程コンフィグの参照 / Config Retrieving ==
    //シークレットキーはHTTP認証設定のトークン直接指定に入れてもらう
    const key = configs.getObject("conf_OAuth2").getToken() + "";
    const cusId = configs.get("cusId") + "";
    const accessUrl = configs.get("accessUrl") + "";

    const dataId_documentCode = configs.get("documentCode");

    //// == ワークフローデータの参照 / Data Retrieving ==
    const files = engine.findData(configs.getObject("registFile"));


    //// == 演算 / Calculating ==

    //アクセストークン取得
    let accessToken = getAccessToken(key, cusId, accessUrl);

    //文書ファイル登録
    let documentCode = registFile(key, cusId, accessUrl, accessToken, files);


    //// == ワークフローデータへの代入 / Data Updating ==
    engine.setDataByNumber( dataId_documentCode, documentCode );


/* アクセスログがあれば
    if ( dataId_log !== "" ) {
        engine.setDataByNumber( dataId_log, accessLog );
    }
*/

}


/**
  * アクセストークン取得
  * @param {String} key  シークレットキー
  * @param {String} cusId  顧客ID
  * @param {String} accessUrl  接続先URL
  * @returns {String} アクセストークン
  */
function getAccessToken(key, cusId, accessUrl) {

    //JSON準備
    let requestObj = {};
    requestObj.secret_key = key;
    requestObj.cus_id = cusId;


    //HTTPリクエスト送付
    const url = "https://" + accessUrl + "/agree-api/v0/api/accesstoken/generate";
    const response = httpClient.begin()
        .body( JSON.stringify(requestObj), "application/json" )
        .post(url);
    const status = response.getStatusCode();
    const responseStr = response.getResponseAsString();
    if (status !== 200) {
        engine.log(responseStr);
        throw `Failed to get access token. status: ${status}`;
    }

    engine.log("responseStr:" + responseStr);//検証用
    const json = JSON.parse(responseStr);
    if ( json['status'] !== "0") {
        throw `Failed to get acess token. status: ${json['status']}. message: ${json['message']}`;
    }
    return json['result']['access_token'];
}


/**
  * 文書ファイル登録
  * @param {String} key  シークレットキー
  * @param {String} cusId  顧客ID
  * @param {String} accessUrl  接続先URL
  * @param {String} accessToken  アクセストークン
  * @param {object} files  ファイル
  * @returns {String} ドキュメントコード
  */
function registFile(key, cusId, accessUrl, accessToken, files) {

    //JSON準備
    let requestObj = {};
    requestObj.secret_key = key;
    requestObj.cus_id = cusId;
    requestObj.access_token = accessToken;

    //1ファイルのみかチェック
    if (( !files ) || ( files.length != 1 )) {
        throw `PDF File Num invalid.`;
    }
    const file = files.get(0);

    //ファイルサイズチェック
    if ( file.getLength() > SIZE_LIMIT ) {
        throw `PDF File size over.`;
    }

    //ファイルBase64変換
    let base64Text = "";
    fileRepository.readFile(file, SIZE_LIMIT, function(bytes) {
        base64Text += base64.encodeToString(bytes);
    });

    engine.log("requestObj:" + JSON.stringify(requestObj));//検証用、ファイルデータをいれる前をログ出力(ファイルデータが入ると長くなりすぎるので)
    requestObj.document = base64Text;


    //HTTPリクエスト送付
    const url = "https://" + accessUrl + "/agree-api/v0/api/envelope/document/regist";
    const response = httpClient.begin()
        .body( JSON.stringify(requestObj), "application/json" )
        .post(url);
    const status = response.getStatusCode();
    const responseStr = response.getResponseAsString();
    if (status !== 200) {
        engine.log(responseStr);
        throw `Failed to regist file. status: ${status}`;
    }

    engine.log("responseStr:" + responseStr);//検証用
    const json = JSON.parse(responseStr);
    if ( json['status'] !== "0") {
        throw `Failed to regist file. status: ${json['status']}. message: ${json['message']}`;
    }
    return json['result']['document_code'];
}

  
    

Download

warning 自由改変可能な JavaScript (ECMAScript) コードです。いかなる保証もありません。
(アドオン自動工程のインストールは Professional editionでのみ可能です)

Notes

Capture

See Also

上部へスクロール

Questetra Supportをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む