You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python正确调用Steam InitTxn接口?orderid参数缺失问题求解

Steam微交易InitTxn接口调用问题及解决方法

问题背景

为Steam平台游戏开发内购功能,服务器基于Python 3实现,调用InitTxn接口时始终收到Required parameter 'orderid' is missing错误,尽管参数已按要求传入。

第一次尝试:参数放在URL中(POST请求)

代码实现:

conn = http.client.HTTPSConnection("partner.steam-api.com")
orderid = uuid.uuid4().int & (1<<64)-1
print("orderid = ", orderid)
key = "xxxxxxxxxxxxxxxxxxx" # 出于安全考虑隐藏
steamid = "xxxxxxxxxxxxxxxxxxx" # 出于安全考虑隐藏
pid = "testItem1"
appid = "480"
itemcount = 1
currency = 'CNY'
amount = 350
description = 'testing_description'
urlSandbox = "/ISteamMicroTxnSandbox/"
s = f'{urlSandbox}InitTxn/v3/?key={key}&orderid={orderid}&appid={appid}&steamid={steamid}&itemcount={itemcount}&currency={currency}&itemid[0]={pid}&qty[0]={1}&amount[0]={amount}&description[0]={description}'
print("s = ", s)
conn.request('POST', s)
r = conn.getresponse()
print("InitTxn result = ", r.read())

生成的请求URL:

s =  /ISteamMicroTxnSandbox/InitTxn/v3/?key=xxxxxxx&orderid=11506775749761176415&appid=480&steamid=xxxxxxxxxxxx&itemcount=1&currency=CNY&itemid[0]=testItem1&qty[0]=1&amount[0]=350&description[0]=testing_description

错误响应:

InitTxn result =  b"<html><head><title>Bad Request</title></head><body><h1>Bad Request</h1>Required parameter 'orderid' is missing</body></html>"

补充说明:采用相同参数传递方式调用GetUserInfo接口(改为GET请求)可正常工作。

第二次尝试:参数放在POST请求体中

调整后的代码:

params = {
    'key': key,
    'orderid': orderid,
    'appid': appid,
    'steamid': steamid,
    'itemcount': itemcount,
    'currency': currency,
    'pid': pid,
    'qty[0]': 1,
    'amount[0]': amount,
    'description[0]': description
}
s = urllib.parse.urlencode(params)
# 控制台输出:s =  key=xxxxx&orderid=9231307508782239594&appid=480&steamid=xxx&itemcount=1&currency=CNY&pid=testItem1&qty%5B0%5D=1&amount%5B0%5D=350&description%5B0%5D=testing_description
print("s = ", s)
conn.request('POST', url=f'{urlSandbox}InitTxn/v3/', body=s)

仍收到相同错误:Required parameter 'orderid' is missing

解决方法

问题核心是POST请求未设置正确的Content-Type头,同时存在参数名错误,修正后即可正常调用:

import http.client
import uuid
import urllib.parse

conn = http.client.HTTPSConnection("partner.steam-api.com")
orderid = uuid.uuid4().int & (1<<64)-1
key = "xxxxxxxxxxxxxxxxxxx"
steamid = "xxxxxxxxxxxxxxxxxxx"
pid = "testItem1"
appid = "480"
itemcount = 1
currency = 'CNY'
amount = 350
description = 'testing_description'
urlSandbox = "/ISteamMicroTxnSandbox/"

params = {
    'key': key,
    'orderid': orderid,
    'appid': appid,
    'steamid': steamid,
    'itemcount': itemcount,
    'currency': currency,
    'itemid[0]': pid,  # 修正参数名:接口要求为itemid[0]而非pid
    'qty[0]': 1,
    'amount[0]': amount,
    'description[0]': description
}
encoded_params = urllib.parse.urlencode(params)

# 必须设置Content-Type头,确保服务器正确解析请求体
headers = {
    'Content-Type': 'application/x-www-form-urlencoded'
}

conn.request('POST', f'{urlSandbox}InitTxn/v3/', body=encoded_params, headers=headers)
r = conn.getresponse()
print("InitTxn result = ", r.read())

关键修复点:

  • 添加Content-Type: application/x-www-form-urlencoded请求头,Steam服务器依赖该头解析POST请求体中的参数
  • 修正参数名:将pid改为接口要求的itemid[0],避免参数无法被识别

内容的提问来源于stack exchange,提问作者ArtS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:17:09