Twilio Pay + Node.jsで一方的に支払いを要求する電話をかけてみる

Stripeコミュニティで「Twilio使えば電話でカード決済できるよ!」って話を聞いたので試してみました。が、以下の記事が親切すぎてセットアップ方法などはほぼこれみればOKです。 StripeとTwilio Payで電 […]

広告ここから
広告ここまで

目次

    Stripeコミュニティで「Twilio使えば電話でカード決済できるよ!」って話を聞いたので試してみました。が、以下の記事が親切すぎてセットアップ方法などはほぼこれみればOKです。

    StripeとTwilio Payで電話決済

    これだけだとちょっと面白くない記事にならないので、「電話をかけて支払い」ではなく「支払わせる電話をかける」方向で触ってみます。

    準備

    下の記事のチュートリアルは完了させてください。セットアップ方法などはここが一番だと思います。

    StripeとTwilio Payで電話決済

    Node.jsの準備

    いつも通りCLIから実行する準備をします。

    $ mkdir twiliopay && cd twiliopay
    $ npm init -y
    $ npm i -S twilio querystring
    $ touch index.js

    電話をかけるスクリプト

    Account SIDauthTokenが必要ですので、ダッシュボードから取得しましょう。

    //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との連携ができるのかどうか未検証ですが、スポットの料金追加で単発決済扱いにすればいけるでしょう(たぶん)

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark