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
プロパティのコードは省略する。詳細はサンプルコード内を参照してほしい。
WebPay APIに接続してリクエストを送信する関数「Create」について解説しておこう。この関数は非同期処理で行われるため、メソッドの先頭にAsyncを追加している。
この関数では、新しいConnectionクラスのインスタンスconnオブジェクトを作成し、Connectionクラス内のDoRequest関数にpathとmethod、dataを指定して、その結果を文字列型変数responseで取得している。
JsonConvert.DeserializeObjectは、取得したJson文字列をオブジェクトにデシリアライズして元のデータに復元し、戻り値とする。ここではpathに「/customers」と指定している。こう指定することで、入力したデータがWebPayの「顧客の一覧」に登録される。
Pathに「/tokens」と指定すると、JSONデータが表示される中にトークンのデータが表示される。ただし、この場合はWebPayの「顧客の一覧」内にはデータは追加されないので注意してほしい。
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
初期処理では、例外が発生した場合に、ステータスコードとメッセージを表示している。
VS2013の[プロジェクト(P)]→[モジュールの追加(M)]と選択して表示される画面から[モジュール]を選択する。[名前(N)]は「Module1.vb」としておく。[追加(A)]ボタンをタップすると、エディター画面が表示されるので、Module.vbのコードを記述する。
Module Module1
    Public JsonData As String
End Module
ここでは、文字列型パブリック変数JsonDataを宣言している。
モジュールで宣言した変数は、どのプロジェクトからでも参照が可能だ。モジュール変数の多用はコードの可読性が悪くなり、バグの温床ともなるので、あまり勧められないが、今回のように1つの変数の宣言に使用する場合は、全く問題ない。このJsonDataモジュール変数にJSONデータが格納され、画面に表示される。
次に、[ソリューション・エクスプローラー]内の「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
[JSONデータの取得]ボタンがタップされたときの処理「GetJsonDataButton_Click」は、非同期処理で行われるため、メソッドの先頭にAsyncを追加している。
ここでは、新しいWebPay.CardRequestのインスタンスcardオブジェクトを作成し、「Number」「Name」「ExMonth」「ExYear」「Cvc」プロパティに、入力ボックスから入力された値を指定している。
Customersクラス内のCreate関数では、値を指定されたcardオブジェクト顧客のデータを作成する。WebPayの「顧客の一覧」に入力した顧客データが登録される。
resultOutputという名前のTextBlockに、モジュール変数JSONデータの値を表示する。
以上で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年に薬師寺聖と結成したコラボレーション・ユニット
2カ月で160本作った還暦開発者が送る10のアプリ開発ノウハウ(1):カメラでクラウディア(Webカメラと画像を合成保存)
今でしょ! の終わりに安齋、家入らが評価したアプリとは〜「エイっと作ろう! Windowsストア アプリ選手権」授賞式レポート
初のアジャイル/リモート開発体制でも成功できた秘訣とは〜「Windowsタブレット向けアプリ開発」先駆けインタビュー
PC制御UIの最先端Leapアプリ開発入門(3):ProcessingやWindows 8.1アプリでLeapの空間ジェスチャを使うには
連載:Windowsストア・アプリ開発入門:第1回 Windowsストア・アプリってどんなもの?
特集:次期Windows 8.1&Visual Studio 2013 Preview概説(前編):大きく変わるWindowsストア・アプリ開発 〜 ビュー状態に関連する変更点
UXClip(11):これからが本番、Windows 8アプリ開発
Windows 8提供開始、対応アプリ登場は期待できるか?Copyright © ITmedia, Inc. All Rights Reserved.