Pocket
LINEで送る

■はじめに

ライセンス認証サービス・サーバーができたわけですよ。WordPressからは簡単にアクティベーション関係はいけました。データのやりとりはJSON、cURLで送信などを行っていることから考えて、普通に別のプラットフォームからもいけるわけです。

今回は、

「みんな大スキ(謎)Excel VBA!」

です(;^ω^)。


■Excel VBAでの実装を考える

VBAの基本的な部分で何処までできるのかが重要なものとなります。まず、cURL、そしてJSONです。これらがクリアできればほぼできたと言っても過言では無いでしょう。

■標準機能と外部のリソース・・・

 実は、JSONをネイティブで扱うことが厳しいという現実がわかりました。

 しかーし、世の中には凄い人が沢山います。ライブラリがありました(;^ω^)。

https://github.com/VBA-tools/VBA-JSON

 

 つぎに、cURLでデータをポストする方法です。これは調べると結構出てきました。割と楽です。あとは、実装の際に重複部分をうまく共通化するだけですね。

ぶっちゃけ次のようなコードだけです。

Function SLM_ACTIVATE(LICENSE_KEY As String, UNIQUE_NAME As String) As Object
Set SLM_ACTIVATE = SLM_Actions_Common(SLM_METHOD_ACTIVATE, LICENSE_KEY, UNIQUE_NAME)
End Function

Function SLM_DEACTIVATE(LICENSE_KEY As String, UNIQUE_NAME As String) As Object
Set SLM_DEACTIVATE = SLM_Actions_Common(SLM_METHOD_DEACTIVATE, LICENSE_KEY, UNIQUE_NAME)
End Function

Function SLM_CHECK(LICENSE_KEY As String, UNIQUE_NAME As String) As Object
Set SLM_CHECK = SLM_Actions_Common(SLM_METHOD_CHECK, LICENSE_KEY, UNIQUE_NAME)
End Function

Private Function SLM_Actions_Common(Method As String, LICENSE_KEY As String, UNIQUE_NAME As String) As Object

Dim apiUrlParam As String
Dim apiHeaders As Object
Dim apiJson As Object

LICENSE_KEY = Application.WorksheetFunction.EncodeURL(LICENSE_KEY)
UNIQUE_NAME = Application.WorksheetFunction.EncodeURL(UNIQUE_NAME)

apiUrlParam = "?slm_action=" & Method & _
"&secret_key=" & SLM_LICENSE_SECRET_KEY & _
"&license_key=" & LICENSE_KEY & _
"&product_ref=" & SLM_LICENSE_PRODUCT_REFERENCE & _
"&registered_domain=" & UNIQUE_NAME & _
"&license_key_name=" & SLM_LICENSE_SECRET_KEY_NAME

Set apiHeaders = CreateObject("Scripting.Dictionary")
Set SLM_Actions_Common = callRestApi("POST", SLM_LICENSE_SERVER_URI, apiUrlParam, apiHeaders)

End Function
Function callRestApi(ByVal Method As String, ByVal url As String, Optional ByVal urlParam As String = "", Optional ByVal headers As Dictionary = Null) As Object

On Error GoTo ERR_TRAP
Dim objHTTP As Object
Dim i As Long
Set objHTTP = CreateObject("msxml2.xmlhttp")
objHTTP.Open Method, url & urlParam, False

For i = 0 To headers.Count - 1
objHTTP.setRequestHeader headers.Keys(i), headers.Items(i)
Next i

' リクエスト送信
' サーバーや通信がおかしいと個々で落ちる
objHTTP.send
Debug.Print objHTTP.responseText
Set callRestApi = JsonConverter.ParseJson(objHTTP.responseText)
Exit Function
ERR_TRAP:
Dim sendRequest As Object
Set sendRequest = CreateObject("Scripting.Dictionary")
sendRequest.Add "result", "error"
sendRequest.Add "message", "HTTP/HTTPS connection error"
Set callRestApi = sendRequest
End Function

意外とシンプルですね。これと先ほどのJSONライブラリを付く合わせるだけで実装完了です。実際の運用には、エラー・例外処理をちゃんと入れないといけませんが、これだけでインターネット上にあるライセンス認証サービス・サーバーとのやりとりが可能です。

俗にある「2週間毎の認証」とかも普通にできます。


■今回のまとめ

難しくないお(^ω^)。

■サンプル

今回はサンプルがあります!

Monacoinを投げる
モナゲ(tipmona)ってなに?
そもそもMonacoinってなに?

Follow me!

Pocket
LINEで送る

しげっち法師さんExcel,Excel VBA,WordPress■はじめに ライセンス認証サービス・サーバーができたわけですよ。WordPressからは簡単にアクティベーション関係はいけました。データのやりとりはJSON、cURLで送信などを行っていることから考えて、普通に別のプラットフォームからもいけるわけです。 今回は、 「みんな大スキ(謎)Excel VBA!」 です(;^ω^)。 ■Excel VBAでの実装を考える VBAの基本的な部分で何処までできるのかが重要なものとなります。まず、cURL、そしてJSONです。これらがクリアできればほぼできたと言っても過言では無いでしょう。 ■標準機能と外部のリソース・・・  実は、JSONをネイティブで扱うことが厳しいという現実がわかりました。  しかーし、世の中には凄い人が沢山います。ライブラリがありました(;^ω^)。 https://github.com/VBA-tools/VBA-JSON    つぎに、cURLでデータをポストする方法です。これは調べると結構出てきました。割と楽です。あとは、実装の際に重複部分をうまく共通化するだけですね。 ぶっちゃけ次のようなコードだけです。 Function SLM_ACTIVATE(LICENSE_KEY As String, UNIQUE_NAME As String) As ObjectSet SLM_ACTIVATE = SLM_Actions_Common(SLM_METHOD_ACTIVATE, LICENSE_KEY, UNIQUE_NAME)End FunctionFunction SLM_DEACTIVATE(LICENSE_KEY As String, UNIQUE_NAME As String) As ObjectSet SLM_DEACTIVATE = SLM_Actions_Common(SLM_METHOD_DEACTIVATE, LICENSE_KEY, UNIQUE_NAME)End FunctionFunction SLM_CHECK(LICENSE_KEY As String, UNIQUE_NAME As String) As ObjectSet SLM_CHECK = SLM_Actions_Common(SLM_METHOD_CHECK, LICENSE_KEY, UNIQUE_NAME)End FunctionPrivate Function SLM_Actions_Common(Method As String,...ICT、文房具、ライフハックをすべての人に。