[nodejs][stripe] stripe を node で使う(単発の支払い)

customer が登録されている前提で invoice を作ってみましょう。
customer の登録方法は下記 URL で説明してますので、そちらも合わせて読んでくださいまし。
[stripe を node で使う(customer 情報の登録)](http://qiita.com/wokamoto/items/0be8471d38044ada9209)

# 参考URL

- [API Reference](https://stripe.com/docs/api/node#intro)
- [Working with Invoices](https://stripe.com/docs/subscriptions/invoices)

# 使い方
流れとしては

+ ```invoiceItems.create()``` で invoice の明細行を作って
+ ```invoices.create()``` で invoice の明細行をまとめて一つの invoice にして
+ ```invoices.pay()``` で実際に請求を行う

感じになります。

## invoice 明細行の作成
要はカートの中に突っ込まれた個々の商品っすね。
注意点としては currency が usd の時は amount は $1 = 100 となることっすね。```{amount: 1, currency: 'usd'}``` は $1 ではなく ¢1 です。
jpy の時は気にしないでいいです。

```js:create-invoice-items.js
var stripe = require('stripe')('STRIPE_API_KEY_HERE');
var params = {
    customer: 'cus_xxxxxxxxxxxxxx',
    amount: 1500,
    currency: 'jpy',
    description: "One-time setup fee"
};

stripe.invoiceItems.create(parms, function(err,invoiceItem){
    cosole.log(invoiceItem);
});
```

```json:example-response
{
  "id": "ii_xxxxxxxxxxxxxxxxxxxxxxxx",
  "object": "invoiceitem",
  "amount": 1500,
  "currency": "jpy",
  "customer": "cus_xxxxxxxxxxxxxx",
  "date": 1489721334,
  "description": "One-time setup fee",
  "discountable": false,
  "invoice": null,
  "livemode": false,
  "metadata": {
  },
  "quantity": 1
}
```

これを明細分だけ、ひたすら追加していけばいいわけです。

## invoice の作成
明細行を全部追加し終わったら、```invoices.create()``` で明細行をまとめて invoice 作成します。
消費税とか請求するときも、ここで指定します。

```js:create-invoice.js
var stripe = require('stripe')('STRIPE_API_KEY_HERE');
var params = {
    customer: 'cus_xxxxxxxxxxxxxx',
    tax_percent: 8.0
};

stripe.invoices.create(parms, function(err,invoice){
    cosole.log(invoice);
});
```

```json:example-response
{
  "id": "in_xxxxxxxxxxxxxxxxxxxxxxxx",
  "object": "invoice",
  "amount_due": 1609,
  "application_fee": null,
  "attempt_count": 1,
  "attempted": true,
  "closed": true,
  "currency": "jpy",
  "customer": "cus_xxxxxxxxxxxxxx",
  "date": 1489749157,
  "description": null,
  "ending_balance": 0,
  "forgiven": false,
  "lines": {
    "data": [
      {
        "id": "ii_xxxxxxxxxxxxxxxxxxxxxxxx",
        "object": "line_item",
        "amount": 1500,
        "currency": "jpy",
        "description": "One-time setup fee",
        "discountable": false,
        "livemode": false,
        "metadata": {
        },
        "quantity": 1,
        "type": "invoiceitem"
      }
    ],
    "total_count": 1,
    "object": "list",
    "url": "/v1/invoices/in_xxxxxxxxxxxxxxxxxxxxxxxx/lines"
  },
  "livemode": false,
  "metadata": {
  },
  "receipt_number": null,
  "starting_balance": 0,
  "statement_descriptor": null,
  "subtotal": 1500,
  "tax": 119,
  "tax_percent": 8.0,
  "total": 1609
}
```

response の invoice.id (in_xxxxxxxxxxxxxxxxxxxxxxxx)は覚えておきましょう。実際に請求するときに使います。

## 実際の請求
作成した invoice を請求するには ```invoices.pay()``` を使います。

```js:pay-invoice.js
var stripe = require('stripe')('STRIPE_API_KEY_HERE');
var invoice_id = "in_xxxxxxxxxxxxxxxxxxxxxxxx";

stripe.invoices.pay(invoice_id, function(err,invoice){
    cosole.log(invoice);
});
```

invoice 生成して即時請求するなら、これでもいいっすね。

```js
var stripe = require('stripe')('STRIPE_API_KEY_HERE');
var params = {
    customer: 'cus_xxxxxxxxxxxxxx',
    tax_percent: 8.0
};

stripe.invoices.create(parms, function(err,invoice){
    if (!err) {
        stripe.invoices.pay(invoice.id, function(err,invoice){
            cosole.log(invoice);
        });
    }
});
```