Twilio Pay + Node.jsで一方的に支払いを要求する電話をかけてみる
Stripeコミュニティで「Twilio使えば電話でカード決済できるよ!」って話を聞いたので試してみました。が、以下の記事が親切すぎてセットアップ方法などはほぼこれみればOKです。 StripeとTwilio Payで電 […]
広告ここから
広告ここまで
目次
Stripeコミュニティで「Twilio使えば電話でカード決済できるよ!」って話を聞いたので試してみました。が、以下の記事が親切すぎてセットアップ方法などはほぼこれみればOKです。
これだけだとちょっと面白くない記事にならないので、「電話をかけて支払い」ではなく「支払わせる電話をかける」方向で触ってみます。
準備
下の記事のチュートリアルは完了させてください。セットアップ方法などはここが一番だと思います。
Node.jsの準備
いつも通りCLIから実行する準備をします。
$ mkdir twiliopay && cd twiliopay
$ npm init -y
$ npm i -S twilio querystring
$ touch index.js
電話をかけるスクリプト
Account SID
とauthToken
が必要ですので、ダッシュボードから取得しましょう。
//app.js
var querystring = require('querystring');
const twilio = require('twilio');
const accountSid ='ACCOUNT_SID';
const authToken = 'AUTH_TOKEN';
const client = twilio(accountSid, authToken);
// 喋らせる内容
const twiml = `<Response>
<Say language="ja-JP" voice="Polly.Takumi">ただいまより、クレジットカードで決済を行います。お支払い金額は990円です。</Say>
<Pay chargeAmount="990" currency="jpy" postalCode="false" action="https://">
<Prompt for="payment-card-number">
<Say language="ja-JP" voice="Polly.Mizuki">まずは、クレジットカード番号を入力してください。入力が終わりましたら、シャープを押して下さい。</Say>
</Prompt>
<Prompt for="expiration-date">
<Say language="ja-JP" voice="Polly.Mizuki">有効期限を、月と年のそれぞれ2桁の数字で入力してください。入力が終わりましたら、最後にシャープを押して下さい。</Say>
</Prompt>
<Prompt for="security-code">
<Say language="ja-JP" voice="Polly.Mizuki">セキュリティコードを入力してください。セキュリティコードは、カードの裏面に記載されている3桁のコードです。セキュリティコードの最後にシャープを押して下さい。</Say>
</Prompt>
</Pay>
<Say language="ja-JP" voice="Polly.Mizuki">990円の支払いが完了しました。ご利用ありがとうございました。</Say>
</Response>`;
// 電話をかける処理
client.calls.create({
to: '+81<YOUR_PHONE_NUMBER>', //コール先の番号
from: '+81<YOUR_TWILIO_NUMBER>', // 取得したtwilioの番号.
url: 'https://twimlets.com/echo?Twiml=' + querystring.escape(twiml)
}, function (err, responseData) {
if(err) throw err;
console.log(responseData.from);
});
これをCLIから実行すると、TO
に指定した番号に電話がかかります。そしてXMLに記述した内容が再生されますので、唐突に電話で990円のカード支払いを要求されることになります。
決済結果はStripeで
決済自体はStripeで実行されていますので、そちらで支払い状況などは確認できます。
使い所
知り合いへのいたずらぱっと思いつくのは、SaaSの料金決済でしょうか。
- 利用状況がプラン上限に迫っている or カード決済に失敗した場合
- Twilioからユーザーに架電して通知
- その電話でそのまま再決済
なんてことができないかなぁと思っています。Billingとの連携ができるのかどうか未検証ですが、スポットの料金追加で単発決済扱いにすればいけるでしょう(たぶん)