WebPay APIでカード決済機能をWindowsストアアプリに実装するには2カ月で160本作った還暦開発者が送る10のアプリ開発ノウハウ(特別編)(4/4 ページ)

» 2013年12月17日 18時00分 公開
[薬師寺国安,PROJECT KySS]
前のページへ 1|2|3|4       

JSONデータ内に表示される各プロパティを宣言するCustomers.vb

 JSONデータ内に表示される各プロパティを宣言するCustomers.vbクラスを作成する。ここで定義したプロパティはJSONデータのルート要素の直下に表示される。

Imports Newtonsoft.Json
Namespace WebPayApplication.WebPay
    Class Customers
‘ JsonProperty属性で項目名を指定し、プロパティを定義する。
        <JsonProperty("id")> _
        Public Property Id() As String
            Get
                Return m_Id
            End Get
            Set(value As String)
                m_Id = value
            End Set
        End Property
        Private m_Id As String
        Public Shared Async Function Create(cardRequest As CardRequest) As Task(Of Customers)
            Dim conn = New Connection()
            Dim response = Await conn.DoRequest("/customers", "POST", cardRequest.JsonString())
            Return JsonConvert.DeserializeObject(Of Customers)(response)
        End Function
    End Class
End Namespace
リスト4 Customers.vb

 プロパティのコードは省略する。詳細はサンプルコード内を参照してほしい。

 WebPay APIに接続してリクエストを送信する関数「Create」について解説しておこう。この関数は非同期処理で行われるため、メソッドの先頭にAsyncを追加している。

 この関数では、新しいConnectionクラスのインスタンスconnオブジェクトを作成し、Connectionクラス内のDoRequest関数にpathとmethod、dataを指定して、その結果を文字列型変数responseで取得している。

 JsonConvert.DeserializeObjectは、取得したJson文字列をオブジェクトにデシリアライズして元のデータに復元し、戻り値とする。ここではpathに「/customers」と指定している。こう指定することで、入力したデータがWebPayの「顧客の一覧」に登録される。

 Pathに「/tokens」と指定すると、JSONデータが表示される中にトークンのデータが表示される。ただし、この場合はWebPayの「顧客の一覧」内にはデータは追加されないので注意してほしい。

例外が発生したときのWebPayException.vb

Namespace WebPayApplication.WebPay
    Class WebPayException
        Inherits Exception
‘ HTTPで定義されたステータスコードの値を格納する、パブリック変数statusCodeを宣言する。
        Public statusCode As System.Net.HttpStatusCode
        Friend Sub New(statusCode As System.Net.HttpStatusCode, message As String)
            MyBase.New(message)
            Me.statusCode = statusCode
        End Sub
    End Class
End Namespace
リスト5 WebPayException.vb

 初期処理では、例外が発生した場合に、ステータスコードとメッセージを表示している。

モジュールの作成

 VS2013の[プロジェクト(P)]→[モジュールの追加(M)]と選択して表示される画面から[モジュール]を選択する。[名前(N)]は「Module1.vb」としておく。[追加(A)]ボタンをタップすると、エディター画面が表示されるので、Module.vbのコードを記述する。

Module Module1
    Public JsonData As String
End Module
リスト6 Module.vb

 ここでは、文字列型パブリック変数JsonDataを宣言している。

 モジュールで宣言した変数は、どのプロジェクトからでも参照が可能だ。モジュール変数の多用はコードの可読性が悪くなり、バグの温床ともなるので、あまり勧められないが、今回のように1つの変数の宣言に使用する場合は、全く問題ない。このJsonDataモジュール変数にJSONデータが格納され、画面に表示される。

メイン画面ロジックコードを記述する(MainWindow.xaml.vb)

 次に、[ソリューション・エクスプローラー]内の「MainWindow.xaml」を展開して表示される、「MainWindow.xaml.vb」をダブルクリックしてリスト7のコードを記述する。

‘ 各クラスを定義したWebPayApplication.WebPayApplication名前空間をインポートしておく。
Imports WebPayApplication.WebPayApplication
Public NotInheritable Class MainPage
    Inherits Page
    Public Sub New()
        Me.InitializeComponent()
    End Sub
    Private Async Sub GetJsonDataButton_Click(sender As Object, e As RoutedEventArgs) Handles GetJsonDataButton.Click
        Dim card As New WebPay.CardRequest()
        card.Number = numberInput.Text
        card.Name = nameInput.Text
        card.ExpMonth = expMonthInput.Text
        card.ExpYear = expYearInput.Text
        card.Cvc = cvcInput.Text
        Await WebPay.Customers.Create(card)
        resultOutput.Text = JsonData '"作成されたトークン: " & Convert.ToString(token.Id)
    End Sub
End Class
リスト7 MainWindow.xaml.vb

 [JSONデータの取得]ボタンがタップされたときの処理「GetJsonDataButton_Click」は、非同期処理で行われるため、メソッドの先頭にAsyncを追加している。

 ここでは、新しいWebPay.CardRequestのインスタンスcardオブジェクトを作成し、「Number」「Name」「ExMonth」「ExYear」「Cvc」プロパティに、入力ボックスから入力された値を指定している。

 Customersクラス内のCreate関数では、値を指定されたcardオブジェクト顧客のデータを作成する。WebPayの「顧客の一覧」に入力した顧客データが登録される。

 resultOutputという名前のTextBlockに、モジュール変数JSONデータの値を表示する。

curlやRubyやPHPやJava、Pythonでも

 以上でWebPay APIをWindowsストアアプリに組み込む方法の解説は終わりだ。WebPayのパスに/chargesを使用すると、「課金の履歴」にユーザーの課金の状態を登録することもできるが、今回はそこまで手が回らなかった。

 WebPay APIは大変に便利だが、Windowsストアアプリに組み込む方法は、Web上にほとんど情報がないのが残念だ。通常はcurlやRubyやPHPやJava、Pythonで使用するものらしい。これらの言語に関してなら、WebPay APIのページを参考にするだけで、容易に「クレジット決済カードサービス」のページを作成できるのではないだろうか。

著者プロフィール

PROJECT KySS 薬師寺 国安(やくしじ くにやす)

1950年生まれ。フリーVBプログラマ。高級婦人服メーカーの事務職に在職中、趣味でVBやActiveXに取り組み、記事を執筆。2003年よりフリー。.NETやRIAに関する執筆多数。Windowsストアアプリも多数公開中(約270本)。

 

Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。

Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。

Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。

PROJECT KySSは、1997年に薬師寺聖と結成したコラボレーション・ユニット


前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。