[{"data":1,"prerenderedAt":577},["ShallowReactive",2],{"page-en-/writing":3,"articles-/writing":35},{"id":4,"title":5,"body":6,"date":27,"description":23,"extension":28,"head":27,"meta":29,"navigation":30,"ogImage":27,"path":31,"robots":27,"schemaOrg":27,"seo":32,"sitemap":33,"stem":34},"content_en/3.writing.md","Writing",{"type":7,"value":8,"toc":24},"minimal",[9],[10,11,12,19],"writing",{},[13,14,16],"template",{"v-slot:title":15},"",[17,18,5],"p",{},[13,20,21],{"v-slot:subtitle":15},[17,22,23],{},"Some writings",{"title":15,"searchDepth":25,"depth":25,"links":26},2,[],null,"md",{},true,"/writing",{"title":5,"description":23},{"loc":31},"3.writing",[36],{"id":37,"title":38,"body":39,"date":566,"description":50,"extension":28,"head":27,"image":567,"meta":568,"navigation":30,"ogImage":27,"path":569,"readingTime":570,"robots":27,"schemaOrg":27,"seo":571,"sitemap":572,"stem":573,"tags":574},"articles_en/articles/about-jdonate.md","JDonate 2 | Laravel 11 | Vue3",{"type":7,"value":40,"toc":559},[41,48,51,56,59,63,66,71,74,180,184,187,229,232,434,437,484,487,535,539,542,555],[17,42,43],{},[44,45],"img",{"alt":46,"src":47},"preview","/articles/jdonate_project.png",[17,49,50],{},"JDonate 2 — автодонат магазин под Steam авторизацию. Имеет на борту мультисерверность, API для работы с корзиной, админ панель.",[52,53,55],"h3",{"id":54},"требования-к-серверу","Требования к серверу",[17,57,58],{},"Для запуска JDonate 2 на вашем сервере рекомендуется использовать VPS с минимальной конфигурацией: 2 ГБ оперативной памяти и операционную систему Linux. Для защиты от DDoS-атак мы советуем использовать Cloudflare, что поможет обеспечить стабильную работу сайта даже при атаках.",[52,60,62],{"id":61},"система-промокодов","Система промокодов",[17,64,65],{},"Позволяет создавать промокоды, типы - на бонусный баланс, и на бонус при пополнение. Промокоды имеют свойство накапливаться.",[67,68,70],"h2",{"id":69},"плагин","Плагин",[17,72,73],{},"Плагин поставляется отдельно, 5.000рублей. Хотите написать свой? Нет проблем! Ниже описано API позволяющее это сделать, а также конфиг штатного плагина.",[75,76,80],"pre",{"className":77,"code":78,"language":79,"meta":15,"style":15},"language-bash shiki shiki-themes github-dark github-dark github-light","\"Настройки API\": {\n  \"Основная ссылка\": \"https://domain.ru/\",\n  \"API ключ\": \"your_api_key\",\n  \"ID сервера\": \"your_server_ID\",\n},\n\"Настройки плагина\": {\n  \"Запретить получать товар в зоне чужого шкафа?\": true,\n  \"Включить отображение подключяемых игроков в Терак сервере?\": true\n}\n","bash",[81,82,83,100,110,121,132,139,149,163,174],"code",{"__ignoreMap":15},[84,85,88,92,96],"span",{"class":86,"line":87},"line",1,[84,89,91],{"class":90},"sm1F7","\"Настройки API\"",[84,93,95],{"class":94},"sUGc6",":",[84,97,99],{"class":98},"sAU8f"," {\n",[84,101,102,105,107],{"class":86,"line":25},[84,103,104],{"class":90},"  \"Основная ссылка\"",[84,106,95],{"class":94},[84,108,109],{"class":98}," \"https://domain.ru/\",\n",[84,111,113,116,118],{"class":86,"line":112},3,[84,114,115],{"class":90},"  \"API ключ\"",[84,117,95],{"class":94},[84,119,120],{"class":98}," \"your_api_key\",\n",[84,122,124,127,129],{"class":86,"line":123},4,[84,125,126],{"class":90},"  \"ID сервера\"",[84,128,95],{"class":94},[84,130,131],{"class":98}," \"your_server_ID\",\n",[84,133,135],{"class":86,"line":134},5,[84,136,138],{"class":137},"s2o2U","},\n",[84,140,142,145,147],{"class":86,"line":141},6,[84,143,144],{"class":90},"\"Настройки плагина\"",[84,146,95],{"class":94},[84,148,99],{"class":98},[84,150,152,155,157,160],{"class":86,"line":151},7,[84,153,154],{"class":90},"  \"Запретить получать товар в зоне чужого шкафа?\"",[84,156,95],{"class":94},[84,158,159],{"class":94}," true",[84,161,162],{"class":98},",\n",[84,164,166,169,171],{"class":86,"line":165},8,[84,167,168],{"class":90},"  \"Включить отображение подключяемых игроков в Терак сервере?\"",[84,170,95],{"class":94},[84,172,173],{"class":94}," true\n",[84,175,177],{"class":86,"line":176},9,[84,178,179],{"class":137},"}\n",[67,181,183],{"id":182},"api-для-работы-с-корзиной","API для работы с корзиной",[17,185,186],{},"Одной из особенностей JDonate 2 является поддержка API для работы с корзиной. Взаимодействие с корзиной происходит через REST API, с конечной точкой:",[75,188,190],{"className":77,"code":189,"language":79,"meta":15,"style":15},"POST /api/cart\n{\n  \"server_id\": server_id,\n  \"steamid\": your_steam_id\n}\n",[81,191,192,200,205,215,225],{"__ignoreMap":15},[84,193,194,197],{"class":86,"line":87},[84,195,196],{"class":90},"POST",[84,198,199],{"class":98}," /api/cart\n",[84,201,202],{"class":86,"line":25},[84,203,204],{"class":137},"{\n",[84,206,207,210,212],{"class":86,"line":112},[84,208,209],{"class":90},"  \"server_id\"",[84,211,95],{"class":94},[84,213,214],{"class":98}," server_id,\n",[84,216,217,220,222],{"class":86,"line":123},[84,218,219],{"class":90},"  \"steamid\"",[84,221,95],{"class":94},[84,223,224],{"class":98}," your_steam_id\n",[84,226,227],{"class":86,"line":134},[84,228,179],{"class":137},[17,230,231],{},"Ответ:",[75,233,237],{"className":234,"code":235,"language":236,"meta":15,"style":15},"language-php shiki shiki-themes github-dark github-dark github-light","{\n    \"id\": 16,\n    \"user_id\": \"76561198996849773\",\n    \"server_id\": \"1\",\n    \"items\": [\n        {\n            \"type\": \"item\",\n            \"id\": 11,\n            \"itemid\": -1321651331,\n            \"name\": \"Explosive 5.56 Rifle Ammo\",\n            \"image\": \"https://jdonate.jaehaerys.dev/images/items/ammo.rifle.explosive.png\",\n            \"amount\": 64,\n            \"shop_cart_id\": \"72ce6a89-e68b-4d2b-9172-ec21dba60e91\"\n        },\n        {\n            \"type\": \"blueprint\",\n            \"id\": 246,\n            \"itemid\": -1878475007,\n            \"name\": \"Satchel Charge\",\n            \"image\": \"https://jdonate.jaehaerys.dev/images/items/explosive.satchel.png\",\n            \"amount\": 1,\n            \"shop_cart_id\": \"b4eab3bf-97ca-4c61-b644-758f78374516\"\n        },\n        {\n            \"type\": \"custom\",\n            \"name\": \"13\",\n            \"image\": \"13\",\n            \"amount\": 1,\n            \"command\": \"grant.group 76561198996849773 test 13d \",\n            \"shop_cart_id\": \"9ead63a5-7cd7-4805-a8c5-88dc83e3df92\"\n        }\n    ],\n    \"created_at\": \"2025-02-20T09:56:43.000000Z\",\n    \"updated_at\": \"2025-02-20T09:56:43.000000Z\"\n}\n","php",[81,238,239,243,248,253,258,263,268,273,278,283,289,295,301,307,313,318,324,330,336,342,348,354,360,365,370,376,382,388,393,399,405,411,417,423,429],{"__ignoreMap":15},[84,240,241],{"class":86,"line":87},[84,242,204],{},[84,244,245],{"class":86,"line":25},[84,246,247],{},"    \"id\": 16,\n",[84,249,250],{"class":86,"line":112},[84,251,252],{},"    \"user_id\": \"76561198996849773\",\n",[84,254,255],{"class":86,"line":123},[84,256,257],{},"    \"server_id\": \"1\",\n",[84,259,260],{"class":86,"line":134},[84,261,262],{},"    \"items\": [\n",[84,264,265],{"class":86,"line":141},[84,266,267],{},"        {\n",[84,269,270],{"class":86,"line":151},[84,271,272],{},"            \"type\": \"item\",\n",[84,274,275],{"class":86,"line":165},[84,276,277],{},"            \"id\": 11,\n",[84,279,280],{"class":86,"line":176},[84,281,282],{},"            \"itemid\": -1321651331,\n",[84,284,286],{"class":86,"line":285},10,[84,287,288],{},"            \"name\": \"Explosive 5.56 Rifle Ammo\",\n",[84,290,292],{"class":86,"line":291},11,[84,293,294],{},"            \"image\": \"https://jdonate.jaehaerys.dev/images/items/ammo.rifle.explosive.png\",\n",[84,296,298],{"class":86,"line":297},12,[84,299,300],{},"            \"amount\": 64,\n",[84,302,304],{"class":86,"line":303},13,[84,305,306],{},"            \"shop_cart_id\": \"72ce6a89-e68b-4d2b-9172-ec21dba60e91\"\n",[84,308,310],{"class":86,"line":309},14,[84,311,312],{},"        },\n",[84,314,316],{"class":86,"line":315},15,[84,317,267],{},[84,319,321],{"class":86,"line":320},16,[84,322,323],{},"            \"type\": \"blueprint\",\n",[84,325,327],{"class":86,"line":326},17,[84,328,329],{},"            \"id\": 246,\n",[84,331,333],{"class":86,"line":332},18,[84,334,335],{},"            \"itemid\": -1878475007,\n",[84,337,339],{"class":86,"line":338},19,[84,340,341],{},"            \"name\": \"Satchel Charge\",\n",[84,343,345],{"class":86,"line":344},20,[84,346,347],{},"            \"image\": \"https://jdonate.jaehaerys.dev/images/items/explosive.satchel.png\",\n",[84,349,351],{"class":86,"line":350},21,[84,352,353],{},"            \"amount\": 1,\n",[84,355,357],{"class":86,"line":356},22,[84,358,359],{},"            \"shop_cart_id\": \"b4eab3bf-97ca-4c61-b644-758f78374516\"\n",[84,361,363],{"class":86,"line":362},23,[84,364,312],{},[84,366,368],{"class":86,"line":367},24,[84,369,267],{},[84,371,373],{"class":86,"line":372},25,[84,374,375],{},"            \"type\": \"custom\",\n",[84,377,379],{"class":86,"line":378},26,[84,380,381],{},"            \"name\": \"13\",\n",[84,383,385],{"class":86,"line":384},27,[84,386,387],{},"            \"image\": \"13\",\n",[84,389,391],{"class":86,"line":390},28,[84,392,353],{},[84,394,396],{"class":86,"line":395},29,[84,397,398],{},"            \"command\": \"grant.group 76561198996849773 test 13d \",\n",[84,400,402],{"class":86,"line":401},30,[84,403,404],{},"            \"shop_cart_id\": \"9ead63a5-7cd7-4805-a8c5-88dc83e3df92\"\n",[84,406,408],{"class":86,"line":407},31,[84,409,410],{},"        }\n",[84,412,414],{"class":86,"line":413},32,[84,415,416],{},"    ],\n",[84,418,420],{"class":86,"line":419},33,[84,421,422],{},"    \"created_at\": \"2025-02-20T09:56:43.000000Z\",\n",[84,424,426],{"class":86,"line":425},34,[84,427,428],{},"    \"updated_at\": \"2025-02-20T09:56:43.000000Z\"\n",[84,430,432],{"class":86,"line":431},35,[84,433,179],{},[17,435,436],{},"Удалить предмет:",[75,438,440],{"className":77,"code":439,"language":79,"meta":15,"style":15},"DELETE /api/cart\n{\n  \"steamid\": steamid,\n  \"server_id\": server_id,\n  \"shop_cart_id\": your_cart_id\n}\n",[81,441,442,449,453,462,470,480],{"__ignoreMap":15},[84,443,444,447],{"class":86,"line":87},[84,445,446],{"class":90},"DELETE",[84,448,199],{"class":98},[84,450,451],{"class":86,"line":25},[84,452,204],{"class":137},[84,454,455,457,459],{"class":86,"line":112},[84,456,219],{"class":90},[84,458,95],{"class":94},[84,460,461],{"class":98}," steamid,\n",[84,463,464,466,468],{"class":86,"line":123},[84,465,209],{"class":90},[84,467,95],{"class":94},[84,469,214],{"class":98},[84,471,472,475,477],{"class":86,"line":134},[84,473,474],{"class":90},"  \"shop_cart_id\"",[84,476,95],{"class":94},[84,478,479],{"class":98}," your_cart_id\n",[84,481,482],{"class":86,"line":141},[84,483,179],{"class":137},[17,485,486],{},"Изменить баланс",[75,488,490],{"className":77,"code":489,"language":79,"meta":15,"style":15},"POST /api/user/balance\n{\n  \"steamid\": steamid,\n  \"balance\": balance,\n  \"type\": subtract/add\n}\n",[81,491,492,499,503,511,521,531],{"__ignoreMap":15},[84,493,494,496],{"class":86,"line":87},[84,495,196],{"class":90},[84,497,498],{"class":98}," /api/user/balance\n",[84,500,501],{"class":86,"line":25},[84,502,204],{"class":137},[84,504,505,507,509],{"class":86,"line":112},[84,506,219],{"class":90},[84,508,95],{"class":94},[84,510,461],{"class":98},[84,512,513,516,518],{"class":86,"line":123},[84,514,515],{"class":90},"  \"balance\"",[84,517,95],{"class":94},[84,519,520],{"class":98}," balance,\n",[84,522,523,526,528],{"class":86,"line":134},[84,524,525],{"class":90},"  \"type\"",[84,527,95],{"class":94},[84,529,530],{"class":98}," subtract/add\n",[84,532,533],{"class":86,"line":141},[84,534,179],{"class":137},[67,536,538],{"id":537},"безопасность-api","Безопасность API",[17,540,541],{},"Для обеспечения безопасности запросов все взаимодействия с API должны сопровождаться использованием уникального ключа API, который передается в заголовках запросов. В заголовках должен быть обязательно указан параметр X-API-KEY.",[75,543,545],{"className":77,"code":544,"language":79,"meta":15,"style":15},"X-API-KEY: your-api-key-here\n",[81,546,547],{"__ignoreMap":15},[84,548,549,552],{"class":86,"line":87},[84,550,551],{"class":90},"X-API-KEY:",[84,553,554],{"class":98}," your-api-key-here\n",[556,557,558],"style",{},"html pre.shiki code .sm1F7, html code.shiki .sm1F7{--shiki-dark:#B392F0;--shiki-default:#B392F0;--shiki-light:#6F42C1}html pre.shiki code .sUGc6, html code.shiki .sUGc6{--shiki-dark:#79B8FF;--shiki-default:#79B8FF;--shiki-light:#005CC5}html pre.shiki code .sAU8f, html code.shiki .sAU8f{--shiki-dark:#9ECBFF;--shiki-default:#9ECBFF;--shiki-light:#032F62}html pre.shiki code .s2o2U, html code.shiki .s2o2U{--shiki-dark:#E1E4E8;--shiki-default:#E1E4E8;--shiki-light:#24292E}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}",{"title":15,"searchDepth":25,"depth":25,"links":560},[561,562,563,564,565],{"id":54,"depth":112,"text":55},{"id":61,"depth":112,"text":62},{"id":69,"depth":25,"text":70},{"id":182,"depth":25,"text":183},{"id":537,"depth":25,"text":538},"10/02/2025","https://jaehaerys.dev/articles/jdonate_project.png",{},"/articles/about-jdonate","10",{"title":38,"description":50},{"loc":569},"articles/about-jdonate",[575,576],"Laravel","Vue",1752319263733]