# インボイス 外部支払いマーク

`PUT /v1/invoices/{id}/paid_externally`

- operationId: `paidExternallyInvoices`
- tags: インボイス機能

指定したIDを持つ発行済みのインボイス情報を、M's PayBridgeによる決済機能でない方法で支払われたとしてマークします。\
このインボイス情報のステータスは支払い完了（`PAID`）へ遷移し、M's PayBridge外支払フラグ（`is_paid_externally`）が`true` になります。


## コードサンプル

### cURL

```bash
curl \
    -X PUT \
    -H "Authorization:Bearer <Secret API Key>" \
    -H "Content-Type: application/json" \
    -d '{
      "transaction_date": "2024/01/01"
}' \
'https://api.test.fincode.jp/v1/invoices/{id}/paid_externally'
```

### Node.js

```javascript
import fetch from "node-fetch";

const BASE_URL = "https://api.test.fincode.jp";
const API_KEY = "<Secret API Key>";

(async () => {
    const invoiceId = "<Invoice ID>";  // 適切なInvoice IDに置き換えてください
    const endpoint = `${BASE_URL}/v1/invoices/${invoiceId}/paid_externally`;

    const response = await fetch(endpoint, {
        method: "PUT",
        headers: {
            Authorization: `Bearer ${API_KEY}`,
            "Content-Type": "application/json",
        },
        body: JSON.stringify({
            transaction_date: "2024/01/01",  // 日付を適切に設定
        }),
    });

    if (!response.ok) {
        console.error(`Error: ${response.statusText}`);
        return;
    }

    const data = await response.json();
    console.log(data);
})();
```

### Go

```go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"log"
	"net/http"
)

func main() {
	// APIキーとインボイスIDを指定
	apiKey := "<Secret API Key>"
	invoiceID := "<Invoice ID>" // インボイスIDを指定

	// リクエストボディの作成
	body := map[string]string{
		"transaction_date": "2024/01/01",
	}
	
	// JSONエンコード
	marshalledBody, err := json.Marshal(body)
	if err != nil {
		log.Fatalf("リクエストボディのエンコードエラー: %v", err)
	}

	// URLの設定
	url := fmt.Sprintf("https://api.test.fincode.jp/v1/invoices/%s/paid_externally", invoiceID)

	// HTTPリクエストの作成
	req, err := http.NewRequest("PUT", url, bytes.NewBuffer(marshalledBody))
	if err != nil {
		log.Fatalf("リクエストの作成エラー: %v", err)
	}

	// ヘッダーの設定
	req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", apiKey))
	req.Header.Set("Content-Type", "application/json")

	// クライアントの作成とリクエストの送信
	client := &http.Client{}
	res, err := client.Do(req)
	if err != nil {
		log.Fatalf("リクエストエラー: %v", err)
	}
	defer res.Body.Close()

	// レスポンスのステータスコードの表示
	fmt.Println("Status:", res.Status)
}
```

### PHP

```php
<?php

$apiKey = '<Secret API Key>';
$invoiceId = '<Invoice ID>';  // 適切なInvoice IDに置き換えてください
$baseUrl = "https://api.test.fincode.jp";
$endpoint = "/v1/invoices/{$invoiceId}/paid_externally";
$headers = [
    "Authorization: Bearer " . $apiKey,
    "Content-Type: application/json"
];

$data = json_encode([
    "transaction_date" => "2024/01/01",  // 日付を適切に設定
]);

$session = curl_init();
curl_setopt($session, CURLOPT_URL, $baseUrl . $endpoint);
curl_setopt($session, CURLOPT_HTTPHEADER, $headers);
curl_setopt($session, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($session, CURLOPT_POSTFIELDS, $data);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($session);

if ($response === false) {
    # エラー処理
    echo "cURL Error: " . curl_error($session);
} else {
    # APIからのデータを処理
    var_dump($response);
}

curl_close($session);
```

### Python 3

```python
import requests

api_key = '<Secret API Key>'
invoice_id = '<Invoice ID>'  # 適切なInvoice IDに置き換えてください

url = f'https://api.test.fincode.jp/v1/invoices/{invoice_id}/paid_externally'

# ヘッダーを設定
headers = {
    'Authorization': f'Bearer {api_key}',
    'Content-Type': 'application/json'
}

data = {
    "transaction_date": "2024/01/01",  # 日付を適切に設定
}

# HTTP PUTリクエストの送信
try:
    response = requests.put(url, headers=headers, json=data)

    # レスポンスの処理
    if response.status_code == 200:
        # 成功した場合の処理
        print(f"Success: {response.json()}")
    else:
        # エラーの処理
        print(f"Error: {response.json()}")
except requests.RequestException as e:
    # 通信エラーの処理
    print(f"Request error: {e}")
```

### Ruby

```ruby
require 'net/http'
require 'uri'
require 'json'

API_KEY = '<Secret API Key>'
BASE_URL = 'https://api.test.fincode.jp'

def main
  invoice_id = '<Invoice ID>'  # 適切なInvoice IDに置き換えてください
  endpoint = "/v1/invoices/#{invoice_id}/paid_externally"
  
  uri = URI.parse(BASE_URL + endpoint)

  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true

  data = {
    transaction_date: "2024/01/01"  # 日付を適切に設定
  }

  # リクエストの作成
  request = Net::HTTP::Put.new(uri.request_uri)
  request['Authorization'] = "Bearer #{API_KEY}"
  request['Content-Type'] = 'application/json'

  request.body = data.to_json

  # リクエストの送信
  response = http.request(request)

  case response
  when Net::HTTPSuccess
    puts 'SUCCESS'
  else
    puts 'ERROR'
  end

  # レスポンスの表示
  puts response.body
end

main
```

## パラメータ

| 名前 | 位置 | 必須 | 型 | 説明 |
| --- | --- | --- | --- | --- |
| `id` | path | ✓ | string | インボイスID |
| `Tenant-Shop-Id` | header |  | schema | <span class="smallText color--red-400">※ プラットフォームのメインショップのみ指定可</span> |

## リクエストボディ

Content-Type: `application/json`

| パラメータ | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| `transaction_date` | string |  | 支払い完了日 |

## レスポンス

### 200 リクエストに成功

| パラメータ | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| `id` | string |  | インボイスID |
| `status` | string |  | インボイス請求書のステータス |
| `invoice_url` | string |  | インボイス 請求ページURL |
| `bill_mail_send_flag` | enum(0 | 1) |  | 請求書メール送信フラグ (0: メールを送信しない 1: メールを送信する) |
| `bill_pdf_url` | string |  | [非推奨] インボイス請求書PDFダウンロードURL |
| `receipt_mail_send_flag` | enum(0 | 1) |  | 領収書メール送信フラグ (0: メールを送信しない 1: メールを送信する) |
| `underpayment_mail_send_flag` | enum(0 | 1) |  | 差額請求メール送信フラグ (0: メールを送信しない 1: メールを送信する) |
| `receipt_pdf_url` | string |  | [非推奨] インボイス領収書PDFダウンロードURL |
| `invoice_number` | string |  | 請求番号 |
| `customer_id` | string |  | 顧客（請求先）ID |
| `customer_honorific` | string |  | 顧客（請求先）敬称 |
| `customer` | object |  | 顧客（請求先）情報 |
| `customer_overwrite` | object |  | 上書き顧客（請求先）情報 |
| `issuer` | object |  | 発行元事業者情報 |
| `issuer_overwrite` | object |  | 上書き発行元事業者情報 |
| `issue_date` | string |  | 発行年月日 |
| `lines` | array<object> |  | 取引内容レコード |
| `total_amount` | number |  | 合計金額 |
| `billing_total_amount` | number |  | 請求金額合計 |
| `pay_types` | array<string> |  | 利用可能な決済種別リスト |
| `input_type` | enum(amount) |  | 取引金額の入力方式 |
| `card` | object |  | カード決済情報 |
| `virtual_account` | object |  | 銀行振込（バーチャル口座）情報 |
| `embedded_virtual_account` | object |  | このインボイス情報に対して発行されたバーチャル口座情報 |
| `is_tax_included` | boolean |  | 内税表記有無 |
| `due_date` | string |  | 支払期日 |
| `memo` | string |  | 備考 |
| `client_field_1` | string |  | 加盟店自由項目1 |
| `client_field_2` | string |  | 加盟店自由項目2 |
| `client_field_3` | string |  | 加盟店自由項目3 |
| `is_uncollectible` | boolean |  | 回収困難フラグ |
| `is_paid_externally` | boolean |  | M's PayBridge外支払フラグ |
| `transaction_date` | string |  | 支払完了日 |
| `bill_id` | string |  | 請求ID |
| `directdebit` | object |  | 口座振替情報 |
| `payee_account` | object |  | 銀行振込（指定口座）情報 |
| `embedded_directdebit` | object |  | このインボイス情報に対する口座振替の口座情報 この口座から引き落とし完了することでインボイスによる請求に対して支払いできます。 |
| `embedded_payee_accounts` | array<object> |  | このインボイス情報に対する銀行振込（指定口座）口座情報 この口座情報に対して振込を行うことでインボイスによる請求に対して支払いできます。 |
| `billing_file_import_entry_id` | string |  | 請求インポートファイル読み込みエントリーID |
| `trade_client_field_1` | string |  | 決済情報自由項目 1 |
| `trade_client_field_2` | string |  | 決済情報自由項目 2 |
| `trade_client_field_3` | string |  | 決済情報自由項目 3 |
| `invoice_backfill` | object |  | 後付け請求情報 |
| `created` | string |  | 作成日時 |
| `updated` | string |  | 更新日時 |

### 400 不正なリクエスト

| パラメータ | 型 | 必須 | 説明 |
| --- | --- | --- | --- |
| `errors` | array<FincodeAPIError> |  |  |

