PayPal 請求書 生成 (JPY)

PayPal 請求書 生成 (JPY)

設定項目の情報から Paypal 請求書が自動生成し、Paypal Invoice ID を文字列型データ項目に格納します

2018 © Questetra, Inc. (MIT License)
https://support.questetra.com/ja/addons/paypal-createjpy/

Configs
  • A: PayPal-REST-API の Client ID と SECRET を2行に分けてセットしてください *
  • B: 通信ログが格納される文字列型データを選択してください (更新)
  • C: 販売人の商号/国コード(“JP”)/郵便番号/都道府県/市区町村を5行に分けてセットしてください *
  • D: 販売人の住所を2行に分けてセットしてください *
  • E: 販売人の国際電話国番号(“81”)/電話番号/メールアドレス/URLを4行に分けてセットしてください *
  • F: 請求先の商号が格納されている文字列型データを選択してください *
  • G: 請求先の名前1(姓・部署)が格納されている文字列型データを選択してください *
  • H: 請求先の名前2(名・氏名)が格納されている文字列型データを選択してください *
  • I: 請求先のメールアドレスが格納されている文字列型データを選択してください *
  • J: 商品名が格納されている文字列型データを選択してください *
  • K: 商品説明が格納されている文字列型データを選択してください *
  • L: 商品数量が格納されている数値型データを選択してください *
  • M: 商品単価が格納されている数値型データを選択してください *
  • N: 税率をセットしてください (例: “8” “10”) *
  • O: 請求書IDが格納されている文字列型データを選択してください *
  • P: 支払期日が格納されている日付型データを選択してください *
  • Q: 請求書の備考文が格納されている文字列型データを選択してください *
  • R: 請求書の契約条件文が格納されている文字列型データを選択してください *
  • S: ロゴ画像のURLをセットしてください (例: “https://example.com/a.png”) *
  • T: Paypal Invoce ID が格納される文字列型データを選択してください (更新) *
Script
//// == 工程コンフィグの参照 / Config Retrieving ==
var clientId_secret = configs.get( "conf_ClientId_Secret" ) + "";
var array_clientId_secret = clientId_secret.split("\n");
var clientId = array_clientId_secret[0];
var secret   = array_clientId_secret[1];

var merchantPostalCode   = configs.get( "conf_MerchantPostalCode" ) + "";
var array_merchantPostalCode = merchantPostalCode.split("\n");
var merchantBusinessName = array_merchantPostalCode[0];
var merchantAddressCC    = array_merchantPostalCode[1];
var merchantAddressPC    = array_merchantPostalCode[2];
var merchantAddressState = array_merchantPostalCode[3];
var merchantAddressCity  = array_merchantPostalCode[4];

var merchantAddress      = configs.get( "conf_MerchantAddress" ) + "";
var array_merchantAddress = merchantAddress.split("\n");
var merchantAddress1     = array_merchantAddress[0];
var merchantAddress2     = array_merchantAddress[1];

var merchantPhoneEmail   = configs.get( "conf_MerchantPhoneEmail" ) + "";
var array_merchantPhoneEmail  = merchantPhoneEmail.split("\n");
var merchantPhoneCC      = array_merchantPhoneEmail[0];
var merchantPhoneNum     = array_merchantPhoneEmail[1];
var merchantEmail        = array_merchantPhoneEmail[2];
var merchantWebsite      = array_merchantPhoneEmail[3];

var billingLanguage      = "ja_JP"; /// HARD-CODED
var itemUnitPriceCurrency = "JPY"; /// HARD-CODED
var itemTaxName          = "TAX"; /// HARD-CODED
var itemTaxPercent       = configs.get( "conf_ItemTax" ) - 0;
var logoUrl              = configs.get( "conf_logoUrl" ) + "";

var dataIdB = configs.get( "conf_DataIdB" ) + "";
var dataIdF = configs.get( "conf_DataIdF" ) + "";
var dataIdG = configs.get( "conf_DataIdG" ) + "";
var dataIdH = configs.get( "conf_DataIdH" ) + "";
var dataIdI = configs.get( "conf_DataIdI" ) + "";
var dataIdJ = configs.get( "conf_DataIdJ" ) + "";
var dataIdK = configs.get( "conf_DataIdK" ) + "";
var dataIdL = configs.get( "conf_DataIdL" ) + "";
var dataIdM = configs.get( "conf_DataIdM" ) + "";

var dataIdO = configs.get( "conf_DataIdO" ) + "";
var dataIdP = configs.get( "conf_DataIdP" ) + "";
var dataIdQ = configs.get( "conf_DataIdQ" ) + "";
var dataIdR = configs.get( "conf_DataIdR" ) + "";
var dataIdT = configs.get( "conf_DataIdT" ) + "";


//// == ワークフローデータの参照 / Data Retrieving ==
var billingBusinessName  = engine.findDataByNumber( dataIdF ) + ""; // Max 100
var billingName1         = engine.findDataByNumber( dataIdG ) + ""; // Max 30
var billingName2         = engine.findDataByNumber( dataIdH ) + ""; // Max 30
var billingEmail         = engine.findDataByNumber( dataIdI ) + ""; // Max 260
var itemName             = engine.findDataByNumber( dataIdJ ) + ""; // Max 200
var itemDescription      = engine.findDataByNumber( dataIdK ) + ""; // Max 1000
var itemQuantity         = engine.findDataByNumber( dataIdL ) - 0;
var itemUnitPriceNum     = engine.findDataByNumber( dataIdM ) - 0;
var itemUnitPrice        = Math.floor( itemUnitPriceNum ) + ""; // STRING!! without Comma
// Currency JPY does not support decimals. If you pass a decimal amount, an error occurs.

var invoiceNumber        = engine.findDataByNumber( dataIdO ) + ""; // Max 25
var paymentTermDueDate   = engine.findDataByNumber( dataIdP ) + " PST";
var invoiceNote          = engine.findDataByNumber( dataIdQ ) + ""; // Max 4000
var invoiceTerms         = engine.findDataByNumber( dataIdR ) + ""; // Max 4000

var merchantMemo = "BPMS Process ID: " + processInstance.getProcessInstanceId();


//// == 演算 / Calculating ==
var accessLog = "";

// Get OAuth Token with Client Credentials
var uri = "https://api.paypal.com/v1/oauth2/token";
var response = httpClient.begin()
  .basic( clientId, secret )
  .formParam( "grant_type", "client_credentials" )
  .post( uri );
var httpStatus = response.getStatusCode() + "";
accessLog = "---POST request--- " + httpStatus + "\n";
accessLog += response.getResponseAsString() + "\n";
// Error Handling
if( httpStatus !== "200" ){
  throw new Error( accessLog );
}

var oauthTokenObj = JSON.parse( response.getResponseAsString() );
var oauthToken = oauthTokenObj.access_token;

// Create invoice
var invoiceObj = {};
  invoiceObj.number = invoiceNumber;
  invoiceObj.payment_term = {};
  invoiceObj.payment_term.due_date = paymentTermDueDate;
  invoiceObj.note = invoiceNote;
  invoiceObj.terms = invoiceTerms;
  invoiceObj.logo_url = logoUrl;
  invoiceObj.merchant_memo = merchantMemo;
  invoiceObj.merchant_info = {};
    invoiceObj.merchant_info.email = merchantEmail;
    invoiceObj.merchant_info.business_name = merchantBusinessName;
    invoiceObj.merchant_info.address = {};
      invoiceObj.merchant_info.address.line1 = merchantAddress1;
      invoiceObj.merchant_info.address.line2 = merchantAddress2;
      invoiceObj.merchant_info.address.city = merchantAddressCity;
      invoiceObj.merchant_info.address.state = merchantAddressState;
      invoiceObj.merchant_info.address.postal_code = merchantAddressPC;
      invoiceObj.merchant_info.address.country_code = merchantAddressCC;
      invoiceObj.merchant_info.address.phone = {};
        invoiceObj.merchant_info.address.phone.country_code = merchantPhoneCC;
        invoiceObj.merchant_info.address.phone.national_number = merchantPhoneNum;
    invoiceObj.merchant_info.website = merchantWebsite;
  invoiceObj.billing_info = [];
    invoiceObj.billing_info[0] = {};
      invoiceObj.billing_info[0].email = billingEmail;
      invoiceObj.billing_info[0].first_name = billingName1;
      invoiceObj.billing_info[0].last_name = billingName2;
      invoiceObj.billing_info[0].business_name = billingBusinessName;
      invoiceObj.billing_info[0].language = billingLanguage;
  invoiceObj.items = [];
    invoiceObj.items[0] = {};
      invoiceObj.items[0].name = itemName;
      invoiceObj.items[0].description =itemDescription;
      invoiceObj.items[0].quantity = itemQuantity;
      invoiceObj.items[0].unit_price = {};
        invoiceObj.items[0].unit_price.currency = itemUnitPriceCurrency;
        invoiceObj.items[0].unit_price.value = itemUnitPrice;
      if( itemTaxPercent !== 0 ){
      invoiceObj.items[0].tax = {};
        invoiceObj.items[0].tax.name = itemTaxName;
        invoiceObj.items[0].tax.percent = itemTaxPercent;
      }
var uriCreate = "https://api.paypal.com/v1/invoicing/invoices/";
var responseCreate = httpClient.begin()
  .bearer( oauthToken )
  .body( JSON.stringify( invoiceObj ), "application/json" )
  .post( uriCreate );

var httpStatusCreate = responseCreate.getStatusCode() + "";
accessLog = "---POST request--- " + httpStatusCreate + "\n";
accessLog += responseCreate.getResponseAsString() + "\n";
// Error Handling
if( httpStatusCreate !== "201" ){
  throw new Error( accessLog );
}

var paypalIdObj = JSON.parse( responseCreate.getResponseAsString() );
var paypalId    = paypalIdObj.id;


//// == ワークフローデータへの代入 / Data Updating ==
engine.setDataByNumber( dataIdT, paypalId );
if ( dataIdB !== "" ){ engine.setDataByNumber( dataIdB, accessLog ); }

Download

  • Paypal-createJpy.xml
    • スクリプトエンジンとして「Rhino(廃止予定)」が指定されているため、アプリにインストールしても設定エラーとなります
    • 利用するには、スクリプトエンジンの変更、およびそれに伴うスクリプト修正が必要です
    • 修正版は準備中です

Capture

Notes

  • 事前に Paypal Dashboard にて App を生成し、Client ID/Secret を取得しておく必要があります

See also

上部へスクロール

Questetra Supportをもっと見る

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

続きを読む