H5游戏接入Steam流程
最近在处理将H5页游项目接入Steam,在查找资料的过程中,发现相关资料有点零碎
于是自己整理了一篇接入教程,参考资料我也会放在文章最后

下面是准备工作。有几个东西需要提前处理或下载好
创建steam应用
下面操作主要用于获取appid 和 webapi key,如果有其他同事准备好了可以跳过
在 https://partner.steamgames.com 注册steamwork账号,并创建好应用,需要交个100美元
官方入门指南:https://partner.steamgames.com/doc/gettingstarted
在用户与权限->管理组 点击你应用所在的组,在网页右侧有生成 WebAPI key 的按钮
这个key用于游戏后端与steam webapi交互使用
电脑安装steam客户端并注册登陆你的steam账号
NW.js
这个东西可以将你的H5网页游戏 包进.exe应用程序里(当然还有类似的其他框架如Electron)。因为下面要用到的greenworks最后的版本只支持到v0.33.3所以也只能用v0.33.3这个版本了
官网:https://nwjs.io/
下载地址:https://dl.nwjs.io/v0.33.3/

有两种包可以选择:
带sdk的可以使用F12,便于调试(nwjs就是内嵌了一个chrome内核,F12和chrome一样的)
下面那个利于最终发布
我项目暂时只需要支持windows x64,nwjs-sdk-v0.33.3-win-x64.zip 和 nwjs-v0.33.3-win-x64.zip 都载了一份,你们可以按需选择下载
Greenworks
这个东西允许我们的javascript代码调用SteamWorksAPI,登陆和充值等相关操作全靠它了
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文件图标用的工具,有需要的可以去下载,不修改也没事,启的应用显示的是你配置图标。
下载地址: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,将你的应用图标丢进去,如:

6、在nwjs文件夹下新建一个文件package.json,内容如下
package.json更详细的设置参数可参考
https://github.com/nwjs/nw.js/wiki/Manifest-format
7、在nwjs文件夹下新建一个文件index.html,参考内容如下
greenworks.getAuthSessionTicket里的回调方法,将ticket、steamId、language,传给你的游戏页面,进行登录验证操作
micro-txn-authorization-response 是steam充值回调这边通ajax通知后台进行充值订单的校验
8、在nwjs文件夹下新建一个文件steam_appid.txt,里面的内容就是一串数字(你的steam 应用 id),这个文件只是单独调试的时候用。正式发布到steam里,由steam启动应用是不需要的
到这里客户端应用相关处理就都好了。
即使app没有上传到steam 也可以双击 nw.exe 正常启动后使用F12进行调试,只是充值的时候弹不出steam的交易窗口

下面都是游戏网页后端相关处理代码
AuthenticateUserTicket 用于游戏网页后端校验登录用的ticket
API文档:https://partner.steamgames.com/doc/webapi/ISteamUserAuth

这边简单说下steam游戏内充值的整个流程
官方详细充值流程文档:https://partner.steamgames.com/doc/features/microtransactions/implementation
正式的充值相关API为 https://partner.steam-api.com/ISteamMicroTxn/*
测试用的沙盒环境为 https://partner.steam-api.com/ISteamMicroTxnSandbox/*
1、玩家在游戏内选择商品

2、游戏服务端生成orderid等数据 向 Steam webapi 发起购买请求,需要使用下文的 ISteamMicroTxn/InitTxn
3、当InitTxn返回成功的时候,客户端会弹出steam小额交易窗口(必须在steam发布后,并由steam启动游戏,才会弹出)

4、玩家点击授权扣款按钮后,客户端的index.html也会收到micro-txn-authorization-response回调,客户端将收到的orderid 和 appid 发送到充值后台进行校验
5、充值后台用 ISteamMicroTxn/QueryTxn 将 orderid 发送给 Steam webapi 发起订单信息查询
6、如果返回的订单状态为Approved,表示玩家已经授权扣款,这时候 用 ISteamMicroTxn/FinalizeTxn 通知 Steam webapi 扣款完成订单,同时处理自己游戏的订单状态,并给玩家发送相应的道具

以下是充值相关的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