# البدء

تأخذك هذه الصفحة من منصة مطورين فارغة إلى أول طلب موثَّق إلى الواجهة البرمجية. ستسجّل تطبيقاً، وتثبّته على متجر تملكه، وتستبدل الرمز المؤقت برمز التثبيت، ثم تستدعي `GET /v1/whoami`.

## قبل أن تبدأ[​](#قبل-أن-تبدأ "رابط مباشر إلى قبل أن تبدأ")

* حساب على `DZBuild` يملك متجراً واحداً على الأقل. تثبيت التجربة لا يعمل إلا على متجر يملكه حسابك، لا على متجر أنت عضو في فريقه.
* رابط إعادة توجيه (`redirect URI`) بـ `https` يتحكم فيه تطبيقك. ترفض منصة المطورين `http`. أسرع خيار هو `Worker` على `workers.dev` من [/apps/new](https://dzbuild.dev/ar/ar/apps/new) تسجّله مرة واحدة؛ ويصلح أيضًا نفق `https` إلى جهازك، لكن عنوانه يتغيّر في كل تشغيل ومنصة المطورين لا تقبل أكثر من 5 روابط إعادة توجيه.
* الأداتان `curl` و`openssl` على جهازك.

## ابدأ من التطبيق النموذجي[​](#ابدأ-من-التطبيق-النموذجي "رابط مباشر إلى ابدأ من التطبيق النموذجي")

أسرع بداية هي [/apps/new](https://dzbuild.dev/ar/ar/apps/new): اختر واحدًا من ثلاثة قوالب `Cloudflare` جاهزة، وانشره على عنوان `workers.dev` مجاني، واحصل على القيم الدقيقة التي تُدخلها في منصة المطورين.

* `cloudflare-basic`: مسار التثبيت، ورمز واحد لكل متجر، ورابط الفتح. الأساس لتطبيقك الخاص.
* `cloudflare-catalog`: صفحة منتجات للتاجر وتصدير الكتالوج بصيغة `CSV`.
* `cloudflare-orders`: تنبيهات الطلبات الجديدة على `Telegram` باستعلام `GET /v1/orders` مرة كل دقيقة؛ وإشعارات `webhook` للطلبات متى امتلكت نطاقًا.

أنشئ القالب الأساسي بأمر واحد، أو انشره من المتصفح بالزر أدناه. تنسخه `Cloudflare` إلى حسابك على `GitHub` وتنشره؛ ويسرد ملف `README` الخاص بالقالب الخطوات التالية.

```
npm create cloudflare@latest my-app -- --template DZBuild-com/dzbuild-app-starter/cloudflare-basic --no-agents --no-git --no-deploy --no-open
```

[![النشر على Cloudflare](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTg0IiBoZWlnaHQ9IjM5IiB2aWV3Qm94PSIwIDAgMTg0IDM5IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxwYXRoCiAgICBkPSJNMSA0QzEgMi4zNDMxNSAyLjM0MzE1IDEgNCAxSDE4MEMxODEuNjU3IDEgMTgzIDIuMzQzMTUgMTgzIDRWMzVDMTgzIDM2LjY1NjkgMTgxLjY1NyAzOCAxODAgMzhINEMyLjM0MzE0IDM4IDEgMzYuNjU2OSAxIDM1VjRaIgogICAgZmlsbD0iYmxhY2siIC8+CiAgPHBhdGgKICAgIGQ9Ik0xIDRDMSAyLjM0MzE1IDIuMzQzMTUgMSA0IDFIMTgwQzE4MS42NTcgMSAxODMgMi4zNDMxNSAxODMgNFYzNUMxODMgMzYuNjU2OSAxODEuNjU3IDM4IDE4MCAzOEg0QzIuMzQzMTQgMzggMSAzNi42NTY5IDEgMzVWNFoiCiAgICBzdHJva2U9IiNGNjgyMUYiIHN0cm9rZS13aWR0aD0iMiIgLz4KICA8cGF0aAogICAgZD0iTTI4Ljg4NjggMjQuNzc0NUwyOS4wMDk1IDI0LjM1QzI5LjE1NTggMjMuODQ0OSAyOS4xMDE0IDIzLjM3OCAyOC44NTU5IDIzLjAzNDlDMjguNjMwMiAyMi43MTg5IDI4LjI1MzkgMjIuNTMyOCAyNy43OTcgMjIuNTExMkwxOS4xNDE2IDIyLjQwMDlDMTkuMDgzMyAyMi4zOTc4IDE5LjAzNTEgMjIuMzcxNSAxOS4wMDU0IDIyLjMyODNDMTguOTc1MyAyMi4yODM5IDE4Ljk2ODMgMjIuMjI2OCAxOC45ODY5IDIyLjE3MkMxOS4wMTU0IDIyLjA4NjcgMTkuMDk5OSAyMi4wMjIzIDE5LjE4NzkgMjIuMDE4NEwyNy45MjM2IDIxLjkwNzdDMjguOTU5NyAyMS44NjAyIDMwLjA4MTYgMjEuMDE5NCAzMC40NzQ1IDE5Ljk5NEwzMC45NzI3IDE4LjY5MjRDMzAuOTg2NCAxOC42NTcgMzAuOTkyNiAxOC42MTk0IDMwLjk5MjMgMTguNTgxN0MzMC45OTIyIDE4LjU2MTIgMzAuOTkwNyAxOC41NDA2IDMwLjk4NjIgMTguNTIwM0MzMC40MjAxIDE1Ljk3NjEgMjguMTQ5NyAxNC4wNzM2IDI1LjQzNDggMTQuMDczNkMyMi45MzMzIDE0LjA3MzYgMjAuODA5MiAxNS42ODgyIDIwLjA0NzQgMTcuOTMyMkMxOS41NTU3IDE3LjU2MzMgMTguOTI2NyAxNy4zNjcyIDE4LjI1MDYgMTcuNDM0OEMxNy4wNTA0IDE3LjU1NCAxNi4wODYgMTguNTIwMyAxNS45NjY3IDE5LjcyMDRDMTUuOTM1NCAyMC4wMzE5IDE1Ljk2MDkgMjAuMzMyNSAxNi4wMzI3IDIwLjYxNUMxNC4wNzIyIDIwLjY3MjEgMTIuNSAyMi4yNzgyIDEyLjUgMjQuMjUyNEMxMi41IDI0LjQzMTEgMTIuNTEzNSAyNC42MDY3IDEyLjUzODYgMjQuNzc4NEMxMi41NTA5IDI0Ljg2MTggMTIuNjIxMiAyNC45MjQzIDEyLjcwNTMgMjQuOTI0M0wyOC42ODQ2IDI0LjkyNjJDMjguNjg2MiAyNC45MjYyIDI4LjY4NzYgMjQuOTI1NSAyOC42ODkyIDI0LjkyNTRDMjguNzgwNiAyNC45MjM0IDI4Ljg2MSAyNC44NjI5IDI4Ljg4NjggMjQuNzc0NVoiCiAgICBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMjYxXzU4NTkpIiAvPgogIDxwYXRoCiAgICBkPSJNMzEuNzY5NSAxOC43ODc5QzMxLjY4OTIgMTguNzg3OSAzMS42MDkzIDE4Ljc5MDIgMzEuNTI5OCAxOC43OTQxQzMxLjUxNjcgMTguNzk0OCAzMS41MDQyIDE4Ljc5OCAzMS40OTIzIDE4LjgwMjJDMzEuNDUwOCAxOC44MTY3IDMxLjQxNzcgMTguODUwMyAzMS40MDUxIDE4Ljg5NDFMMzEuMDY0OCAyMC4wNjk1QzMwLjkxODUgMjAuNTc0NiAzMC45NzI5IDIxLjA0MTIgMzEuMjE4NCAyMS4zODQyQzMxLjQ0NDEgMjEuNzAwNyAzMS44MjA0IDIxLjg4NjMgMzIuMjc3MyAyMS45MDc5TDM0LjEyMjQgMjIuMDE4N0MzNC4xNzY4IDIyLjAyMTMgMzQuMjI0NyAyMi4wNDc2IDM0LjI1NCAyMi4wOUMzNC4yODQ4IDIyLjEzNDggMzQuMjkxOCAyMi4xOTIzIDM0LjI3MzMgMjIuMjQ3MUMzNC4yNDQzIDIyLjMzMjQgMzQuMTYwMiAyMi4zOTY4IDM0LjA3MjYgMjIuNDAwN0wzMi4xNTUzIDIyLjUxMTRDMzEuMTE0NSAyMi41NTkzIDI5Ljk5MjcgMjMuMzk5OCAyOS41OTk4IDI0LjQyNTFMMjkuNDYxMiAyNC43ODcxQzI5LjQzNiAyNC44NTI2IDI5LjQ4MyAyNC45MjIzIDI5LjU1MjIgMjQuOTI1OEMyOS41NTQgMjQuOTI1OCAyOS41NTU2IDI0LjkyNjQgMjkuNTU3MyAyNC45MjY0SDM2LjE1NDJDMzYuMjMzIDI0LjkyNjQgMzYuMzAzMiAyNC44NzUxIDM2LjMyNDQgMjQuNzk5NEMzNi40MzkgMjQuMzkxOSAzNi41IDIzLjk2MjQgMzYuNSAyMy41MTgzQzM2LjUgMjAuOTA1NyAzNC4zODIxIDE4Ljc4NzkgMzEuNzY5NSAxOC43ODc5WiIKICAgIGZpbGw9InVybCgjcGFpbnQxX2xpbmVhcl8yNjFfNTg1OSkiIC8+CiAgPHBhdGgKICAgIGQ9Ik00Ni4wODAxIDI0LjVWMTQuNjM1N0g0OS42ODI2QzUyLjYyMjEgMTQuNjM1NyA1NC4zNzIxIDE2LjQxMzEgNTQuMzcyMSAxOS41MzAzVjE5LjU0MzlDNTQuMzcyMSAyMi42NjggNTIuNjM1NyAyNC41IDQ5LjY4MjYgMjQuNUg0Ni4wODAxWk00Ny44NDM4IDIzLjAwOThINDkuNDk4QzUxLjQ4MDUgMjMuMDA5OCA1Mi41NzQyIDIxLjc5OTggNTIuNTc0MiAxOS41NTA4VjE5LjUzNzFDNTIuNTc0MiAxNy4zMzU5IDUxLjQ2IDE2LjEyNiA0OS40OTggMTYuMTI2SDQ3Ljg0MzhWMjMuMDA5OFpNNTguNzg4MSAyNC42NDM2QzU2LjYxNDMgMjQuNjQzNiA1NS4zMDE4IDIzLjIwMTIgNTUuMzAxOCAyMC44OTc1VjIwLjg5MDZDNTUuMzAxOCAxOC42MDc0IDU2LjYzNDggMTcuMTAzNSA1OC43MDYxIDE3LjEwMzVDNjAuNzc3MyAxNy4xMDM1IDYyLjA2MjUgMTguNTU5NiA2Mi4wNjI1IDIwLjc0NzFWMjEuMjkzOUg1Ni45OTAyQzU3LjAxNzYgMjIuNTY1NCA1Ny43MTQ4IDIzLjMxNzQgNTguODIyMyAyMy4zMTc0QzU5LjY2OTkgMjMuMzE3NCA2MC4yMjM2IDIyLjg2NjIgNjAuMzg3NyAyMi4zODA5TDYwLjQwMTQgMjIuMzMzSDYxLjk5NDFMNjEuOTczNiAyMi40MDgyQzYxLjc0OCAyMy41MjI1IDYwLjY4MTYgMjQuNjQzNiA1OC43ODgxIDI0LjY0MzZaTTU4LjcyNjYgMTguNDM2NUM1Ny44MjQyIDE4LjQzNjUgNTcuMTQ3NSAxOS4wNDQ5IDU3LjAxMDcgMjAuMTU5Mkg2MC40MDgyQzYwLjI4NTIgMTkuMDEwNyA1OS42Mjg5IDE4LjQzNjUgNTguNzI2NiAxOC40MzY1Wk02My4xNjMxIDI2Ljg5MjZWMTcuMjUzOUg2NC44NjUyVjE4LjUwNDlINjQuODk5NEM2NS4zMTY0IDE3LjYzNjcgNjYuMTA5NCAxNy4xMDM1IDY3LjE0ODQgMTcuMTAzNUM2OC45ODczIDE3LjEwMzUgNzAuMTQ5NCAxOC41MzkxIDcwLjE0OTQgMjAuODc3VjIwLjg4MzhDNzAuMTQ5NCAyMy4yMDggNjguOTg3MyAyNC42NDM2IDY3LjE2ODkgMjQuNjQzNkM2Ni4xMzY3IDI0LjY0MzYgNjUuMzA5NiAyNC4xMjQgNjQuODk5NCAyMy4yNzY0SDY0Ljg2NTJWMjYuODkyNkg2My4xNjMxWk02Ni42NDI2IDIzLjIwOEM2Ny43Mjk1IDIzLjIwOCA2OC40MTMxIDIyLjMxMjUgNjguNDEzMSAyMC44ODM4VjIwLjg3N0M2OC40MTMxIDE5LjQyNzcgNjcuNzI5NSAxOC41MzkxIDY2LjY0MjYgMTguNTM5MUM2NS41ODk4IDE4LjUzOTEgNjQuODUxNiAxOS40NTUxIDY0Ljg1MTYgMjAuODc3VjIwLjg4MzhDNjQuODUxNiAyMi4yOTg4IDY1LjU4OTggMjMuMjA4IDY2LjY0MjYgMjMuMjA4Wk03MS4yOTEgMjQuNVYxNC42MzU3SDcyLjk5MzJWMjQuNUg3MS4yOTFaTTc3LjY0ODQgMjQuNjQzNkM3NS41MTU2IDI0LjY0MzYgNzQuMTQxNiAyMy4yMjE3IDc0LjE0MTYgMjAuODc3VjIwLjg2MzNDNzQuMTQxNiAxOC41MzkxIDc1LjUzNjEgMTcuMTAzNSA3Ny42NDE2IDE3LjEwMzVDNzkuNzUzOSAxNy4xMDM1IDgxLjE1NTMgMTguNTI1NCA4MS4xNTUzIDIwLjg2MzNWMjAuODc3QzgxLjE1NTMgMjMuMjI4NSA3OS43NzQ0IDI0LjY0MzYgNzcuNjQ4NCAyNC42NDM2Wk03Ny42NTUzIDIzLjI2OTVDNzguNzI4NSAyMy4yNjk1IDc5LjQxODkgMjIuMzk0NSA3OS40MTg5IDIwLjg3N1YyMC44NjMzQzc5LjQxODkgMTkuMzUyNSA3OC43MjE3IDE4LjQ4NDQgNzcuNjQxNiAxOC40ODQ0Qzc2LjU4MiAxOC40ODQ0IDc1Ljg3NzkgMTkuMzU5NCA3NS44Nzc5IDIwLjg2MzNWMjAuODc3Qzc1Ljg3NzkgMjIuNDAxNCA3Ni41Njg0IDIzLjI2OTUgNzcuNjU1MyAyMy4yNjk1Wk04Mi45NiAyNi45MDYyQzgyLjYzMTggMjYuOTA2MiA4Mi4yOSAyNi44NjUyIDgyLjA4NSAyNi44MzExVjI1LjUzMjJDODIuMjE0OCAyNS41NTk2IDgyLjQxMzEgMjUuNTkzOCA4Mi42NTIzIDI1LjU5MzhDODMuMzAxOCAyNS41OTM4IDgzLjY2NDEgMjUuNDA5MiA4My44ODI4IDI0LjgwMDhMODMuOTg1NCAyNC41MDY4TDgxLjM4MDkgMTcuMjUzOUg4My4yNDAyTDg0LjkzNTUgMjMuMDUwOEg4NC45ODM0TDg2LjY4NTUgMTcuMjUzOUg4OC40NzY2TDg1Ljg3MjEgMjQuNzQ2MUM4NS4zMTg0IDI2LjMzODkgODQuNDcwNyAyNi45MDYyIDgyLjk2IDI2LjkwNjJaTTk0Ljc1ODggMjQuNjQzNkM5My4yNDEyIDI0LjY0MzYgOTIuNTIzNCAyNC4wMjgzIDkyLjUyMzQgMjIuNTM4MVYxOC41NjY0SDkxLjQ5OFYxNy4yNTM5SDkyLjUyMzRWMTUuNDE1SDk0LjI1MjlWMTcuMjUzOUg5NS41OTk2VjE4LjU2NjRIOTQuMjUyOVYyMi4zOTQ1Qzk0LjI1MjkgMjMuMTA1NSA5NC41Njc0IDIzLjMzMTEgOTUuMTg5NSAyMy4zMzExQzk1LjM1MzUgMjMuMzMxMSA5NS40ODM0IDIzLjMxMDUgOTUuNTk5NiAyMy4zMDM3VjI0LjU4MkM5NS40MDE0IDI0LjYwOTQgOTUuMTAwNiAyNC42NDM2IDk0Ljc1ODggMjQuNjQzNlpNOTkuODM3OSAyNC42NDM2Qzk3LjcwNTEgMjQuNjQzNiA5Ni4zMzExIDIzLjIyMTcgOTYuMzMxMSAyMC44NzdWMjAuODYzM0M5Ni4zMzExIDE4LjUzOTEgOTcuNzI1NiAxNy4xMDM1IDk5LjgzMTEgMTcuMTAzNUMxMDEuOTQzIDE3LjEwMzUgMTAzLjM0NSAxOC41MjU0IDEwMy4zNDUgMjAuODYzM1YyMC44NzdDMTAzLjM0NSAyMy4yMjg1IDEwMS45NjQgMjQuNjQzNiA5OS44Mzc5IDI0LjY0MzZaTTk5Ljg0NDcgMjMuMjY5NUMxMDAuOTE4IDIzLjI2OTUgMTAxLjYwOCAyMi4zOTQ1IDEwMS42MDggMjAuODc3VjIwLjg2MzNDMTAxLjYwOCAxOS4zNTI1IDEwMC45MTEgMTguNDg0NCA5OS44MzExIDE4LjQ4NDRDOTguNzcxNSAxOC40ODQ0IDk4LjA2NzQgMTkuMzU5NCA5OC4wNjc0IDIwLjg2MzNWMjAuODc3Qzk4LjA2NzQgMjIuNDAxNCA5OC43NTc4IDIzLjI2OTUgOTkuODQ0NyAyMy4yNjk1Wk0xMTEuNzA1IDI0LjY3MDlDMTA4Ljg2OCAyNC42NzA5IDEwNy4wNzcgMjIuNzE1OCAxMDcuMDc3IDE5LjU2NDVWMTkuNTU3NkMxMDcuMDc3IDE2LjQwNjIgMTA4Ljg3NSAxNC40NjQ4IDExMS43MDUgMTQuNDY0OEMxMTMuOTc1IDE0LjQ2NDggMTE1LjY0MyAxNS44Nzk5IDExNS45MDIgMTcuODg5NkwxMTUuOTA5IDE3Ljk1OEgxMTQuMThMMTE0LjE0NiAxNy44MjgxQzExMy44NTggMTYuNzAwMiAxMTIuOTkgMTUuOTk2MSAxMTEuNzA1IDE1Ljk5NjFDMTA5Ljk4MiAxNS45OTYxIDEwOC44ODIgMTcuMzcwMSAxMDguODgyIDE5LjU1NzZWMTkuNTY0NUMxMDguODgyIDIxLjc1ODggMTA5Ljk4OSAyMy4xMzk2IDExMS43MDUgMjMuMTM5NkMxMTIuOTYzIDIzLjEzOTYgMTEzLjg0NSAyMi40NjI5IDExNC4xNjYgMjEuMjQ2MUwxMTQuMTg3IDIxLjE3NzdIMTE1LjkxNkwxMTUuOTAyIDIxLjI0NjFDMTE1LjY0OSAyMy4yNjk1IDExMy45NzUgMjQuNjcwOSAxMTEuNzA1IDI0LjY3MDlaTTExNy4xMzMgMjQuNVYxNC42MzU3SDExOC44MzVWMjQuNUgxMTcuMTMzWk0xMjMuNDkgMjQuNjQzNkMxMjEuMzU3IDI0LjY0MzYgMTE5Ljk4MyAyMy4yMjE3IDExOS45ODMgMjAuODc3VjIwLjg2MzNDMTE5Ljk4MyAxOC41MzkxIDEyMS4zNzggMTcuMTAzNSAxMjMuNDgzIDE3LjEwMzVDMTI1LjU5NiAxNy4xMDM1IDEyNi45OTcgMTguNTI1NCAxMjYuOTk3IDIwLjg2MzNWMjAuODc3QzEyNi45OTcgMjMuMjI4NSAxMjUuNjE2IDI0LjY0MzYgMTIzLjQ5IDI0LjY0MzZaTTEyMy40OTcgMjMuMjY5NUMxMjQuNTcgMjMuMjY5NSAxMjUuMjYxIDIyLjM5NDUgMTI1LjI2MSAyMC44NzdWMjAuODYzM0MxMjUuMjYxIDE5LjM1MjUgMTI0LjU2MyAxOC40ODQ0IDEyMy40ODMgMTguNDg0NEMxMjIuNDI0IDE4LjQ4NDQgMTIxLjcyIDE5LjM1OTQgMTIxLjcyIDIwLjg2MzNWMjAuODc3QzEyMS43MiAyMi40MDE0IDEyMi40MSAyMy4yNjk1IDEyMy40OTcgMjMuMjY5NVpNMTMwLjU1OSAyNC42NDM2QzEyOC45NjYgMjQuNjQzNiAxMjguMDU3IDIzLjYxODIgMTI4LjA1NyAyMS45MzY1VjE3LjI1MzlIMTI5Ljc1OVYyMS42MDE2QzEyOS43NTkgMjIuNjI3IDEzMC4yMzcgMjMuMjA4IDEzMS4yMDggMjMuMjA4QzEzMi4xODYgMjMuMjA4IDEzMi44MDggMjIuNTAzOSAxMzIuODA4IDIxLjQ1MTJWMTcuMjUzOUgxMzQuNTFWMjQuNUgxMzIuODA4VjIzLjM2NTJIMTMyLjc3M0MxMzIuMzk3IDI0LjEzNzcgMTMxLjY1MiAyNC42NDM2IDEzMC41NTkgMjQuNjQzNlpNMTM4LjYwNCAyNC42NDM2QzEzNi43NzIgMjQuNjQzNiAxMzUuNjEgMjMuMjA4IDEzNS42MSAyMC44NzdWMjAuODcwMUMxMzUuNjEgMTguNTMyMiAxMzYuNzc5IDE3LjEwMzUgMTM4LjU5OCAxNy4xMDM1QzEzOS42MjMgMTcuMTAzNSAxNDAuNDUgMTcuNjI5OSAxNDAuODYgMTguNDk4SDE0MC45MDFWMTQuNjM1N0gxNDIuNjA0VjI0LjVIMTQwLjkwMVYyMy4yNjk1SDE0MC44NkMxNDAuNDUgMjQuMTI0IDEzOS42NSAyNC42NDM2IDEzOC42MDQgMjQuNjQzNlpNMTM5LjExNyAyMy4yMDhDMTQwLjE3IDIzLjIwOCAxNDAuOTAxIDIyLjI5ODggMTQwLjkwMSAyMC44NzdWMjAuODcwMUMxNDAuOTAxIDE5LjQ1NTEgMTQwLjE2MyAxOC41MzkxIDEzOS4xMTcgMTguNTM5MUMxMzguMDMgMTguNTM5MSAxMzcuMzQ3IDE5LjQyNzcgMTM3LjM0NyAyMC44NzAxVjIwLjg3N0MxMzcuMzQ3IDIyLjMxOTMgMTM4LjAyMyAyMy4yMDggMTM5LjExNyAyMy4yMDhaTTE0NC41MDQgMjQuNVYxOC41NjY0SDE0My41MTNWMTcuMjUzOUgxNDQuNTA0VjE2LjU2MzVDMTQ0LjUwNCAxNS4xNDg0IDE0NS4xNzQgMTQuNDkyMiAxNDYuNzQ2IDE0LjQ5MjJDMTQ3LjA4MSAxNC40OTIyIDE0Ny40NDMgMTQuNTE5NSAxNDcuNjU1IDE0LjU2MDVWMTUuNzVDMTQ3LjUxOSAxNS43Mjk1IDE0Ny4zMjcgMTUuNzE1OCAxNDcuMTQzIDE1LjcxNThDMTQ2LjQ3OSAxNS43MTU4IDE0Ni4xNzIgMTYuMDIzNCAxNDYuMTcyIDE2LjYxMTNWMTcuMjUzOUgxNDcuNjI4VjE4LjU2NjRIMTQ2LjIwNlYyNC41SDE0NC41MDRaTTE0OC43OTcgMjQuNVYxNC42MzU3SDE1MC40OTlWMjQuNUgxNDguNzk3Wk0xNTQuMDg4IDI0LjYyM0MxNTIuNjM5IDI0LjYyMyAxNTEuNjYxIDIzLjcyNzUgMTUxLjY2MSAyMi40MzU1VjIyLjQyMTlDMTUxLjY2MSAyMS4xMzY3IDE1Mi42NTkgMjAuMzY0MyAxNTQuNDE2IDIwLjI1NDlMMTU2LjMxIDIwLjEzODdWMTkuNjM5NkMxNTYuMzEgMTguOTA4MiAxNTUuODMxIDE4LjQ2MzkgMTU0Ljk3IDE4LjQ2MzlDMTU0LjE2MyAxOC40NjM5IDE1My42NzEgMTguODM5OCAxNTMuNTYyIDE5LjM3M0wxNTMuNTQ4IDE5LjQzNDZIMTUxLjk2OUwxNTEuOTc2IDE5LjM1MjVDMTUyLjA3OCAxOC4wNjc0IDE1My4xOTIgMTcuMTAzNSAxNTUuMDMxIDE3LjEwMzVDMTU2Ljg0MyAxNy4xMDM1IDE1OC4wMTIgMTguMDYwNSAxNTguMDEyIDE5LjUxNjZWMjQuNUgxNTYuMzFWMjMuMzg1N0gxNTYuMjY5QzE1NS44NTIgMjQuMTQ0NSAxNTUuMDQ1IDI0LjYyMyAxNTQuMDg4IDI0LjYyM1pNMTUzLjM1NiAyMi4zNjcyQzE1My4zNTYgMjIuOTYxOSAxNTMuODQ5IDIzLjMyNDIgMTU0LjU5NCAyMy4zMjQyQzE1NS41NzEgMjMuMzI0MiAxNTYuMzEgMjIuNjc0OCAxNTYuMzEgMjEuODEzNVYyMS4yNjY2TDE1NC42NTUgMjEuMzY5MUMxNTMuODE0IDIxLjQyMzggMTUzLjM1NiAyMS43ODYxIDE1My4zNTYgMjIuMzYwNFYyMi4zNjcyWk0xNTkuMzg2IDI0LjVWMTcuMjUzOUgxNjEuMDRWMTguNDYzOUgxNjEuMDc0QzE2MS4yOTMgMTcuNjE2MiAxNjEuOTI5IDE3LjEwMzUgMTYyLjc4MyAxNy4xMDM1QzE2Mi45OTUgMTcuMTAzNSAxNjMuMTkzIDE3LjEzNzcgMTYzLjMyMyAxNy4xNzE5VjE4LjcxQzE2My4xOCAxOC42NTUzIDE2Mi45MiAxOC42MTQzIDE2Mi42MzMgMTguNjE0M0MxNjEuNjY5IDE4LjYxNDMgMTYxLjA4OCAxOS4yMzYzIDE2MS4wODggMjAuMjU0OVYyNC41SDE1OS4zODZaTTE2Ny4xMSAyNC42NDM2QzE2NC45MzcgMjQuNjQzNiAxNjMuNjI0IDIzLjIwMTIgMTYzLjYyNCAyMC44OTc1VjIwLjg5MDZDMTYzLjYyNCAxOC42MDc0IDE2NC45NTcgMTcuMTAzNSAxNjcuMDI4IDE3LjEwMzVDMTY5LjEgMTcuMTAzNSAxNzAuMzg1IDE4LjU1OTYgMTcwLjM4NSAyMC43NDcxVjIxLjI5MzlIMTY1LjMxMkMxNjUuMzQgMjIuNTY1NCAxNjYuMDM3IDIzLjMxNzQgMTY3LjE0NSAyMy4zMTc0QzE2Ny45OTIgMjMuMzE3NCAxNjguNTQ2IDIyLjg2NjIgMTY4LjcxIDIyLjM4MDlMMTY4LjcyNCAyMi4zMzNIMTcwLjMxNkwxNzAuMjk2IDIyLjQwODJDMTcwLjA3IDIzLjUyMjUgMTY5LjAwNCAyNC42NDM2IDE2Ny4xMSAyNC42NDM2Wk0xNjcuMDQ5IDE4LjQzNjVDMTY2LjE0NiAxOC40MzY1IDE2NS40NyAxOS4wNDQ5IDE2NS4zMzMgMjAuMTU5MkgxNjguNzNDMTY4LjYwNyAxOS4wMTA3IDE2Ny45NTEgMTguNDM2NSAxNjcuMDQ5IDE4LjQzNjVaIgogICAgZmlsbD0idXJsKCNwYWludDJfbGluZWFyXzI2MV81ODU5KSIgLz4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8yNjFfNTg1OSIgeDE9IjE0LjI5MiIgeTE9IjEyLjkxMDgiIHgyPSIxMy4yMTc1IiB5Mj0iMjMuNDQ4OCIKICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjRkJBRDQxIiAvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNGRjY2MzMiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDFfbGluZWFyXzI2MV81ODU5IiB4MT0iMzAuMTM3MSIgeTE9IjE4LjEzMDIiIHgyPSIyOS4yNDU4IiB5Mj0iMjQuMDE3OCIKICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjRkJBRDQxIiAvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNGRjY2MzMiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDJfbGluZWFyXzI2MV81ODU5IiB4MT0iNDQuNTMwMyIgeTE9IjI1LjMzMzMiIHgyPSIxMzkuOTA3IiB5Mj0iNzguMDcxMyIKICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjRkJBRDQxIiAvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNGRjY2MzMiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KPC9zdmc+)](https://deploy.workers.cloudflare.com/?url=https://github.com/DZBuild-com/dzbuild-app-starter/tree/main/cloudflare-basic)

إن كنت تستضيف التطبيق على خادمك بدل ذلك، فمثال `Node.js` في [المستودع](https://github.com/DZBuild-com/dzbuild-app-starter) نفسه يتبع المسار نفسه دون أي اعتماديات ومع اختبارات تعمل دون اتصال. املأ متغيرات البيئة في `.env.example` من منصة المطورين.

## 1. سجّل التطبيق[​](#1-سجّل-التطبيق "رابط مباشر إلى 1. سجّل التطبيق")

افتح منصة المطورين في `https://dzbuild.com/dashboard/developer` واختر **تطبيق جديد** (`/dashboard/developer/apps/new`). املأ النموذج:

| الحقل                   | ما تُدخله                                                                                                                                                        |
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| الاسم                   | اسم التطبيق الذي يراه التجار في شاشة الموافقة.                                                                                                                   |
| اسم المطور              | اسمك أو اسم شركتك، ويظهر في شاشة الموافقة.                                                                                                                       |
| الأوصاف                 | وصف واحد بكل لغة: الإنجليزية والعربية والفرنسية.                                                                                                                 |
| الموقع                  | موقع تطبيقك، بـ `https` فقط. يفتح زر **تثبيت** في صفحة الإضافات لدى التاجر هذا العنوان، أو رابط الفتح إن كان فارغًا، لذا يجب أن يقود إلى مسار التثبيت في تطبيقك. |
| بريد الدعم              | العنوان الذي يراسله التجار لطلب المساعدة.                                                                                                                        |
| رابط الفتح              | صفحة `https` تُفتح عندما يضغط التاجر على **فتح** في تطبيقك.                                                                                                      |
| روابط إعادة التوجيه     | من رابط واحد إلى خمسة، مطابقة حرفياً. لا ترسل `DZBuild` رمز التفويض إلا إليها.                                                                                   |
| الصلاحيات               | الأذونات التي يحق لتطبيقك طلبها. راجع [الصلاحيات](https://dzbuild.dev/ar/ar/scopes.md).                                                                          |
| أدنى باقة               | أدنى خطة متجر يمكنها استعمال تطبيقك. اتركها على `Free` لتسمح لكل المتاجر.                                                                                        |
| رابط `webhook` والأحداث | اختياري. راجع [إشعارات webhook](https://dzbuild.dev/ar/ar/webhooks.md).                                                                                          |

احفظ التطبيق. تعرض المنصة بعدها ثلاثة بيانات اعتماد:

| البيان        | الصيغة                           | أين يُحفظ                                                                |
| ------------- | -------------------------------- | ------------------------------------------------------------------------ |
| `client_id`   | `dzapp_` يليه 20 حرفاً ست عشرياً | علني. يوضع في رابط التفويض.                                              |
| سرّ العميل    | `dzas_` يليه 48 حرفاً ست عشرياً  | يظهر مرة واحدة. احفظه على خادمك. أنشئ سرّاً جديداً من المنصة إن ضاع منك. |
| مفتاح التوقيع | 64 حرفاً ست عشرياً               | يمكن عرضه في المنصة. يوقّع إشعارات `webhook` ورموز الفتح.                |

التطبيق الجديد مسودة. المسودة لا تعمل إلا على المتاجر التي يملكها حسابك، وهذا ما تحتاجه للتجربة.

## 2. اختر الصلاحيات[​](#2-اختر-الصلاحيات "رابط مباشر إلى 2. اختر الصلاحيات")

سجّل الصلاحيات التي يستعملها تطبيقك فقط. في شاشة الموافقة يرى التاجر سطرًا واحدًا لكل مورد تطلبه. عند التثبيت يمكنك طلب صلاحيات أقل مما سجّلت عبر المعامل `scope`، لكن لا يمكنك طلب أكثر. القائمة الكاملة في صفحة [الصلاحيات](https://dzbuild.dev/ar/ar/scopes.md).

## 3. اضبط روابط إعادة التوجيه[​](#3-اضبط-روابط-إعادة-التوجيه "رابط مباشر إلى 3. اضبط روابط إعادة التوجيه")

تقارن `DZBuild` قيمة `redirect_uri` التي ترسلها بالروابط المسجّلة كسلاسل نصية مطابقة حرفياً. شرطة مائلة في الآخر، أو اختلاف في حالة الأحرف، أو معامل استعلام زائد، كلها تجعل الرابط مختلفاً. الرابط الذي يحتوي على جزء (`#`) يُرفض عند حفظ التطبيق.

إذا لم يطابق `redirect_uri`، تعرض `DZBuild` صفحة خطأ ولا تعيد التوجيه إطلاقاً.

## 4. ثبّت التطبيق على متجرك[​](#4-ثبّت-التطبيق-على-متجرك "رابط مباشر إلى 4. ثبّت التطبيق على متجرك")

أنشئ مُحقِّق `PKCE` (`verifier`) وتحدّيه بطريقة `S256`. يبقى المُحقِّق على خادمك.

```
CODE_VERIFIER=$(openssl rand -hex 32)

CODE_CHALLENGE=$(printf %s "$CODE_VERIFIER" | openssl dgst -sha256 -binary | openssl base64 -A | tr '+/' '-_' | tr -d '=')

STATE=$(openssl rand -hex 16)
```

وجّه متصفحك إلى رابط التفويض. رمّز كل قيمة، والمسافات بين الصلاحيات تصبح `%20`.

```
GET https://dzbuild.com/oauth/apps/authorize?response_type=code&client_id=dzapp_0123456789abcdef0123&redirect_uri=https%3A%2F%2Fapp.example.com%2Fcallback&scope=store%3Aread%20orders%3Aread&state=STATE&code_challenge=CODE_CHALLENGE&code_challenge_method=S256
```

سجّل الدخول إلى `DZBuild` إن طُلب منك. تعرض شاشة الموافقة متاجرك وتميّز التي لا يمكنها تثبيت التطبيق. اختر متجراً ووافق. تعيد `DZBuild` التوجيه إلى رابطك:

```
HTTP/1.1 302 Found

Location: https://app.example.com/callback?code=CODE&state=STATE
```

تأكد أن `state` هي القيمة التي أرسلتها. الرمز صالح 10 دقائق ويُستعمل مرة واحدة.

استبدل الرمز برمز التثبيت. أرسل النموذج من خادمك، لا من المتصفح أبداً.

```
curl -s https://dzbuild.com/oauth/apps/token \

  -d grant_type=authorization_code \

  -d code="$CODE" \

  --data-urlencode redirect_uri=https://app.example.com/callback \

  -d code_verifier="$CODE_VERIFIER" \

  -d client_id="$DZ_CLIENT_ID" \

  -d client_secret="$DZ_CLIENT_SECRET"
```

الرد الناجح يكون هكذا:

```
{

  "access_token": "dzpk_live_0a1b2c3d4e5f67.9f8e7d6c5b4a39281706f5e4d3c2b1a09f8e7d6c5b4a3928",

  "token_type": "Bearer",

  "scope": "store:read orders:read",

  "store_id": 141,

  "install_id": 7,

  "stores": [

    {

      "store_id": 141,

      "store_name": "My test store",

      "install_id": 7,

      "access_token": "dzpk_live_0a1b2c3d4e5f67.9f8e7d6c5b4a39281706f5e4d3c2b1a09f8e7d6c5b4a3928"

    }

  ]

}
```

احفظ كل `access_token` مع `store_id` و`install_id` الخاصين به. لا يوجد `expires_in` ولا رمز تحديث: يعمل الرمز إلى أن يزيل التاجر تطبيقك. تسرد صفحة [OAuth](https://dzbuild.dev/ar/ar/oauth.md) كل خطأ قد يعيده هذا الطلب.

## 5. نفّذ أول طلب[​](#5-نفّذ-أول-طلب "رابط مباشر إلى 5. نفّذ أول طلب")

استدعِ `GET /v1/whoami` برمز التثبيت. لا يحتاج أي صلاحية، لذا يعمل مع كل تثبيت.

```
curl -s https://api.dzbuild.app/v1/whoami \

  -H "Authorization: Bearer $DZ_TOKEN"
```

```
{

  "data": {

    "key_id": "dzpk_live_0a1b2c3d4e5f67",

    "store_id": 141,

    "type": "platform",

    "rate_limit_tier": "enterprise",

    "pilot": true,

    "scopes": ["store:read", "orders:read"],

    "app": {

      "app_id": 3,

      "client_id": "dzapp_0123456789abcdef0123",

      "install_id": 7

    }

  },

  "meta": {

    "request_id": "5f2c9a0b1d3e4f60",

    "api_version": "v1"

  }

}
```

## 6. اقرأ كائن التطبيق[​](#6-اقرأ-كائن-التطبيق "رابط مباشر إلى 6. اقرأ كائن التطبيق")

لا يظهر الكائن `app` إلا عندما ينتمي الرمز إلى تثبيت تطبيق. يخبر خادمك بالتطبيق والتثبيت اللذين نفّذا الطلب.

| الحقل        | المعنى                                                                                                  |
| ------------ | ------------------------------------------------------------------------------------------------------- |
| `app_id`     | المعرّف الرقمي لتطبيقك على `DZBuild`.                                                                   |
| `client_id`  | المعرّف العلني لتطبيقك. قارنه بمعرّفك لترفض رموزاً صدرت لتطبيق آخر.                                     |
| `install_id` | التثبيت الذي ينتمي إليه هذا الرمز. يبقى كما هو إذا أزال التاجر تطبيقك ثم ثبّته من جديد على المتجر نفسه. |

قيمة `rate_limit_tier` هي `enterprise` لكل رمز تثبيت، مهما كانت خطة المتجر. حصتك الحقيقية هي الحدّ الخاص بكل تثبيت، الموضّح في [المفاهيم الأساسية](https://dzbuild.dev/ar/ar/concepts.md).

## الخطوات التالية[​](#الخطوات-التالية "رابط مباشر إلى الخطوات التالية")

* اقرأ [المفاهيم الأساسية](https://dzbuild.dev/ar/ar/concepts.md) قبل أن تبني على رموز التثبيت.
* أضف [التحقق من إشعارات webhook](https://dzbuild.dev/ar/ar/webhooks.md) إذا سجّلت رابط `webhook`.
* اقرأ [إرشادات المراجعة](https://dzbuild.dev/ar/ar/review-guidelines.md)، ثم أرسل التطبيق للمراجعة من المنصة.
