一.steam支付小额交易(游戏内)
在学习steam支付可以以先看看文档小额交易实现指南 (Steamworks 文献库) (steamgames.com),文档中详细的介绍在游戏中购买游戏道具或者会员等,一系列流程,请仔细阅读。也可以看下面的支付流程
二,支付流程
此方式适用于有内置商店的游戏,并且用户将在游戏内购物。
- 第一步
您的游戏需要使用 Steamworks API 发布。 这代表须包含一个头文件、链接至库文件,并随产品发布一个 DLL。 参见 Steamworks API 概览,了解更多信息。 必须先成功初始化 Steamworks API 之后才能继续! - 第二步
用户在您的游戏内选择购买一个或多个物品。 物品选定后,您的游戏需要下列几项有关用户的元数据:- Steam ID - 用来在 Steam 系统中识别此用户的唯一的 64 位数字。
- 国家代码 - 显示用户从哪个国家购买的 ISO 3166 国家代码, 据此来决定售价。
- 货币代码 - 将使用何种货币扣款的 ISO 4217 货币代码。
- 客户端游戏语言代码 – Steam 客户端正在以何种语言运行游戏的 ISO 639-1 语言代码。
Steam ID 和语言可通过以下 Steamworks API 调用取得:
要获得用户的国家/地区和货币类型,可使用 ISteamMicroTxn/GetUserInfo web API 请求传入用户的 Steam ID 。
此用户的元数据应与您的一般购买数据一起发送至购买服务器。 - 第三步
您的购买服务器代表 Steam 客户端通过 Steam 网页服务发起购买请求。 您需要使用后文将描述到的 ISteamMicroTxn/InitTxn。 请求中必须包含下列数据:- Order ID - 由您为此次购买指定的唯一的 64 位数字。 此数字也是此次交易的键值, 在 Steam 系统中引用该交易时使用。
- Steam ID - 第三步中从 Steam 客户端收到的用户 ID 。
- App ID - 您的 Steam 游戏的唯一标识符。
- 语言 - 您的物品所使用的 ISO 639-1 语言代码。
- 货币 - 您的物品价格所使用的 ISO 4217 货币代码。 如果这与第二步中提供的用户的货币代码不匹配,则将以当前市场汇率自动进行进货币转换。 Steam 将向用户显示转换后的本地货币价格,以供批准。 为了获得最佳的顾客体验,我们建议提供您预期顾客会使用的每种货币的定价。
- 用户希望购买的物品列表, 每项物品需要指定下列具体数据:
- 物品 ID - 您的 32 位物品标识符。
- 数量 - 交易中此类型的物品的数量。
- 金额 - 您希望收取的物品金额(以百分位为单位)。 部分币种必须以整值定价,参见支持币种,了解更多信息。 如果物品的数量大于一,则此值为要收取的总额(金额 = 数量 x 物品单价)。
- 物品描述 - 物品的文字描述。 在用户收到的授权交易提示中,将显示此信息。 您可根据 Steam 客户端指定的语言代码将这段描述本地化。
- 物品类别 - 可选用,描述此物品所属类别的文字。 Steam 后端报表中会使用该值对销售数据进行分组,但绝不会显示给用户。
如果 Steam 接受了这项交易,即会自动通知客户端进行购买授权。 如果返回错误,则需要在修正问题后重新提交一笔购买交易。 - 第四步
如果 ISteamMicroTxn/InitTxn 尝试成功,用户将会通过 Steam 的游戏内界面收到需要对交易进行授权的通知。 所显示的交易详情将使用购买请求中提供的物品描述。 用户便可授权这项交易。 如果用户的 Steam 帐户余额不足,Steam 将自动引导用户充值。 最后,您的游戏将会收到交易是否授权成功的通知。
您的游戏需要设置 ISteamUser::MicroTxnAuthorizationResponse_t 回调处理程序,以接收授权是否成功的通知。 此回调结果包含 AppID、OrderID,和交易的授权状态。 您的游戏可将此结果发送至购买服务器,以进行交易的最终确认。 请参见回调文档,了解更多信息。 - 第五步
您的购买服务器将使用 ISteamMicroTxn/FinalizeTxn API 命令,使用下列参数完成交易。- Order ID - 发起交易时创建的订单 ID。
- App ID - 您的 Steam 游戏的唯一标识符。
响应成功表示购买被接受,应将物品授予用户。 响应错误表示交易无法完成,并会附上相应的出错信息。 - 第六步
您的购买服务器将需要频繁调用 ISteamMicroTxn/GetReport API 来接收有关交易结算状态变化的通知。 您应每天至少调用一次此 API 来协调结算更新,但为确保您的服务器与交易更新保持同步,每分钟调用一次此 API 也是可以的。
您可以自行决定使用 ISteamMicroTxn/RefundTxn API 对客户交易进行退款。 但是,还有其他可以撤销交易的方法,可能需要您注意。 当交易进入逆转状态(例如,Refunded、PartialRefund、Chargedback、RefundedSuspsectedFraud 或 RefundedFriendlyFraud - 请参阅:附录 A:状态值)时,如有可能,您的后端应尝试收回与逆转的交易相关联的物品。 请查看我们关于防范欺诈的文献,并确保您已采取措施防范最常见的欺诈类型。
三,python代码实现
1.做第一个支付接口Ⅰ,首先需要获取用户的元数据,也需要获取国家代码和货币代码
GET https://partner.steam-api.com/ISteamMicroTxn/GetUserInfo/v2/
向这个API发送GET请求,请求参数看这个链接ISteamMicroTxn 接口 (Steamworks 文献库) (steamgames.com)
2.然后就是向以下API发送POST请求,steam调起支付页面,等待用户进行授权。
POST https://partner.steam-api.com/ISteamMicroTxn/InitTxn/v3/
请求参数详细可看ISteamMicroTxn 接口 (Steamworks 文献库) (steamgames.com)
3.第二个支付接口Ⅱ,向以下API发送POST请求,验证orderid是否授权
POST https://partner.steam-api.com/ISteamMicroTxn/FinalizeTxn/v2/
当响应成功时,就是支付成功了,整个支付流程就成功了
注意:steam支付,也是有沙盒环境的,
在测试阶段 API中的ISteamMicroTxn都使用ISteamMicroTxnSandbox代替
当应用程序上线时,使用ISteamMicroTxn
有什么不懂的请细读steam文档,文档中有你想要的