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.