EXE別解説
GetWebData.exe
ShopServeから注文情報を取得し、DBへ取り込みます。
詳細を開くShopServe API連携EXE VB.NET呼び出し例
この資料は、販売管理システムからShopServe API連携EXEを呼び出す場合の実装例です。
実際の画面処理、バッチ処理、ログ出力方法に合わせて調整して使用してください。
各EXEは、終了コードと標準出力の意味が少しずつ異なります。
そのため、EXEを起動する処理は共通化し、取得した結果の解釈はEXEごとに分ける形を想定しています。
1. 共通の起動処理例
Imports System.Diagnostics
Imports System.Text
Public Class ExeResult
Public Property ExitCode As Integer
Public Property StandardOutput As String
Public Property StandardError As String
Public Property Timeout As Boolean
End Class
Private Function RunShopServeExe(exePath As String,
arguments As String,
Optional timeoutMilliseconds As Integer = 60000) As ExeResult
Dim result As New ExeResult()
Dim psi As New ProcessStartInfo()
psi.FileName = exePath
psi.Arguments = arguments
psi.WorkingDirectory = IO.Path.GetDirectoryName(exePath)
psi.UseShellExecute = False
psi.CreateNoWindow = True
psi.RedirectStandardOutput = True
psi.RedirectStandardError = True
psi.StandardOutputEncoding = Encoding.UTF8
psi.StandardErrorEncoding = Encoding.UTF8
Using proc As New Process()
proc.StartInfo = psi
proc.Start()
Dim outputTask = proc.StandardOutput.ReadToEndAsync()
Dim errorTask = proc.StandardError.ReadToEndAsync()
If proc.WaitForExit(timeoutMilliseconds) Then
result.ExitCode = proc.ExitCode
result.StandardOutput = outputTask.Result
result.StandardError = errorTask.Result
result.Timeout = False
Else
Try
proc.Kill()
Catch
End Try
result.ExitCode = 9
result.StandardOutput = ""
result.StandardError = "ShopServe API連携EXEの実行がタイムアウトしました。"
result.Timeout = True
End If
End Using
Return result
End Function
2. GetWebData.exe の呼び出し例
GetWebData.exe は、標準出力を使用しません。
正常終了、異常終了は終了コードで判定し、取り込み結果の詳細はログ、またはDBの注文関連テーブルを確認します。
Private Sub SampleGetWebData()
Dim exePath = "C:\ShopServe\GetWebData.exe"
Dim result = RunShopServeExe(exePath, "")
If result.ExitCode = 0 Then
' 正常終了
' 取り込み結果はログ、またはDBの注文関連テーブルを確認します。
Else
' 異常終了
' GetWebData.exe は標準出力を使用しないため、詳細はログを確認します。
Dim message = result.StandardError
End If
End Sub
3. PutPoint.exe / PutShipping.exe の呼び出し例
PutPoint.exe と PutShipping.exe は、正常終了時は標準出力を出力しません。
ExitCode が 0 以外の場合、標準出力にエラー理由が出力されます。
Private Sub SamplePutPoint()
Dim exePath = "C:\ShopServe\PutPoint.exe"
Dim args = "uid=testuser addpoint=200 note=""連携にて加算"""
Dim result = RunShopServeExe(exePath, args)
If result.ExitCode = 0 Then
' 正常終了
Else
' 異常終了
Dim errorMessage = result.StandardOutput
If String.IsNullOrWhiteSpace(errorMessage) Then
errorMessage = result.StandardError
End If
End If
End Sub
Private Sub SamplePutShipping()
Dim exePath = "C:\ShopServe\PutShipping.exe"
Dim args = "serial_code=989819 delivery_no=1 shipping_status=Sent delivery_company_label=YamatoTransport contact_number=1234-5678-9012"
Dim result = RunShopServeExe(exePath, args)
If result.ExitCode = 0 Then
' 正常終了
Else
' 異常終了
Dim errorMessage = result.StandardOutput
If String.IsNullOrWhiteSpace(errorMessage) Then
errorMessage = result.StandardError
End If
End If
End Sub
4. GetPoint.exe の呼び出し例
GetPoint.exe は、ExitCode=0 の場合でも標準出力の結果行が OK とは限りません。
ExitCode は「EXEが結果を作成できたか」、標準出力の OK/NG は「指定した会員IDの取得結果」として扱います。
Private Sub SampleGetPoint()
Dim exePath = "C:\ShopServe\GetPoint.exe"
Dim result = RunShopServeExe(exePath, "uid=testuser")
If result.ExitCode <> 0 Then
' DB接続エラー、API通信エラー、JSON解析エラーなどの内部エラー
Dim errorMessage = result.StandardOutput
If String.IsNullOrWhiteSpace(errorMessage) Then
errorMessage = result.StandardError
End If
Return
End If
Dim line = result.StandardOutput.Trim()
If line = "" Then
' 想定外:結果行なし
Return
End If
Dim cols = line.Split(ControlChars.Tab)
If cols.Length < 5 Then
' 想定外:項目数不足
Return
End If
Dim uid = cols(0)
Dim status = cols(1)
Dim validPoint = cols(2)
Dim expireDate = cols(3)
Dim message = cols(4)
If status = "OK" Then
' 会員ポイント取得成功
Else
' 会員IDが見つからない、会員ID不正など
' EXE自体は正常に結果を返しているため、ExitCode は 0 です。
End If
End Sub
5. GetPaymentStatus.exe / ReqPayment.exe の呼び出し例
GetPaymentStatus.exe と ReqPayment.exe は、1回の起動で複数件の結果を返す場合があります。
ExitCode=0 の場合でも、標準出力の明細行には OK と NG が混在することがあります。
Private Sub SampleGetPaymentStatus()
Dim exePath = "C:\ShopServe\GetPaymentStatus.exe"
Dim result = RunShopServeExe(exePath, "serial_codes=98a01b,98a01a,98zzzz")
If result.ExitCode <> 0 Then
' DB接続エラー、API通信エラー、JSON解析エラーなどの内部エラー
Dim errorMessage = result.StandardOutput
If String.IsNullOrWhiteSpace(errorMessage) Then
errorMessage = result.StandardError
End If
Return
End If
For Each line In result.StandardOutput.Split({vbCrLf, vbLf}, StringSplitOptions.RemoveEmptyEntries)
Dim cols = line.Split(ControlChars.Tab)
If cols.Length < 4 Then
' 想定外:項目数不足
Continue For
End If
Dim serialCode = cols(0)
Dim status = cols(1)
Dim paymentStatus = cols(2)
Dim message = cols(3)
If status = "OK" Then
' 決済状況取得成功
Else
' 指定した注文管理番号が見つからない等、明細単位のNG
' EXE自体は正常に結果を返しているため、ExitCode は 0 です。
End If
Next
End Sub
Private Sub SampleReqPayment()
Dim exePath = "C:\ShopServe\ReqPayment.exe"
Dim result = RunShopServeExe(exePath, "serial_codes=98a01b,98a01a")
If result.ExitCode <> 0 Then
' DB接続エラー、API通信エラー、JSON解析エラーなどの内部エラー
Dim errorMessage = result.StandardOutput
If String.IsNullOrWhiteSpace(errorMessage) Then
errorMessage = result.StandardError
End If
Return
End If
For Each line In result.StandardOutput.Split({vbCrLf, vbLf}, StringSplitOptions.RemoveEmptyEntries)
Dim cols = line.Split(ControlChars.Tab)
If cols.Length < 4 Then
' 想定外:項目数不足
Continue For
End If
Dim serialCode = cols(0)
Dim status = cols(1)
Dim apiMessage = cols(2)
Dim description = cols(3)
If status = "OK" Then
' 決済依頼成功
Else
' 決済方法または決済ステータスの状態により更新できない等、明細単位のNG
' EXE自体は正常に結果を返しているため、ExitCode は 0 です。
End If
Next
End Sub
6. 連続して呼び出す場合の例
短時間に何度も連続して呼び出すと、ShopServe側でアクセス制限がかかる可能性があります。
販売管理システム側でループ処理などにより連続実行する場合は、0.5秒程度の待機を入れてください。
Private Sub SampleLoopGetPoint()
Dim exePath = "C:\ShopServe\GetPoint.exe"
Dim userIds = New String() {"user001", "user002", "user003"}
For Each uid In userIds
Dim result = RunShopServeExe(exePath, "uid=" & uid)
' 結果判定は SampleGetPoint と同様です。
Threading.Thread.Sleep(500)
Next
End Sub
7. 複数件をまとめて指定する例
GetPaymentStatus.exe と ReqPayment.exe は、注文管理番号をカンマ区切りで複数指定できます。
複数件を処理する場合は、可能な範囲で1回の起動にまとめて指定してください。
Private Sub SampleBulkReqPayment()
Dim exePath = "C:\ShopServe\ReqPayment.exe"
Dim serialCodes = New String() {"98a01b", "98a01a", "98a01c"}
Dim args = "serial_codes=" & String.Join(",", serialCodes)
Dim result = RunShopServeExe(exePath, args)
' 結果判定は SampleReqPayment と同様です。
End Sub
Other Documents
EXE別解説
ShopServeから注文情報を取得し、DBへ取り込みます。
詳細を開くEXE別解説
ShopServe会員のポイントを加算、または減算します。
詳細を開くEXE別解説
ShopServe会員のポイント情報を取得し、有効ポイントとポイント有効期限を標準出力に出力します。
詳細を開くEXE別解説
ShopServe注文のお届け先発送情報を更新します。
詳細を開くEXE別解説
ShopServe注文の決済状況を取得し、決済ステータスの日本語表記を含めて標準出力に出力します。
詳細を開くEXE別解説
ShopServeから指定会員の注文を検索し、DBに存在しない未取り込み注文を取得します。
詳細を開くEXE別解説
ShopServe注文の決済依頼を行い、処理結果を標準出力にタブ区切りで出力します。
詳細を開く