Hello everyone! Due to recent update I tried implementing buy order confirmation and I failed (partly)๐.
I came here to ask for help because It seems I can't understand why my code runs into the problems.
here are the pieces of my code:
function getCookiesHeaders(contentLength, cookiesStr, itemName, game) {
return {
Accept: "*/*",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "en-US,en;q=0.9",
Connection: "keep-alive",
"Content-Length": contentLength,
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
Cookie: cookiesStr,
Host: "steamcommunity.com",
Origin: "https://steamcommunity.com",
Referer: `https://steamcommunity.com/market/listings/${
GAME_IDENTIFIERS[game]
}/${encodeURI(itemName)}`,
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-origin",
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36",
"sec-ch-ua":
'"Google Chrome";v="138", "Not)A.Brand";v="8", "Chromium";v="138"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
};
}
function getParamsWithFee(cookies, priceInfo) {
const { converted_price: subtotal, converted_fee: fee } = priceInfo;
return {
sessionid: cookies.sessionid,
currency: 18,
subtotal,
fee,
total: fee + subtotal,
quantity: 1,
billing_state: "",
save_my_address: 0,
confirmation: 0
};
}
function generateListingIdLink(listingId) {
return "https://steamcommunity.com/market/buylisting/" + listingId;
}
async function buyItem(itemName, priceDetails, listingId, game, buyingCookies) { // all these params are fine
const confData = {
identitySecret: "myIdentitySecretFromMyFile",
steamId: "mySteamIdFromMyFile",
cookies: buyingCookies
};
const { cookies, cookiesStr } = getStrObjCookies(buyingCookies);
const params = getParamsWithFee(cookies, priceDetails);
const { bodyParams, contentLength } = getSearchParamsData(params);
const headers = getCookiesHeaders(contentLength, cookiesStr, itemName, game);
const sendBuyReq = async () => {
try{
const response = await axios.post(generateListingIdLink(listingId), bodyParams, { headers, validateStatus: (statusCode) => { return statusCode <= 400 || statusCode === 406}}) // validateStatus needs to be done because axios thinks that 406 statusCode here is error and it falls into catch scope
console.log('Response status:', response.status);
return response;
}catch(err){
console.log(err.message, "--errorMsg--");
throw err;
}
}
try {
const { data } = await sendBuyReq(); // that's fine it works great. From SDA it's clearly visible that the buy order is set.
// I tried here await waitTime(2) so my buy information could get in time to the servers.
await confirmBuyListing(confData); // The problem might be right here but it's unlikely because by itself it works
await waitTime(1); // I tried increasing time from 1 sec to 2 secs.
bodyParams.set("confirmation", data.confirmation?.confirmation_id); // updataing params with confirmationId to send new buyLink()
const { data: finalizedData } = await sendBuyReq(); // THE MAIN PROBLEM IS HERE
if (finalizedData.success === 22) console.log(finalizedData); // testing
} catch (err) {
console.log(err);
}
}
I tried checking for confirmation_id and it's fine. Left that just as
bodyParams.set("confirmation", data.confirmation?.confirmation_id);
I think that line with "// THE MAIN PROBLEM IS HERE" is main part because when I make request it shows "status:502" but the original repetitave steam request shows "status:406"
And this is the part where I can't understand why I get 502 code in my code.
If needed I will add confirmBuyListing function for clarification. Shortly I tested the function with browser manual buying and it confirmed and I bought the item
Despite what I wrote above my second thought would be, the problem lies within both confirmation function and buyLink function. I've seen 3 diffrent projects that this confirmation logic was implemented in: C#, JS, PYTHON and I chose python approach because pythonists have already confirmed that they solved this confirmation problem so I tried to follow their solution (this solution could be found in steamPy issues on git).
I don't know what is the cause of that status 502. I did almost everything I prayed and cursed and still can't find the cause of that. I am not giving up on this but the only thing I am looking here is help๐ฐ๐ฐ
*Possible solution is to run python solution directly in my js file from pythonists (the last thing I wanna do).