PayPal 請求書 生成

設定項目の情報から Paypal 請求書が自動生成し、Paypal Invoice ID を文字列型データ項目に格納します
PayPal 請求書 生成 (JPY)
paypal-create-20180129jpy-addonxml.txt
(md5:cb45917bd24dd437347bd10efdc0acf1)

    • C’: Cで入力した販売人の商号/国コード/郵便番号/都道府県/市区町村
    • D’: Dで入力した販売人の住所
    • E’: Eで入力した販売人の国番号/電話番号/メールアドレス/URL
    • F’: Fで選択したデータ項目に格納されている請求先の商号
    • G’: Gで選択したデータ項目に格納されている請求先の部署名
    • H’: Hで選択したデータ項目に格納されている請求先の担当者名
    • I’: Iで選択したデータ項目に格納されている請求先のメールアドレス
    • J’: Jで選択したデータ項目に格納されている納品物の商品名
    • K’: Kで選択したデータ項目に格納されている納品物の詳細説明
    • L’: Lで選択したデータ項目に格納されている納品物の数量
    • M’: Mで選択したデータ項目に格納されている納品物の単価
    • N’: Nで入力した税率
    • O’: Oで選択したデータ項目に格納されている請求書ID
    • P’: Pで選択したデータ項目に格納されている支払期日
    • Q’: Qで選択したデータ項目に格納されている請求書の備考文
    • R’: Rで選択したデータ項目に格納されている契約条件文
    • S’: Sで入力したロゴ画像のURL
    • プロパティ C’-S’ の情報から Paypal 請求書が自動生成されます
    • Paypal Invoice ID が T で選択したデータ項目に格納されます
    • 通信ログが B で選択したデータ項目に格納されます
    • 事前に Paypal Dashboard にて App を生成し、Client ID/Secret を取得しておく必要があります

    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 が格納される文字列型データを選択してください (更新)データ項目選択文字列型(単一行)必須
    -設定変数名設定ラベル
    Aconf_ClientId_SecretPayPal-REST-API の Client ID と SECRET を2行に分けてセットしてください
    Bconf_DataIdB通信ログが格納される文字列型データを選択してください (更新)
    Cconf_MerchantPostalCode販売人の商号/国コード("JP")/郵便番号/都道府県/市区町村を5行に分けてセットしてください
    Dconf_MerchantAddress販売人の住所を2行に分けてセットしてください
    Econf_MerchantPhoneEmail販売人の国際電話国番号("81")/電話番号/メールアドレス/URLを4行に分けてセットしてください
    Fconf_DataIdF請求先の商号が格納されている文字列型データを選択してください
    Gconf_DataIdG請求先の名前1(姓・部署)が格納されている文字列型データを選択してください
    Hconf_DataIdH請求先の名前2(名・氏名)が格納されている文字列型データを選択してください
    Iconf_DataIdI請求先のメールアドレスが格納されている文字列型データを選択してください
    Jconf_DataIdJ商品名が格納されている文字列型データを選択してください
    Kconf_DataIdK商品説明が格納されている文字列型データを選択してください
    Lconf_DataIdL商品数量が格納されている数値型データを選択してください
    Mconf_DataIdM商品単価が格納されている数値型データを選択してください
    Nconf_ItemTax税率をセットしてください (例: "8" "10")
    Oconf_DataIdO請求書IDが格納されている文字列型データを選択してください
    Pconf_DataIdP支払期日が格納されている日付型データを選択してください
    Qconf_DataIdQ請求書の備考文が格納されている文字列型データを選択してください
    Rconf_DataIdR請求書の契約条件文が格納されている文字列型データを選択してください
    Sconf_logoUrlロゴ画像のURLをセットしてください (例: "https://example.com/a.png")
    Tconf_DataIdTPaypal Invoce ID が格納される文字列型データを選択してください (更新)
    // PayPal Invoicing Create (JPY/ja_JP) (ver. 20180129)
    // (c) 2018, Questetra, Inc. (the MIT License)
    
    //// == 工程コンフィグの参照 / 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 ); }