A few days ago my player donation boards stopped showing players’ gamepasses and I get “HTTP 403” error in the output. I use roproxy to get the gamepasses and have never had this issue until now. I heard that roblox changed the API or something, do I need to get an alternative to roproxy, and if so what do I use instead? I’m not very sure how 3rd party things like this work.
Please post your code. It’s difficult to diagnose your API endpoints otherwise
local nameLabel = script.Parent:WaitForChild("NamePart"):WaitForChild("NameGui"):WaitForChild("NameLabel")
nameLabel.Text = "..."
local itemsScroller = script.Parent:WaitForChild("ItemsPart"):WaitForChild("ItemsGui"):WaitForChild("ItemsScroller")
local http = game:GetService("HttpService")
local url = "https://catalog.roproxy.com/v1/search/items/details?Category=3&CreatorName="
local ownerId = script.Parent:WaitForChild("OwnerId")
local plr = game.Players:GetPlayerByUserId(ownerId.Value)
local owner = script.Parent.Owner.Value
if owner ~= nil and owner.Parent ~= nil then return end
local data = http:JSONDecode(http:GetAsync(url .. plr.Name)).data
if data then
script.Parent.Owner.Value = plr
local proximityPrompt = Instance.new("ProximityPrompt")
proximityPrompt.HoldDuration = 1
proximityPrompt.ActionText = "Claim Donation Stand"
proximityPrompt.UIOffset = Vector2.new(0, 2)
proximityPrompt.RequiresLineOfSight = false
proximityPrompt.Name = "StandProximityPrompt"
proximityPrompt.Enabled = false
proximityPrompt.Parent = script.Parent.NamePart
game.CollectionService:AddTag(proximityPrompt, "StandProximityPrompt")
local nameStr = plr.DisplayName
if plr.MembershipType == Enum.MembershipType.Premium then
nameStr = utf8.char(0xE001) .. nameStr
end
if plr.HasVerifiedBadge then
nameStr ..= utf8.char(0xE000)
end
nameStr ..= "'s Stand"
nameLabel.Text = nameStr
if plr:FindFirstChild("DonationRaised") then
local connection
local function update()
nameLabel.Text = nameStr .. "\n" .. utf8.char(0xE002) .. plr.DonationRaised.Value .. " Raised"
end
update()
connection = plr.DonationRaised.Changed:connect(function()
if script.Parent == nil or script.Parent.Owner.Value ~= plr or plr == nil or plr.Parent == nil then
connection:disconnect()
connection = nil
return
end
update()
end)
end
local function update()
for _, child in itemsScroller:GetChildren() do
if child:IsA("GuiObject") then
child:Destroy()
end
end
table.sort(data,
function(a,b)
return (a.price or 0) < (b.price or 0)
end
)
for i, item in pairs(data) do
if not item.price then continue end
local newButton = script.DonateButton:Clone()
newButton.Text = utf8.char(0xE002) .. item.price
local id = Instance.new("IntValue", newButton)
id.Value = item.id
if item.gamepass then
newButton:SetAttribute("Gamepass", true)
end
newButton.Parent = itemsScroller
game.CollectionService:AddTag(newButton, "StandDonateButton")
itemsScroller.CanvasSize = UDim2.new(0, itemsScroller.UIListLayout.AbsoluteContentSize.X, 0, 0)
end
end
update()
local placesUrl = "https://games.roproxy.com/v2/users/" .. plr.UserId .. "/games?accessFilter=Public&limit=50"
local placesData = http:JSONDecode(http:GetAsync(placesUrl)).data
local passes = {}
for _, place in placesData do
if place and place.id then
local passesUrl = "https://games.roproxy.com/v1/games/" .. place.id .. "/game-passes?sortOrder=Asc&limit=50"
local passesData = http:JSONDecode(http:GetAsync(passesUrl)).data
if passesData then
for _, pass in passesData do
--pass.id = pass.productId
pass.gamepass = true
table.insert(data, pass)
end
if #passesData > 0 then
update()
end
end
end
end
end
1 Like
Took a little bit of research and hunting…
1 Like