H5游戲接入Steam流程
最近在處理將H5頁游項目接入Steam,在查找資料的過程中,發(fā)現(xiàn)相關(guān)資料有點零碎
于是自己整理了一篇接入教程,參考資料我也會放在文章最后

下面是準備工作。有幾個東西需要提前處理或下載好
創(chuàng)建steam應(yīng)用
下面操作主要用于獲取appid 和 webapi key,如果有其他同事準備好了可以跳過
在?https://partner.steamgames.com?注冊steamwork賬號,并創(chuàng)建好應(yīng)用,需要交個100美元
官方入門指南:https://partner.steamgames.com/doc/gettingstarted
在用戶與權(quán)限->管理組 點擊你應(yīng)用所在的組,在網(wǎng)頁右側(cè)有生成 WebAPI key 的按鈕
這個key用于游戲后端與steam webapi交互使用
電腦安裝steam客戶端并注冊登陸你的steam賬號
NW.js
這個東西可以將你的H5網(wǎng)頁游戲 包進.exe應(yīng)用程序里(當然還有類似的其他框架如Electron)。因為下面要用到的greenworks最后的版本只支持到v0.33.3所以也只能用v0.33.3這個版本了
官網(wǎng):https://nwjs.io/
下載地址:https://dl.nwjs.io/v0.33.3/

有兩種包可以選擇:
帶sdk的可以使用F12,便于調(diào)試(nwjs就是內(nèi)嵌了一個chrome內(nèi)核,F(xiàn)12和chrome一樣的)
下面那個利于最終發(fā)布
我項目暫時只需要支持windows x64,nwjs-sdk-v0.33.3-win-x64.zip 和?nwjs-v0.33.3-win-x64.zip 都載了一份,你們可以按需選擇下載
Greenworks
這個東西允許我們的javascript代碼調(diào)用SteamWorksAPI,登陸和充值等相關(guān)操作全靠它了
GitHub地址:https://github.com/greenheartgames/greenworks#start-greenworks-in-nwjs
api文檔:https://github.com/greenheartgames/greenworks/wiki
下載地址:https://github.com/greenheartgames/greenworks/releases
注意要點擊Show all 27 assets 顯示全部 取 -nw-v0.33.3- 版本的包


Steamworks?SDK?
選 1.42版本,因為Greenworks v0.14.0支持這個版本
下載地址:https://partner.steamgames.com/downloads/list
resourcehacker
修改nw.exe文件圖標用的工具,有需要的可以去下載,不修改也沒事,啟的應(yīng)用顯示的是你配置圖標。
下載地址:http://www.angusj.com/resourcehacker/

下面開搞
1、首先解壓你下載好的nwjs
2、然后解壓greenworks,里面就一個lib和greenworks.js,都丟到解壓好的nwjs里
3、steamworks_sdk_142解壓在另外地方備用
4、下面按windows兩個不同的版本去找到文件
win_ai32:
steamworks_sdk_142\sdk\redistributable_bin\steam_api.dll
steamworks_sdk_142\sdk\public\steam\lib\win32\sdkencryptedappticket.dll
win_x64:
steamworks_sdk_142\sdk\redistributable_bin\win64\steam_api64.dll
steamworks_sdk_142\sdk\public\steam\lib\win64\sdkencryptedappticket64.dll
將上面取到的兩個dll文件復制到nwjs的lib文件夾中
5、在nwjs文件夾新建文件夾asset,將你的應(yīng)用圖標丟進去,如:

6、在nwjs文件夾下新建一個文件package.json,內(nèi)容如下
package.json更詳細的設(shè)置參數(shù)可參考
https://github.com/nwjs/nw.js/wiki/Manifest-format
7、在nwjs文件夾下新建一個文件index.html,參考內(nèi)容如下
greenworks.getAuthSessionTicket里的回調(diào)方法,將ticket、steamId、language,傳給你的游戲頁面,進行登錄驗證操作
micro-txn-authorization-response 是steam充值回調(diào)這邊通ajax通知后臺進行充值訂單的校驗
8、在nwjs文件夾下新建一個文件steam_appid.txt,里面的內(nèi)容就是一串數(shù)字(你的steam? 應(yīng)用?id),這個文件只是單獨調(diào)試的時候用。正式發(fā)布到steam里,由steam啟動應(yīng)用是不需要的
到這里客戶端應(yīng)用相關(guān)處理就都好了。
即使app沒有上傳到steam 也可以雙擊 nw.exe 正常啟動后使用F12進行調(diào)試,只是充值的時候彈不出steam的交易窗口

下面都是游戲網(wǎng)頁后端相關(guān)處理代碼
AuthenticateUserTicket 用于游戲網(wǎng)頁后端校驗登錄用的ticket?
API文檔:https://partner.steamgames.com/doc/webapi/ISteamUserAuth

這邊簡單說下steam游戲內(nèi)充值的整個流程
官方詳細充值流程文檔:https://partner.steamgames.com/doc/features/microtransactions/implementation
正式的充值相關(guān)API為?https://partner.steam-api.com/ISteamMicroTxn/*
測試用的沙盒環(huán)境為?https://partner.steam-api.com/ISteamMicroTxnSandbox/*
1、玩家在游戲內(nèi)選擇商品

2、游戲服務(wù)端生成orderid等數(shù)據(jù)?向?Steam webapi 發(fā)起購買請求,需要使用下文的?ISteamMicroTxn/InitTxn
3、當InitTxn返回成功的時候,客戶端會彈出steam小額交易窗口(必須在steam發(fā)布后,并由steam啟動游戲,才會彈出)

4、玩家點擊授權(quán)扣款按鈕后,客戶端的index.html也會收到micro-txn-authorization-response回調(diào),客戶端將收到的orderid 和 appid 發(fā)送到充值后臺進行校驗
5、充值后臺用?ISteamMicroTxn/QueryTxn 將 orderid 發(fā)送給?Steam webapi 發(fā)起訂單信息查詢
6、如果返回的訂單狀態(tài)為Approved,表示玩家已經(jīng)授權(quán)扣款,這時候 用?ISteamMicroTxn/FinalizeTxn 通知?Steam webapi 扣款完成訂單,同時處理自己游戲的訂單狀態(tài),并給玩家發(fā)送相應(yīng)的道具

以下是充值相關(guān)的API
官方文檔:https://partner.steamgames.com/doc/webapi/ISteamMicroTxn
InitTxn
正式API URL:https://partner.steam-api.com/ISteamMicroTxn/InitTxn/v3/
沙盒API URL:https://partner.steam-api.com/ISteamMicroTxnSandbox/InitTxn/v3/


QueryTxn
正式API URL:https://partner.steam-api.com/ISteamMicroTxn/QueryTxn/v3/
沙盒API URL:https://partner.steam-api.com/ISteamMicroTxnSandbox/QueryTxn/v3/



FinalizeTxn
正式API URL:https://partner.steam-api.com/ISteamMicroTxn/FinalizeTxn/v2/
沙盒API URL:https://partner.steam-api.com/ISteamMicroTxnSandbox/FinalizeTxn/v2/



上面下載的steamworks_sdk_142還是Steam APP程序上傳的工具
官方教程:https://partner.steamgames.com/doc/sdk/uploading

參考資料:
https://indienova.com/u/nodep/blogread/11950
https://www.cnblogs.com/empist/p/10217742.html
https://blog.csdn.net/dingshi7798/article/details/107260995
https://partner.steamgames.com/doc/sdk