{"id":22249,"date":"2026-04-10T08:20:43","date_gmt":"2026-04-10T08:20:43","guid":{"rendered":"https:\/\/umang.pk\/2026\/04\/10\/next-js%d8%8c-express%d8%8c-%d8%a7%d9%88%d8%b1-stripe-connect-%da%a9%d8%a7-%d8%a7%d8%b3%d8%aa%d8%b9%d9%85%d8%a7%d9%84-%da%a9%d8%b1%d8%aa%db%92-%db%81%d9%88%d8%a6%db%92-%d8%a7%db%8c%da%a9-%d8%a2%d9%86\/"},"modified":"2026-04-10T08:20:43","modified_gmt":"2026-04-10T08:20:43","slug":"next-js%d8%8c-express%d8%8c-%d8%a7%d9%88%d8%b1-stripe-connect-%da%a9%d8%a7-%d8%a7%d8%b3%d8%aa%d8%b9%d9%85%d8%a7%d9%84-%da%a9%d8%b1%d8%aa%db%92-%db%81%d9%88%d8%a6%db%92-%d8%a7%db%8c%da%a9-%d8%a2%d9%86","status":"publish","type":"post","link":"https:\/\/umang.pk\/en_us\/2026\/04\/10\/next-js%d8%8c-express%d8%8c-%d8%a7%d9%88%d8%b1-stripe-connect-%da%a9%d8%a7-%d8%a7%d8%b3%d8%aa%d8%b9%d9%85%d8%a7%d9%84-%da%a9%d8%b1%d8%aa%db%92-%db%81%d9%88%d8%a6%db%92-%d8%a7%db%8c%da%a9-%d8%a2%d9%86\/","title":{"rendered":"Next.js\u060c Express\u060c \u0627\u0648\u0631 Stripe Connect \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u06cc\u06a9 \u0622\u0646 \u0644\u0627\u0626\u0646 \u0645\u0627\u0631\u06a9\u06cc\u0679 \u067e\u0644\u06cc\u0633 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4"},"content":{"rendered":"\n<div id=\"\">\n<p>\u06a9\u06cc\u0627 \u0622\u067e \u0646\u06d2 \u06a9\u0628\u06be\u06cc \u0633\u0648\u0686\u0627 \u06c1\u06d2 \u06a9\u06c1 Etsy\u060c Uber\u060c \u06cc\u0627 Teachable \u062c\u06cc\u0633\u06d2 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06c1\u0632\u0627\u0631\u0648\u06ba \u0641\u0631\u0648\u062e\u062a \u06a9\u0646\u0646\u062f\u06af\u0627\u0646 \u06a9\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0648\u06ba \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0633\u0646\u0628\u06be\u0627\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u061f \u062c\u0648\u0627\u0628 \u06c1\u06d2 <strong>\u0645\u0644\u0679\u06cc \u0648\u06cc\u0646\u0688\u0631 \u0645\u0627\u0631\u06a9\u06cc\u0679 \u067e\u0644\u06cc\u0633<\/strong>: \u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u06cc \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646 \u06c1\u06d2 \u062c\u0648 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u06a9\u0648 \u0633\u0627\u0626\u0646 \u0627\u067e \u06a9\u0631\u0646\u06d2\u060c \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u06cc\u0627 \u062e\u062f\u0645\u0627\u062a \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0628\u0646\u0627\u0646\u06d2 \u0627\u0648\u0631 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0633\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0648\u0635\u0648\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0679\u0627\u0626\u067e \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0634\u0631\u0648\u0639 \u0633\u06d2 \u0627\u06cc\u06a9 \u0645\u06a9\u0645\u0644 \u0628\u0627\u0632\u0627\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0622\u067e \u067e\u0679\u06cc \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u06cc\u0679\u0644\u0627\u06af \u0627\u0648\u0631 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0627\u0646\u062c\u0646 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0635\u0644\u06cc \u0645\u0627\u0631\u06a9\u06cc\u0679 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2: \u067e\u0679\u06cc \u067e\u0631\u0648\u0688\u06a9\u0679\u060c \u0642\u06cc\u0645\u062a\u0648\u06ba \u06a9\u0627 \u062a\u0639\u06cc\u0646\u060c \u0627\u0648\u0631 \u06a9\u0633\u0679\u0645\u0631 \u0688\u06cc\u0679\u0627 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u062a\u062c\u0631\u0628\u06d2 \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1\u0627\u06ba \u06a9\u06cc\u0627 \u0628\u0646\u0627\u0646\u0627 \u06c1\u06d2:<\/p>\n<ol>\n<li>\n<p>\u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0627 \u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af \u0641\u0644\u0648 \u062c\u06c1\u0627\u06ba \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u06cc\u06a9 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0633\u06d2 \u062c\u0691\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u0631\u0648\u0688\u06a9\u0679 \u0645\u06cc\u0646\u062c\u0645\u0646\u0679 \u0633\u0633\u0679\u0645 \u062c\u0648 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u067e\u0679\u06cc \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u06a9\u0648 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0641\u06c1\u0631\u0633\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627 \u0628\u06c1\u0627\u0624 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u06a9\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0648\u06ba \u0627\u0648\u0631 \u0628\u0627\u0631 \u0628\u0627\u0631 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646\u0632 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0633\u067e\u0648\u0631\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u0645\u06cc\u06ba \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0648\u0627\u0642\u0639\u0627\u062a \u0648\u0635\u0648\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0648\u06cc\u0628 \u06c1\u064f\u06a9<\/p>\n<\/li>\n<li>\n<p>\u0628\u0644\u0646\u06af \u067e\u0648\u0631\u0679\u0644 \u062c\u06c1\u0627\u06ba \u0635\u0627\u0631\u0641\u06cc\u0646 \u0627\u067e\u0646\u06cc \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646\u0632 \u06a9\u0627 \u0646\u0638\u0645 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u06cc\u06a9 \u0645\u06a9\u0645\u0644 \u0627\u0633\u0679\u0648\u0631 \u062c\u06c1\u0627\u06ba \u06af\u0627\u06c1\u06a9 \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u06a9\u0648 \u0628\u0631\u0627\u0624\u0632 \u0627\u0648\u0631 \u062e\u0631\u06cc\u062f \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0622\u067e \u0622\u062e\u0631 \u0645\u06cc\u06ba \u0645\u0646\u0633\u0644\u06a9 GitHub \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0633\u06d2 \u0645\u06a9\u0645\u0644 \u0633\u0648\u0631\u0633 \u06a9\u0648\u0688 \u0628\u06be\u06cc \u062d\u0627\u0635\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-table-of-contents\"><strong>\u0627\u0646\u0688\u06cc\u06a9\u0633<\/strong><\/h2>\n<h2 id=\"heading-prerequisites\"><strong>\u0634\u0631\u0637\u06cc\u06ba<\/strong><\/h2>\n<p>\u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06cc\u06ba:<\/p>\n<ol>\n<li>\n<p>\u0622\u067e \u06a9\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u067e\u0631 Node.js (\u0648\u0631\u0698\u0646 18 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0627\u0648\u067e\u0631) \u0627\u0646\u0633\u0679\u0627\u0644 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>React\u060c TypeScript\u060c \u0627\u0648\u0631 REST API \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u062a\u0641\u06c1\u06cc\u0645<\/p>\n<\/li>\n<li>\n<p>\u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0627\u06a9\u0627\u0624\u0646\u0679 (stripe.com \u067e\u0631 \u0645\u0641\u062a \u0633\u0627\u0626\u0646 \u0627\u067e \u06a9\u0631\u06cc\u06ba)<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0648\u0688 \u0627\u06cc\u0688\u06cc\u0679\u0631 \u062c\u06cc\u0633\u06d2 VS \u06a9\u0648\u0688<\/p>\n<\/li>\n<\/ol>\n<p>\u062a\u0645 \u06c1\u0648 <strong>~ \u0646\u06c1\u06cc\u06ba<\/strong> \u0627\u0633 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u067e\u0679\u06cc \u0622\u067e \u06a9\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0679\u060c \u0642\u06cc\u0645\u062a\u0648\u06ba \u0627\u0648\u0631 \u06a9\u0633\u0679\u0645\u0631 \u06a9\u06cc \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u0648 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0648 \u0633\u0627\u062f\u06c1 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631\u06cc \u0645\u0646\u0688\u06cc\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u06a9\u06cc \u0639\u06a9\u0627\u0633\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0646 \u0645\u06cc\u06ba \u06cc\u06c1 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-what-is-stripe-connect\"><strong>\u0627\u06cc\u06a9 \u062f\u06be\u0627\u0631\u06cc \u062f\u0627\u0631 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u06cc\u0627 \u06c1\u06d2\u061f<\/strong><\/h2>\n<p>\u0627\u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u0646\u06cc\u06a9\u0679 APIs \u06a9\u0627 \u0627\u06cc\u06a9 \u0633\u06cc\u0679 \u06c1\u06d2 \u062c\u0633\u06d2 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645\u0632 \u0627\u0648\u0631 \u0628\u0627\u0632\u0627\u0631\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0645\u0631\u0686\u0646\u0679\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2 (\u0633\u0679\u0631\u0627\u0626\u067e \u0627\u0633\u06d2 &quot;\u0644\u0646\u06a9\u0688 \u0627\u06a9\u0627\u0624\u0646\u0679&#8221; \u06a9\u06c1\u062a\u06cc \u06c1\u06d2)\u060c \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0648\u06ba \u06a9\u06d2 \u0631\u0627\u0633\u062a\u06d2\u060c \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u0641\u06cc\u0633 \u062d\u0627\u0635\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0633 \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644 \u0645\u06cc\u06ba\u060c \u0622\u067e Stripe&#8217;s \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0633\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2\u06d4 <strong>V2 \u0627\u06a9\u0627\u0624\u0646\u0679 API<\/strong>\u0644\u0646\u06a9 \u06a9\u0631\u062f\u06c1 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u0627 \u06cc\u06c1 \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u062a\u062c\u0648\u06cc\u0632 \u06a9\u0631\u062f\u06c1 \u0637\u0631\u06cc\u0642\u06c1 \u06c1\u06d2\u06d4 V2 API \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2\u060c \u0622\u067e \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u06c1\u0631 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06cc\u0627 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 (\u06a9\u0627\u0631\u0688 \u06a9\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0642\u0628\u0648\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0627\u06ba \u0648\u0635\u0648\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2) \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u0634\u062f\u06c1 \u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af \u0641\u0644\u0648 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062a\u0645\u0627\u0645 \u062a\u0639\u0645\u06cc\u0644 \u0627\u0648\u0631 \u0634\u0646\u0627\u062e\u062a \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627 \u0628\u06c1\u0627\u0624 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u06c1\u06d2:<\/p>\n<ol>\n<li>\n<p>\u0635\u0627\u0631\u0641 \u0627\u06cc\u06a9 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u0627\u0632\u0627\u0631 \u0645\u06cc\u06ba \u0686\u06cc\u06a9 \u0622\u0624\u0679 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0622\u067e \u06a9\u0627 \u0633\u0631\u0648\u0631 \u0645\u0631\u0686\u0646\u0679 \u06a9\u06d2 \u0644\u0646\u06a9 \u06a9\u0631\u062f\u06c1 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0686\u06cc\u06a9 \u0622\u0624\u0679 \u0633\u06cc\u0634\u0646 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0635\u0627\u0631\u0641\u06cc\u0646 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u06d2 \u06c1\u0648\u0633\u0679\u0646\u06af \u0686\u06cc\u06a9 \u0622\u0624\u0679 \u067e\u06cc\u062c \u067e\u0631 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u0679\u06cc \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0622\u067e \u06a9\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0648\u06ba \u06a9\u0648 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u06a9\u0648 \u0627\u0646 \u06a9\u0627 \u062d\u0635\u06c1 \u0645\u0644\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0641\u06cc\u0633 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0633\u0631\u0648\u0631 \u06a9\u0648 \u0648\u06cc\u0628 \u06c1\u06a9 \u0627\u06cc\u0648\u0646\u0679 \u0628\u06be\u06cc\u062c\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0627\u067e\u0646\u06cc \u06a9\u0645\u0627\u0626\u06cc \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u067e\u0646\u06d2 \u0633\u0679\u0631\u0627\u0626\u067e \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0633\u06d2 \u0631\u0642\u0648\u0645 \u0646\u06a9\u0627\u0644 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"heading-how-to-set-up-the-project\"><strong>\u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06cc\u0633\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/strong><\/h2>\n<p>\u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0627\u0648\u0631 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0639\u0644\u06cc\u062d\u062f\u06c1 \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679\u0631\u06cc\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0641\u0648\u0644\u0688\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-shell\">mkdir marketplace && cd marketplace\nmkdir server client\n<\/code><\/pre>\n<h2 id=\"heading-how-to-set-up-the-backend\"><strong>\u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/strong><\/h2>\n<p>\u0627\u067e\u0646\u06cc \u0633\u0631\u0648\u0631 \u0688\u0627\u0626\u0631\u06a9\u0679\u0631\u06cc \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0679\u0627\u0626\u067e \u0627\u0633\u06a9\u0631\u067e\u0679 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-shell\">cd server\nnpm init -y\nnpm install express cors dotenv stripe\nnpm install -D typescript ts-node @types\/express @types\/cors @types\/node\nnpx tsc --init\nmkdir src\n<\/code><\/pre>\n<p>tsconfig.json \u06a9\u06be\u0648\u0644\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062f\u0631\u062c \u0630\u06cc\u0644 \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-json\">{\n  \"compilerOptions\": {\n    \"target\": \"ES2020\",\n    \"module\": \"commonjs\",\n    \"lib\": [\"ES2020\"],\n    \"outDir\": \".\/dist\",\n    \"rootDir\": \".\/src\",\n    \"strict\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"resolveJsonModule\": true\n  },\n  \"include\": [\"src\/**\/*\"]\n}\n<\/code><\/pre>\n<p>\u067e\u06be\u0631 \u0627\u067e\u0646\u06d2 \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u0631\u0648\u0679 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 .env \u0641\u0627\u0626\u0644 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">STRIPE_SECRET_KEY=sk_test_your_key_here\nDOMAIN=http:\/\/localhost:3000\n<\/code><\/pre>\n<p>\u0622\u067e \u0688\u06cc\u0648\u0644\u067e\u0631 > API \u06a9\u06cc\u0632 \u06a9\u06d2 \u062a\u062d\u062a \u0627\u067e\u0646\u06d2 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0645\u06cc\u06ba \u0627\u067e\u0646\u06cc \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0679\u06cc\u0633\u0679 \u06a9\u06cc \u062e\u0641\u06cc\u06c1 \u06a9\u0644\u06cc\u062f \u062a\u0644\u0627\u0634 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 DOMAIN \u0645\u062a\u063a\u06cc\u0631 \u0633\u0631\u0648\u0631 \u06a9\u0648 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0628\u0639\u062f \u0635\u0627\u0631\u0641 \u06a9\u0648 \u06a9\u06c1\u0627\u06ba \u0631\u06cc \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 package.json \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-json\">{\n\u00a0 \"scripts\": {\n    \"dev\": \"ts-node src\/index.ts\",\n    \"build\": \"tsc\",\n    \"start\": \"node dist\/index.js\"\n  }\n}\n<\/code><\/pre>\n<h2 id=\"heading-how-to-build-the-express-backend\"><strong>\u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/strong><\/h2>\n<p>\u0627\u06cc\u06a9 src\/index.ts \u0641\u0627\u0626\u0644 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u06cc\u06c1 \u067e\u0648\u0631\u0627 \u067e\u0633 \u0645\u0646\u0638\u0631 \u06c1\u0648\u06af\u0627\u06d4 \u0622\u0626\u06cc\u06d2 \u0633\u06cc\u0679 \u0627\u067e \u0627\u0648\u0631 \u0627\u0645\u067e\u0648\u0631\u0679 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">import express, { Request, Response, Router } from 'express';\nimport cors from 'cors';\nimport dotenv from 'dotenv';\nimport Stripe from 'stripe';\n\ndotenv.config();\n\nconst app = express();\nconst router = Router();\nconst stripe = new Stripe(process.env.STRIPE_SECRET_KEY as string);\n\napp.use(cors({ origin: process.env.DOMAIN }));\napp.use(express.static('public'));\n<\/code><\/pre>\n<p>\u06a9\u0648\u0626\u06cc \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0644\u0627\u0626\u0646\u0679 \u062f\u0631\u0622\u0645\u062f \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u067e\u0679\u06cc \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u062a\u06c1\u06c1 \u06c1\u06d2\u06d4 \u062a\u0645\u0627\u0645 \u067e\u0631\u0648\u0688\u06a9\u0679\u0633\u060c \u0642\u06cc\u0645\u062a\u06cc\u06ba\u060c \u0635\u0627\u0631\u0641\u06cc\u0646 \u0627\u0648\u0631 \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u067e\u0631 \u0631\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9\u0633\u067e\u0631\u06cc\u0633 \u0633\u0631\u0648\u0631 \u0627\u06cc\u06a9 \u067e\u062a\u0644\u06cc \u0622\u0631\u06a9\u06cc\u0633\u0679\u0631\u06cc\u0634\u0646 \u067e\u0631\u062a \u06c1\u06d2 \u062c\u0648 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u06a9\u06cc \u062c\u0627\u0646\u0628 \u0633\u06d2 \u0627\u0633\u0679\u0631\u0627\u0626\u067e API \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u0645 \u0628\u06be\u06cc \u0686\u0691\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>express.static(\"public\")<\/code> \u0627\u06af\u0631 \u0636\u0631\u0648\u0631\u062a \u06c1\u0648 \u062a\u0648 \u0622\u067e \u0628\u0639\u062f \u0645\u06cc\u06ba \u062c\u0627\u0645\u062f \u0641\u0627\u0626\u0644\u06cc\u06ba \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0648\u06cc\u0628 \u06c1\u064f\u06a9 \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679 \u06a9\u0648 \u062e\u0627\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0627 \u062d\u0635\u06c1 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u06c1\u0645 \u0627\u0633\u06d2 JSON \u067e\u0627\u0631\u0633\u0631 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4 \u0627\u0628 \u0627\u0633\u06d2 \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-how-to-handle-merchant-onboarding\"><strong>\u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06cc \u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/h2>\n<p>\u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0648 \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u067e\u0631 \u0627\u06cc\u06a9 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0628\u0646\u0627\u0646\u0627 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0633\u06d2 \u062c\u0648\u0691\u0646\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0645\u06cc\u06ba \u062f\u0648 \u0645\u0631\u0627\u062d\u0644 \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba: \u0627\u06cc\u06a9 \u0645\u0646\u0633\u0644\u06a9 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0628\u0646\u0627\u0646\u0627 \u0627\u0648\u0631 \u067e\u06be\u0631 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0648 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u06d2 \u06c1\u0648\u0633\u0679\u0646\u06af \u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af \u0641\u0627\u0631\u0645 \u067e\u0631 \u0628\u06be\u06cc\u062c\u0646\u0627\u06d4<\/p>\n<h3 id=\"heading-how-to-create-a-connected-account\">\u0644\u0646\u06a9\u0688 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/h3>\n<p>src\/index.ts \u0645\u06cc\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u0631\u0627\u0633\u062a\u06c1 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-typescript\">\/\/ Type definitions for request bodies\ninterface CreateAccountBody {\n  email: string;\n}\ninterface AccountIdBody {\n  accountId: string;\n}\n\n\/\/ Create a Connected Account using Stripe V2 API\nrouter.post(\n  '\/create-connect-account',\n  async (req: Request<{}, {}, CreateAccountBody>, res: Response) => {\n    try {\n      const account = await stripe.v2.core.accounts.create({\n        display_name: req.body.email,\n        contact_email: req.body.email,\n        dashboard: 'full',\n        defaults: {\n          responsibilities: {\n            fees_collector: 'stripe',\n            losses_collector: 'stripe',\n          },\n        },\n        identity: {\n          country: 'GB',\n          entity_type: 'company',\n        },\n        configuration: {\n          customer: {},\n          merchant: {\n            capabilities: {\n              card_payments: { requested: true },\n            },\n          },\n        },\n      });\n      res.json({ accountId: account.id });\n    } catch (error) {\n      const message = error instanceof Error ? error.message : 'Unknown error';\n      res.status(500).json({ error: message });\n    }\n  },\n);\n<\/code><\/pre>\n<p>\u0622\u0626\u06cc\u06d2 \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u06a9\u0648\u0688 \u06a9\u06cc\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>stripe.v2.core.accounts.create()<\/code> \u06cc\u06c1 \u0637\u0631\u06cc\u0642\u06c1 \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u0644\u0646\u06a9 \u0634\u062f\u06c1 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 Stripe&#8217;s V2 API \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06c1\u0645 \u062a\u0631\u062a\u06cc\u0628 \u06a9\u06d2 \u0627\u062e\u062a\u06cc\u0627\u0631\u0627\u062a \u06c1\u06cc\u06ba:<\/p>\n<ol>\n<li>\n<p><code>dashboard: \"full\"<\/code>    \u062a\u0627\u062c\u0631\u0648\u06ba \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0648\u06c1 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0627\u06ba \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0648\u06ba \u06a9\u0627 \u0646\u0638\u0645 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0646\u0627\u0632\u0639\u0627\u062a \u06a9\u0648 \u0646\u0645\u0679 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>responsibilities<\/code>    \u06cc\u06c1 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u0648 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0648\u0646 \u0641\u06cc\u0633 \u062c\u0645\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0648\u0646 \u06a9\u0633\u06cc \u0646\u0642\u0635\u0627\u0646 \u06a9\u0627 \u0630\u0645\u06c1 \u062f\u0627\u0631 \u06c1\u06d2\u06d4 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 &quot;\u0633\u0679\u0631\u0627\u0626\u067e&#8221; \u067e\u0631 \u0633\u06cc\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u067e\u0679\u06cc \u0627\u0633 \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u06d2 \u06af\u06cc\u060c \u062c\u0648 \u06a9\u06c1 \u0633\u0628 \u0633\u06d2 \u0622\u0633\u0627\u0646 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>identity<\/code>    \u0645\u0644\u06a9 \u0627\u0648\u0631 \u06c1\u0633\u062a\u06cc \u06a9\u06cc \u0642\u0633\u0645 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 &quot;GB&#8221; \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0645\u0644\u06a9 \u06a9\u06d2 \u06a9\u0648\u0688 \u0633\u06d2 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba (\u062c\u06cc\u0633\u06d2 &quot;US&#8221; \u0631\u06cc\u0627\u0633\u062a\u06c1\u0627\u0626\u06d2 \u0645\u062a\u062d\u062f\u06c1 \u06a9\u06d2 \u0644\u06cc\u06d2)\u06d4<\/p>\n<\/li>\n<li>\n<p><code>configuration.merchant.capabilities<\/code>    \u062f\u0631\u062e\u0648\u0627\u0633\u062a <code>card_payments<\/code> \u06cc\u06c1 \u062e\u0635\u0648\u0635\u06cc\u062a \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u06a9\u0648 \u06a9\u0631\u06cc\u0688\u0679 \u06a9\u0627\u0631\u0688 \u06a9\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0642\u0628\u0648\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<h3 id=\"heading-how-to-create-the-onboarding-link\">\u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af \u0644\u0646\u06a9 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/h3>\n<p>\u0627\u06a9\u0627\u0624\u0646\u0679 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0622\u067e \u06a9\u0648 \u062a\u0627\u062c\u0631\u0648\u06ba \u06a9\u0648 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u06d2 \u06c1\u0648\u0633\u0679\u0646\u06af \u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af \u0641\u0627\u0631\u0645 \u067e\u0631 \u0628\u06be\u06cc\u062c\u0646\u0627 \u06c1\u0648\u06af\u0627\u06d4 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0631\u0627\u0633\u062a\u06c1 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-typescript\">\/\/ Create Account Link for onboarding\nrouter.post('\/create-account-link', async (req: Request<{}, {}, AccountIdBody>, res: Response) => {\n  const { accountId } = req.body;\n  try {\n    const accountLink = await stripe.v2.core.accountLinks.create({\n      account: accountId,\n      use_case: {\n        type: 'account_onboarding',\n        account_onboarding: {\n          configurations: ['merchant', 'customer'],\n          refresh_url: `${process.env.DOMAIN}`,\n          return_url: `\\({process.env.DOMAIN}?accountId=\\){accountId}`,\n        },\n      },\n    });\n    res.json({ url: accountLink.url });\n  } catch (error) {\n    const message = error instanceof Error ? error.message : 'Unknown error';\n    res.status(500).json({ error: message });\n  }\n});\n<\/code><\/pre>\n<p>\u06a9\u06c1 <code>accountLinks.create()<\/code> \u06cc\u06c1 \u0637\u0631\u06cc\u0642\u06c1 \u0627\u06cc\u06a9 \u0639\u0627\u0631\u0636\u06cc URL \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0648 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u06d2 \u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af \u0641\u0627\u0631\u0645 \u067e\u0631 \u0644\u06d2 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0641\u0627\u0631\u0645 \u067e\u0631\u060c Stripe \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a\u06cc \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a\u060c \u0628\u06cc\u0646\u06a9 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06cc \u0645\u0639\u0644\u0648\u0645\u0627\u062a\u060c \u0627\u0648\u0631 \u0679\u06cc\u06a9\u0633 \u06a9\u06cc \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u062c\u0645\u0639 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0648 \u062e\u0648\u062f \u0627\u0633 \u0645\u06cc\u06ba \u0633\u06d2 \u06a9\u0686\u06be \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u06c1 <code>return_url<\/code> \u06cc\u06c1 \u0648\u06c1 \u062c\u06af\u06c1 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba Stripe \u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af \u0645\u06a9\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0648 \u0631\u06cc \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba: <code>accountId<\/code> \u06c1\u0645 \u0627\u0633\u06d2 \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u06d2 \u067e\u06cc\u0631\u0627\u0645\u06cc\u0679\u0631 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u06c1\u0645 \u0627\u0633\u06d2 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631 \u06a9\u06d2 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u067e\u0631 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631 \u0633\u06a9\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-how-to-check-account-status\"><strong>\u0627\u067e\u0646\u06d2 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u0627 \u0627\u0633\u0679\u06cc\u0679\u0633 \u06a9\u06cc\u0633\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/h2>\n<p>\u0622\u067e \u06a9\u0648 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2 \u06a9\u06c1 \u062a\u0627\u062c\u0631\u0648\u06ba \u0646\u06d2 \u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af \u0645\u06a9\u0645\u0644 \u06a9\u0631 \u0644\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0627\u06ba \u0642\u0628\u0648\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u06cc\u06ba\u06d4 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0631\u0627\u0633\u062a\u06c1 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-typescript\">\/\/ Get Connected Account Status\nrouter.get(\n  '\/account-status\/:accountId',\n  async (req: Request<{ accountId: string }>, res: Response) => {\n    try {\n      const account = await stripe.v2.core.accounts.retrieve(req.params.accountId, {\n        include: ['requirements', 'configuration.merchant'],\n      });\n      const payoutsEnabled =\n        account.configuration?.merchant?.capabilities?.stripe_balance?.payouts?.status === 'active';\n      const chargesEnabled =\n        account.configuration?.merchant?.capabilities?.card_payments?.status === 'active';\n      const summaryStatus = account.requirements?.summary?.minimum_deadline?.status;\n      const detailsSubmitted = !summaryStatus || summaryStatus === 'eventually_due';\n      res.json({\n        id: account.id,\n        payoutsEnabled,\n        chargesEnabled,\n        detailsSubmitted,\n        requirements: account.requirements?.entries,\n      });\n    } catch (error) {\n      const message = error instanceof Error ? error.message : 'Unknown error';\n      res.status(500).json({ error: message });\n    }\n  },\n);\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0631\u0627\u0633\u062a\u06c1 \u0645\u0646\u0633\u0644\u06a9 \u06a9\u06be\u0627\u062a\u0648\u06ba \u06a9\u06cc \u062a\u0644\u0627\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062a\u06cc\u0646 \u0627\u06c1\u0645 \u062d\u0627\u0644\u062a\u0648\u06ba \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p><code>chargesEnabled<\/code>    \u06cc\u06c1 \u0622\u067e \u06a9\u0648 \u0628\u062a\u0627\u0626\u06d2 \u06af\u0627 \u06a9\u06c1 \u0622\u06cc\u0627 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0642\u0628\u0648\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>payoutsEnabled<\/code>    \u06c1\u0645\u06cc\u06ba \u0628\u062a\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u06a9\u06cc\u0627 \u0622\u067e \u0627\u067e\u0646\u06d2 \u0628\u06cc\u0646\u06a9 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0645\u06cc\u06ba \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u062d\u0627\u0635\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>detailsSubmitted<\/code>    \u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af \u0641\u0627\u0631\u0645 \u0645\u06a9\u0645\u0644 \u06a9\u0631 \u0644\u06cc\u0627 \u06c1\u06d2 \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u0627\u0646 \u062c\u06be\u0646\u0688\u0648\u06ba \u06a9\u0648 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u062f\u06a9\u06be\u0627\u0646\u06d2 \u06cc\u0627 \u0686\u06be\u067e\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-how-to-create-products-through-stripe\"><strong>\u067e\u0679\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u0626\u06cc\u06ba<\/strong><\/h2>\n<p>\u0627\u067e\u0646\u06cc \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u06a9\u0648 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u06cc\u06ba \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0622\u067e \u0627\u0646\u06c1\u06cc\u06ba \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0645\u06cc\u06ba \u0628\u0646\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4 \u06c1\u0631 \u067e\u0631\u0648\u0688\u06a9\u0679 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0645\u06cc\u06ba \u0628\u0646\u0627\u0626\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <code>stripeAccount<\/code> \u06c1\u06cc\u0688\u0631 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06c1\u0631 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0627 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u067e\u0646\u0627 \u0627\u0644\u06af \u0627\u0644\u06af \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u06cc\u0679\u0644\u0627\u06af \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ Type definition for product creation\ninterface CreateProductBody {\n  productName: string;\n  productDescription: string;\n  productPrice: number;\n  accountId: string;\n}\n\/\/ Create a product on the connected account\nrouter.post('\/create-product', async (req: Request<{}, {}, CreateProductBody>, res: Response) => {\n  const { productName, productDescription, productPrice, accountId } = req.body;\n  try {\n    \/\/ Create the product on the connected account\n    const product = await stripe.products.create(\n      {\n        name: productName,\n        description: productDescription,\n      },\n      { stripeAccount: accountId },\n    ); \/\/ Create a price for the product\n    const price = await stripe.prices.create(\n      {\n        product: product.id,\n        unit_amount: productPrice,\n        currency: 'usd',\n      },\n      { stripeAccount: accountId },\n    );\n    res.json({\n      productName,\n      productDescription,\n      productPrice,\n      priceId: price.id,\n    });\n  } catch (error) {\n    const message = error instanceof Error ? error.message : 'Unknown error';\n    res.status(500).json({ error: message });\n  }\n});\n<\/code><\/pre>\n<p>\u062f\u0648 \u067e\u0679\u06cc API \u06a9\u0627\u0644\u06cc\u06ba \u06cc\u06c1\u0627\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 <code>stripe.products.create()<\/code> \u0627\u06cc\u06a9 \u067e\u0631\u0648\u0688\u06a9\u0679 \u0628\u0646\u0627\u0626\u06cc\u06ba (\u0646\u0627\u0645 \u0627\u0648\u0631 \u062a\u0641\u0635\u06cc\u0644)\u06d4 \u067e\u06be\u0631 <code>stripe.prices.create()<\/code> \u0627\u0633 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0642\u06cc\u0645\u062a (\u0631\u0642\u0645 \u0627\u0648\u0631 \u06a9\u0631\u0646\u0633\u06cc) \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u0686\u0648\u0646\u06a9\u06c1 \u0627\u06cc\u06a9 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u06cc \u0645\u062a\u0639\u062f\u062f \u0642\u06cc\u0645\u062a\u06cc\u06ba \u06c1\u0648\u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba (\u062c\u06cc\u0633\u06d2 \u0645\u0627\u06c1\u0627\u0646\u06c1 \u0645\u0646\u0635\u0648\u0628\u06c1\u060c \u0633\u0627\u0644\u0627\u0646\u06c1 \u0645\u0646\u0635\u0648\u0628\u06c1)\u060c \u067e\u0679\u06cc \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u0627\u0648\u0631 \u0642\u06cc\u0645\u062a\u0648\u06ba \u0645\u06cc\u06ba \u0641\u0631\u0642 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u06c1 <code>{ stripeAccount: accountId }<\/code> \u062f\u0648\u0646\u0648\u06ba \u06a9\u0627\u0644\u0648\u06ba \u06a9\u06d2 \u0627\u062e\u062a\u06cc\u0627\u0631\u0627\u062a \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u0648 \u06c1\u062f\u0627\u06cc\u062a \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u0648\u0633\u0627\u0626\u0644 \u0622\u067e \u06a9\u06d2 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06d2 \u0644\u0646\u06a9 \u06a9\u0631\u062f\u06c1 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0645\u06cc\u06ba \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0628\u06c1\u062a \u0627\u06c1\u0645 \u062a\u0641\u0635\u06cc\u0644 \u06c1\u06d2\u06d4 \u0627\u0633 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c \u0622\u067e \u06a9\u06d2 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0645\u06cc\u06ba \u067e\u0631\u0648\u0688\u06a9\u0679\u0633 \u0628\u0646\u0627\u0626\u06d2 \u062c\u0627\u0626\u06cc\u06ba \u06af\u06d2 \u0627\u0648\u0631 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0627\u0646\u06c1\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u06a9\u06be \u0633\u06a9\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<h2 id=\"heading-how-to-fetch-products\"><strong>\u0627\u067e\u0646\u06cc \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/h2>\n<p>\u0627\u06cc\u06a9 \u0627\u06cc\u0633\u0627 \u0631\u0627\u0633\u062a\u06c1 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u0633 \u0645\u06cc\u06ba \u06a9\u0633\u06cc \u0645\u062e\u0635\u0648\u0635 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06cc \u062a\u0645\u0627\u0645 \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u06c1\u0648\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ Fetch products for a specific account\nrouter.get('\/products\/:accountId', async (req: Request<{ accountId: string }>, res: Response) => {\n  const { accountId } = req.params;\n  try {\n    const options: Stripe.RequestOptions = {};\n    if (accountId !== 'platform') {\n      options.stripeAccount = accountId;\n    }\n    const prices = await stripe.prices.list(\n      {\n        expand: ['data.product'],\n        active: true,\n        limit: 100,\n      },\n      options,\n    );\n    const products = prices.data.map((price) => {\n      const product = price.product as Stripe.Product;\n      return {\n        id: product.id,\n        name: product.name,\n        description: product.description,\n        price: price.unit_amount,\n        priceId: price.id,\n        period: price.recurring ? price.recurring.interval : null,\n      };\n    });\n    res.json(products);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : 'Unknown error';\n    res.status(500).json({ error: message });\n  }\n});\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0631\u0627\u0633\u062a\u06c1 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06d2 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0627\u06a9\u0627\u0624\u0646\u0679 \u0633\u06d2 \u062a\u0645\u0627\u0645 \u0641\u0639\u0627\u0644 \u0642\u06cc\u0645\u062a\u06cc\u06ba \u06a9\u06be\u06cc\u0646\u0686\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u0631\u0648\u0688\u06a9\u0679 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0628\u0691\u06be\u0627\u062a\u0627 \u06c1\u06d2 (\u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2: <code>expand: [\"data.product\"]<\/code>\u0627\u0633\u06cc API \u06a9\u0627\u0644 \u0633\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u0627 \u0646\u0627\u0645 \u0627\u0648\u0631 \u062a\u0641\u0635\u06cc\u0644 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u06a9\u06cc \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u062f\u0648\u0631\u0627\u0646\u06cc\u06c1 \u06a9\u0627 \u0641\u06cc\u0644\u0688 \u062e\u0627\u0644\u06cc \u06c1\u06d2\u06d4 \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06cc\u06c1 &quot;\u0645\u06c1\u06cc\u0646\u06c1&#8221; \u06cc\u0627 &quot;\u0633\u0627\u0644&#8221; \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-how-to-build-the-checkout-flow\"><strong>\u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627 \u0628\u06c1\u0627\u0624 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/strong><\/h2>\n<p>\u0622\u067e \u06a9\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0628\u06c1\u0627\u0624 \u06a9\u0648 \u062f\u0648 \u0645\u0646\u0638\u0631\u0646\u0627\u0645\u0648\u06ba \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2: \u0627\u0646\u0641\u0631\u0627\u062f\u06cc \u067e\u0631\u0648\u0688\u06a9\u0679\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u06a9\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0627\u0648\u0631 \u0628\u0627\u0631 \u0628\u0627\u0631 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646\u0632\u06d4 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u0627 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0633\u06cc\u0634\u0646 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0642\u06cc\u0645\u062a \u06a9\u06cc \u0642\u0633\u0645 \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0635\u0631\u0641 \u0645\u0648\u0688 \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ Type definition for checkout\ninterface CheckoutBody {\n  priceId: string;\n  accountId: string;\n}\n\/\/ Create checkout session\nrouter.post(\n  '\/create-checkout-session',\n  async (req: Request<{}, {}, CheckoutBody>, res: Response) => {\n    const { priceId, accountId } = req.body;\n    try {\n      \/\/ Retrieve the price to determine if it is\n      \/\/ one-time or recurring\n      const price = await stripe.prices.retrieve(priceId, { stripeAccount: accountId });\n      const isSubscription = price.type === 'recurring';\n      const mode = isSubscription ? 'subscription' : 'payment';\n      const session = await stripe.checkout.sessions.create(\n        {\n          line_items: [\n            {\n              price: priceId,\n              quantity: 1,\n            },\n          ],\n          mode,\n          success_url: `${process.env.DOMAIN}\/done?session_id={CHECKOUT_SESSION_ID}`,\n          cancel_url: `${process.env.DOMAIN}`,\n          ...(isSubscription\n            ? {\n                subscription_data: {\n                  application_fee_percent: 10,\n                },\n              }\n            : {\n                payment_intent_data: {\n                  application_fee_amount: 123,\n                },\n              }),\n        },\n        { stripeAccount: accountId },\n      );\n      res.redirect(303, session.url as string);\n    } catch (error) {\n      const message = error instanceof Error ? error.message : 'Unknown error';\n      res.status(500).json({ error: message });\n    }\n  },\n);\n<\/code><\/pre>\n<p>\u06cc\u06c1\u0627\u06ba \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u0631\u0627\u0633\u062a\u06c1 \u0642\u062f\u0645 \u0628\u06c1 \u0642\u062f\u0645 \u06a9\u06cc\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06d2 \u0644\u0646\u06a9 \u06a9\u0631\u062f\u06c1 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0645\u06cc\u06ba \u0642\u06cc\u0645\u062a \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u06cc\u06c1 \u062a\u0639\u06cc\u0646 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u06a9\u06cc \u0642\u06cc\u0645\u062a \u06c1\u06d2 \u06cc\u0627 \u0628\u0627\u0631 \u0628\u0627\u0631 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646\u06d4 \u067e\u06be\u0631 &quot;\u0627\u062f\u0627\u0626\u06cc\u06af\u06cc&#8221; \u06cc\u0627 &quot;\u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646&#8221; \u06a9\u0648 \u0645\u0646\u0627\u0633\u0628 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627 \u0633\u06cc\u0634\u0646 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u06a9\u06c1 <code>application_fee_amount<\/code> \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u06cc \u062a\u062c\u0627\u0631\u062a\u06cc \u06a9\u0679\u060c \u06a9\u0631\u0646\u0633\u06cc \u06a9\u06cc \u0633\u0628 \u0633\u06d2 \u0686\u06be\u0648\u0679\u06cc \u0627\u06a9\u0627\u0626\u06cc (USD \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u06cc\u0646\u0679) \u0645\u06cc\u06ba \u0628\u06cc\u0627\u0646 \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u06d4 \u0627\u0633 \u0645\u062b\u0627\u0644 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0641\u06cc \u0644\u06cc\u0646 \u062f\u06cc\u0646 $1.23 \u06cc\u0627 10% \u0644\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u0645\u0627\u0631\u06a9\u06cc\u0679 \u0645\u06cc\u06ba\u060c \u0627\u0633 \u06a9\u0627 \u0634\u0645\u0627\u0631 \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u06a9\u06cc \u0642\u06cc\u0645\u062a \u06a9\u06d2 \u0641\u06cc\u0635\u062f \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u0648\u062c\u06c1 \u0641\u0631\u0645\u0627\u0626\u06cc\u06ba <code>application_fee_amount<\/code> \u0627\u0646\u062f\u0631 \u062c\u0627\u0624 <code>subscription_data<\/code> \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0644\u06cc\u06a9\u0646 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc <code>payment_intent_data<\/code> \u06cc\u06a9 \u0648\u0642\u062a\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u067e\u0679\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0645\u0648\u0688\u0632 \u0645\u062e\u062a\u0644\u0641 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u062e\u0631 \u0645\u06cc\u06ba\u060c \u0631\u0627\u0633\u062a\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>res.redirect(303, session.url)<\/code> \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u06d2 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0635\u0641\u062d\u06d2 \u067e\u0631 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-how-to-handle-webhooks\"><strong>\u0648\u06cc\u0628 \u06c1\u06a9\u0633 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/h2>\n<p>\u0648\u06cc\u0628 \u06c1\u06a9\u0633 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u0627 \u0633\u0631\u0648\u0631\u0632 \u06a9\u0648 \u0627\u0646 \u0648\u0627\u0642\u0639\u0627\u062a \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0645\u0637\u0644\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u06c1\u06d2 \u062c\u0648 \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u0637\u0648\u0631 \u067e\u0631 \u067e\u06cc\u0634 \u0622\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0627\u06ba\u060c \u0646\u0627\u06a9\u0627\u0645 \u0686\u0627\u0631\u062c\u0632\u060c \u06cc\u0627 \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646 \u06a9\u06cc \u0645\u0646\u0633\u0648\u062e\u06cc\u06d4<\/p>\n<p>\u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u0627\u0631\u06a9\u06cc\u0679 \u0645\u06cc\u06ba\u060c \u0622\u067e \u06a9\u0648: <strong>\u0645\u0637\u0644\u0642\u06cc\u062a<\/strong> \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0631\u06cc \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679 URL \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 \u0631\u06cc \u0688\u0627\u0626\u0631\u06cc\u06a9\u0634\u0646 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0627\u067e\u0646\u0627 \u0628\u0631\u0627\u0624\u0632\u0631 \u0628\u0646\u062f \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0648\u06cc\u0628 \u06c1\u06a9\u0633 \u0633\u0686\u0627\u0626\u06cc \u06a9\u0627 \u0630\u0631\u06cc\u0639\u06c1 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0648\u06cc\u0628 \u06c1\u06a9 \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u067e\u06c1\u0644\u06d2<\/strong> JSON \u0628\u0627\u0688\u06cc \u067e\u0627\u0631\u0633\u0631\u06d4 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0648\u06cc\u0628 \u06c1\u06a9 \u067e\u06d2 \u0644\u0648\u0688 \u06a9\u0648 \u062e\u0627\u0645 \u0628\u0627\u0626\u0679\u0633 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0628\u06be\u06cc\u062c\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062e\u0627\u0645 \u0628\u0627\u0688\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ IMPORTANT: Register this BEFORE app.use(express.json())\napp.post(\n  '\/api\/webhook',\n  express.raw({ type: 'application\/json' }),\n  (req: Request, res: Response) => {\n    let event: Stripe.Event = JSON.parse(req.body.toString()); \/\/ If you have an endpoint secret, verify the\n    \/\/ signature for security\n    const endpointSecret = process.env.WEBHOOK_SECRET;\n    if (endpointSecret) {\n      const signature = req.headers['stripe-signature'] as string;\n      try {\n        event = stripe.webhooks.constructEvent(req.body, signature, endpointSecret) as Stripe.Event;\n      } catch (err) {\n        const message = err instanceof Error ? err.message : 'Unknown error';\n        console.log('Webhook signature verification failed:', message);\n        res.sendStatus(400);\n        return;\n      }\n    } \/\/ Handle the event\n    switch (event.type) {\n      case 'checkout.session.completed': {\n        const session = event.data.object as Stripe.Checkout.Session;\n        console.log('Payment successful for session:', session.id); \/\/ Fulfill the order: send email, grant access,\n        \/\/ update your records, and so on\n        break;\n      }\n      case 'checkout.session.expired': {\n        const session = event.data.object as Stripe.Checkout.Session;\n        console.log('Session expired:', session.id); \/\/ Optionally notify the customer or clean up\n        \/\/ any pending records\n        break;\n      }\n      case 'checkout.session.async_payment_succeeded': {\n        const session = event.data.object as Stripe.Checkout.Session;\n        console.log('Delayed payment succeeded for session:', session.id); \/\/ Fulfill the order now that payment cleared\n        break;\n      }\n      case 'checkout.session.async_payment_failed': {\n        const session = event.data.object as Stripe.Checkout.Session;\n        console.log('Payment failed for session:', session.id); \/\/ Notify the customer that payment failed\n        break;\n      }\n      case 'customer.subscription.deleted': {\n        const subscription = event.data.object as Stripe.Subscription;\n        console.log('Subscription cancelled:', subscription.id); \/\/ Revoke access for the customer\n        break;\n      }\n      default:\n        console.log('Unhandled event type:', event.type);\n    }\n    res.send();\n  },\n);\n<\/code><\/pre>\n<p>\u0648\u06cc\u0628 \u06c1\u06a9 \u06c1\u06cc\u0646\u0688\u0644\u0631 \u067e\u0627\u0646\u0686 \u0627\u06c1\u0645 \u0648\u0627\u0642\u0639\u0627\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p><code>checkout.session.completed<\/code>    \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627\u0645\u06cc\u0627\u0628 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u0639\u0645\u0644 \u0645\u06cc\u06ba \u0644\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1\u0627\u06ba \u0633\u06d2 \u0622\u067e \u0627\u067e\u0646\u0627 \u0622\u0631\u0688\u0631 \u067e\u0648\u0631\u0627 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06c1\u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u062a\u0635\u062f\u06cc\u0642\u06cc \u0627\u06cc \u0645\u06cc\u0644 \u0628\u06be\u06cc\u062c \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u06cc\u0627 \u0622\u067e \u06a9\u0648 \u0631\u0633\u0627\u0626\u06cc \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>checkout.session.expired<\/code>    \u06af\u0627\u06c1\u06a9 \u06a9\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0645\u06a9\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0633\u06cc\u0634\u0646 \u062e\u062a\u0645 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u0641\u0627\u0626\u0631 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>checkout.session.async_payment_succeeded<\/code>    \u062a\u0627\u062e\u06cc\u0631 \u0633\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0631 (\u062c\u06cc\u0633\u06d2 \u0628\u06cc\u0646\u06a9 \u0679\u0631\u0627\u0646\u0633\u0641\u0631) \u067e\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u06d2 \u0628\u0639\u062f \u0639\u0645\u0644 \u0645\u06cc\u06ba \u0644\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>checkout.session.async_payment_failed<\/code>    \u0645\u0648\u062e\u0631 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u0646\u06a9\u0627\u0644 \u062f\u06cc\u0627 \u06af\u06cc\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u0648\u0631 <code>customer.subscription.deleted<\/code> \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646 \u0645\u0646\u0633\u0648\u062e \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u0641\u0627\u0626\u0631 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<h2 id=\"heading-how-to-configure-webhooks-in-the-stripe-dashboard\"><strong>\u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0645\u06cc\u06ba \u0648\u06cc\u0628 \u06c1\u06a9\u0633 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/strong><\/h2>\n<p>\u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0622\u067e \u0648\u06cc\u0628 \u06c1\u064f\u06a9 \u0627\u06cc\u0648\u0646\u0679\u0633 \u0648\u0635\u0648\u0644 \u06a9\u0631 \u0633\u06a9\u06cc\u06ba\u060c \u0622\u067e \u06a9\u0648 \u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u0648 \u0628\u062a\u0627\u0646\u0627 \u06c1\u0648\u06af\u0627 \u06a9\u06c1 \u0627\u06cc\u0648\u0646\u0679\u0633 \u06a9\u06c1\u0627\u06ba \u0628\u06be\u06cc\u062c\u0646\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0646 \u0627\u06cc\u0648\u0646\u0679\u0633 \u0645\u06cc\u06ba \u0622\u067e \u06a9\u06cc \u062f\u0644\u0686\u0633\u067e\u06cc \u06c1\u06d2\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u0646 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<ol>\n<li>\n<p>\u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0688\u0648\u06cc\u0644\u067e\u0631 > \u0648\u06cc\u0628 \u06c1\u06a9\u0633 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>&#8216;\u0645\u0646\u0632\u0644 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba&#8217; \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0622\u067e \u06a9\u06d2 \u0644\u0646\u06a9 \u06a9\u0631\u062f\u06c1 \u0645\u0631\u0686\u0646\u0679 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u06a9\u06cc \u062c\u0627\u0626\u06d2 \u06af\u06cc\u060c \u0644\u06c1\u0630\u0627 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06cc \u0642\u0633\u0645 \u06a9\u06d2 \u062a\u062d\u062a &#8216;\u0644\u0646\u06a9\u0688 \u0627\u0648\u0631 V2 \u0627\u06a9\u0627\u0624\u0646\u0679&#8217; \u06a9\u0648 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>&#8216;\u0627\u06cc\u0648\u0646\u0679\u0633 \u0679\u0648 \u0645\u0648\u0635\u0648\u0644&#8217; \u06a9\u06d2 \u062a\u062d\u062a\u060c &#8216;\u062a\u0645\u0627\u0645 \u0627\u06cc\u0648\u0646\u0679\u0633&#8217; \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0631\u062c \u0630\u06cc\u0644 \u067e\u0627\u0646\u0686 \u0627\u06cc\u0648\u0646\u0679\u0633 \u06a9\u0648 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p><code>checkout.session.async_payment_succeeded<\/code>    &#8211; \u0627\u0633 \u0648\u0642\u062a \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u062a\u0627\u062e\u06cc\u0631 \u0633\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627 \u0627\u0631\u0627\u062f\u06c1 \u0628\u0627\u0644\u0622\u062e\u0631 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>checkout.session.completed<\/code>    &#8211; \u0627\u0633 \u0648\u0642\u062a \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627 \u0633\u06cc\u0634\u0646 \u06a9\u0627\u0645\u06cc\u0627\u0628\u06cc \u0633\u06d2 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>checkout.session.expired<\/code>    &#8211; \u0627\u0633 \u0648\u0642\u062a \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627 \u0633\u06cc\u0634\u0646 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062e\u062a\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>checkout.session.async_payment_failed<\/code>    &#8211; \u0627\u0633 \u0648\u0642\u062a \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u062a\u0627\u062e\u06cc\u0631 \u0633\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627 \u0627\u0631\u0627\u062f\u06c1 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>customer.subscription.deleted<\/code>    &#8211; \u0627\u0633 \u0648\u0642\u062a \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u06a9\u0633\u06cc \u0635\u0627\u0631\u0641 \u06a9\u06cc \u0631\u06a9\u0646\u06cc\u062a \u062e\u062a\u0645 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0648\u06cc\u0628 \u06c1\u06a9 \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679 \u06a9\u0627 URL \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba\u06d4 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06cc\u06c1 https:\/\/yourdomain.com\/api\/webhook \u06c1\u0648\u06af\u0627\u06d4 \u0645\u0642\u0627\u0645\u06cc \u062a\u0631\u0642\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u0633\u0679\u0631\u0627\u0626\u067e CLI \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba (\u0622\u06af\u06d2 \u0628\u06cc\u0627\u0646 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2)\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 &quot;\u0645\u0646\u0632\u0644 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba&#8221; \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"heading-how-to-test-webhooks-locally\"><strong>\u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0648\u06cc\u0628 \u06c1\u06a9\u0633 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u06cc\u0633\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/h2>\n<p>\u0645\u0642\u0627\u0645\u06cc \u062a\u0631\u0642\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0622\u067e \u06a9\u06d2 \u0633\u0631\u0648\u0631 \u06a9\u0648 \u0627\u0646\u0679\u0631\u0646\u06cc\u0679 \u067e\u0631 \u0628\u06d2 \u0646\u0642\u0627\u0628 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u0633\u0679\u0631\u0627\u0626\u067e CLI \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-shell\">brew install stripe\/stripe-cli\/stripe\nstripe login\nstripe listen --forward-to localhost:4242\/webhook\n<\/code><\/pre>\n<p>CLI \u0627\u0633 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0648\u06cc\u0628 \u06c1\u06a9 \u067e\u0631 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0631\u0627\u0632 \u06a9\u0648 \u067e\u0631\u0646\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>whsec_<\/code>. \u0627\u0633\u06d2 \u0627\u067e\u0646\u06cc .env \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0627\u0633 \u0637\u0631\u062d \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba: <code>WEBHOOK_SECRET<\/code>. CLI \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0633\u06d2 \u062a\u0645\u0627\u0645 \u0648\u06cc\u0628 \u06c1\u06a9 \u0627\u06cc\u0648\u0646\u0679\u0633 \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u0622\u067e \u06a9\u06d2 \u0645\u0642\u0627\u0645\u06cc \u0633\u0631\u0648\u0631 \u067e\u0631 \u0628\u06be\u06cc\u062c \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u0633\u06d2 \u0622\u067e \u06a9\u0686\u06be \u0628\u06be\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u067e\u0646\u06d2 \u067e\u0648\u0631\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0628\u06c1\u0627\u0624 \u06a9\u0648 \u062c\u0627\u0646\u0686 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-how-to-add-the-billing-portal\"><strong>\u0628\u0644\u0646\u06af \u067e\u0648\u0631\u0679\u0644 \u06a9\u06cc\u0633\u06d2 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/h2>\n<p>\u0628\u0644\u0646\u06af \u067e\u0648\u0631\u0679\u0644 \u0622\u067e \u06a9\u06d2 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 UI \u0628\u0646\u0627\u0626\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u067e\u0646\u06cc \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646\u0632 \u06a9\u0627 \u0646\u0638\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u0679\u06cc \u067e\u0648\u0631\u06d2 \u062a\u062c\u0631\u0628\u06d2 \u06a9\u06cc \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0627\u067e\u0646\u0627 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u067e\u0646\u0627 \u067e\u0644\u0627\u0646 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06cc\u0627 \u0627\u067e\u0646\u06cc \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646 \u0645\u0646\u0633\u0648\u062e \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ Create a billing portal session\nrouter.post(\n\u00a0 \"\/create-portal-session\",\n\u00a0 async (req: Request, res: Response) => {\n\u00a0\u00a0\u00a0 const { session_id } = req.body as {\n\u00a0\u00a0\u00a0\u00a0\u00a0 session_id: string;\n\u00a0\u00a0\u00a0 };\n\u00a0\n\u00a0\u00a0\u00a0 try {\n\u00a0\u00a0\u00a0\u00a0\u00a0 const session =\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 await stripe.checkout.sessions.retrieve(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 session_id\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 );\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0 const portalSession =\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 await stripe.billingPortal.sessions.create({\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 customer_account: session.customer_account as string,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return_url: `\\({process.env.DOMAIN}?session_id=\\){session_id}`,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 });\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0 res.redirect(303, portalSession.url);\n\u00a0\u00a0\u00a0 } catch (error) {\n\u00a0\u00a0\u00a0\u00a0\u00a0 const message =\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 error instanceof Error\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ? error.message\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : \"Unknown error\";\n\u00a0\u00a0\u00a0\u00a0\u00a0 res.status(500).json({ error: message });\n\u00a0\u00a0\u00a0 }\n\u00a0 }\n);\n<\/code><\/pre>\n<p>\u0627\u0633 \u0631\u0627\u0633\u062a\u06d2 \u067e\u0631 <code>session_id<\/code> \u067e\u0686\u06be\u0644\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0648\u06ba \u0633\u06d2 \u0645\u062a\u0639\u0644\u0642\u06c1 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u0644\u0646\u06af \u067e\u0648\u0631\u0679\u0644 \u0633\u06cc\u0634\u0646 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>customer_account<\/code> \u0641\u06cc\u0644\u0688 \u067e\u0648\u0631\u0679\u0644 \u06a9\u0648 \u0635\u062d\u06cc\u062d \u0644\u0646\u06a9 \u06a9\u0631\u062f\u06c1 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0633\u06d2 \u062c\u0648\u0691\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0635\u0631\u0641 \u0627\u0633 \u0645\u062e\u0635\u0648\u0635 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06cc \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646\u0632 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0628 \u0627\u06cc\u06a9 JSON \u067e\u0627\u0631\u0633\u0631 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u067e\u0646\u0627 \u0631\u0627\u0624\u0679\u0631 \u0645\u0627\u0624\u0646\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0622\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4 <strong>~ \u0628\u0639\u062f<\/strong> \u0648\u06cc\u0628 \u06c1\u064f\u06a9 \u06a9\u0627 \u0631\u0627\u0633\u062a\u06c1:<\/p>\n<pre><code class=\"language-typescript\">\/\/ JSON and URL-encoded parsers (AFTER webhook route)\napp.use(express.urlencoded({ extended: true }));\napp.use(express.json());\n\n\/\/ Mount all routes under \/api\napp.use('\/api', router);\nconst PORT: number = parseInt(process.env.PORT || '4242', 10);\napp.listen(PORT, () => {\n  console.log(`Server running on port ${PORT}`);\n});\n<\/code><\/pre>\n<h2 id=\"heading-how-to-build-the-nextjs-frontend\"><strong>Next.js \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/strong><\/h2>\n<p>\u0627\u067e\u0646\u06cc \u06a9\u0644\u0627\u0626\u0646\u0679 \u0688\u0627\u0626\u0631\u06a9\u0679\u0631\u06cc \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 TypeScript \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u06cc\u06a9 \u0646\u06cc\u0627 Next.js \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-shell\">cd ..\/client\nnpx create-next-app@latest . --typescript --app --tailwind --eslint\nnpm install axios\n<\/code><\/pre>\n<h2 id=\"heading-how-to-create-the-account-context\"><strong>\u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u0627 \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/strong><\/h2>\n<p>\u06c1\u0645\u06cc\u06ba \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06d2 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06cc ID \u06a9\u0648 \u062a\u0645\u0627\u0645 \u0627\u062c\u0632\u0627\u0621 \u0645\u06cc\u06ba \u0628\u0627\u0646\u0679\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4 \u0627\u0633 \u0633\u06d2 \u0627\u06cc\u06a9 \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba: <code>contexts\/AccountContext.tsx<\/code>:<\/p>\n<pre><code class=\"language-typescript\">'use client';\nimport { createContext, useContext, useState, ReactNode } from 'react';\nimport { useSearchParams } from 'next\/navigation';\n\ninterface AccountContextType {\n  accountId: string | null;\n  setAccountId: (id: string | null) => void;\n}\n\nconst AccountContext = createContext<accountcontexttype undefined=\"\">(undefined);\n\nexport function useAccount(): AccountContextType {\n  const context = useContext(AccountContext);\n  if (!context) {\n    throw new Error('useAccount must be used within AccountProvider');\n  }\n  return context;\n}\n\nexport function AccountProvider({ children }: { children: ReactNode }) {\n  const searchParams = useSearchParams();\n  const [accountId, setAccountId] = useState<string null=\"\">(searchParams.get('accountId'));\n\n  return (\n    <accountcontext.provider value=\"{{\" accountid=\"\" setaccountid=\"\">\n      {children}\n    <\/accountcontext.provider>\n  );\n}\n<\/string><\/accountcontexttype><\/code><\/pre>\n<p>\u06cc\u06c1 \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0645\u0631\u0686\u0646\u0679 \u06a9\u06d2 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u06a9\u0648 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u067e\u0648\u0631\u06cc \u0627\u06cc\u067e \u0645\u06cc\u06ba \u062f\u0633\u062a\u06cc\u0627\u0628 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0628\u062a\u062f\u0627\u0626\u06cc \u0644\u0648\u0688 \u067e\u0631\u060c URL \u06a9\u0648 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0622\u0626\u06cc \u0688\u06cc \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u067e\u06cc\u0631\u0627\u0645\u06cc\u0679\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0686\u06cc\u06a9 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0637\u0631\u062d \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u0627 \u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af \u0631\u06cc \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679 \u0622\u067e \u06a9\u06d2 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06cc ID \u06a9\u0648 \u0627\u06cc\u067e \u067e\u0631 \u0648\u0627\u067e\u0633 \u0628\u06be\u06cc\u062c \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-how-to-create-the-account-status-hook\"><strong>\u0627\u06a9\u0627\u0624\u0646\u0679 \u0627\u0633\u0679\u06cc\u0679\u0633 \u06c1\u06a9 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/strong><\/h2>\n<p>\u06cc\u06c1\u0627\u06ba \u062d\u0633\u0628 \u0636\u0631\u0648\u0631\u062a \u06c1\u06a9\u0633 \u0628\u0646\u0627\u0626\u06cc\u06ba: <code>hooks\/useAccountStatus.ts<\/code> \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06cc \u062d\u06cc\u062b\u06cc\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0648\u0644\u0646\u06af\u06d4<\/p>\n<pre><code class=\"language-typescript\">'use client';\nimport { useState, useEffect } from 'react';\nimport { useAccount } from '@\/contexts\/AccountContext';\ninterface AccountStatus {\n  id: string;\n  payoutsEnabled: boolean;\n  chargesEnabled: boolean;\n  detailsSubmitted: boolean;\n}\nexport default function useAccountStatus() {\n  const [accountStatus, setAccountStatus] = useState<accountstatus null=\"\">(null);\n  const { accountId, setAccountId } = useAccount();\n  useEffect(() => {\n    if (!accountId) return;\n    const fetchStatus = async () => {\n      try {\n        const res = await fetch(`http:\/\/localhost:4242\/api\/account-status\/${accountId}`);\n        if (!res.ok) throw new Error('Failed to fetch');\n        const data: AccountStatus = await res.json();\n        setAccountStatus(data);\n      } catch {\n        setAccountId(null);\n      }\n    };\n    fetchStatus();\n    const interval = setInterval(fetchStatus, 5000);\n    return () => clearInterval(interval);\n  }, [accountId, setAccountId]);\n  return {\n    accountStatus,\n    needsOnboarding: !accountStatus?.chargesEnabled && !accountStatus?.detailsSubmitted,\n  };\n}\n<\/accountstatus><\/code><\/pre>\n<p>\u06cc\u06c1 \u06c1\u06a9 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06cc \u062d\u06cc\u062b\u06cc\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u0631 5 \u0633\u06cc\u06a9\u0646\u0688 \u0645\u06cc\u06ba \u067e\u0648\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06c1\u0645 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u06cc \u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u06c1\u06d2\u06d4 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0641\u0627\u0631\u0645 \u06a9\u0648 \u067e\u064f\u0631 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u0648 \u0627\u067e\u0646\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0627\u067e\u0646\u06d2 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u06a9\u0686\u06be \u0648\u0642\u062a \u0644\u06af \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>needsOnboarding<\/code> \u067e\u0631\u0686\u0645 UI \u06a9\u0648 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af \u0628\u0679\u0646 \u0688\u0633\u067e\u0644\u06d2 \u06a9\u0631\u0646\u0627 \u06c1\u06d2 \u06cc\u0627 \u0645\u0631\u0686\u0646\u0679 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688\u06d4<\/p>\n<h2 id=\"heading-how-to-build-the-merchant-onboarding-component\"><strong>\u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0648 \u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af \u062c\u0632\u0648 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/strong><\/h2>\n<p>\u0628\u0646\u0627\u0646\u0627 <code>components\/ConnectOnboarding.tsx<\/code>:<\/p>\n<pre><code class=\"language-typescript\">'use client';\nimport { useState } from 'react';\nimport { useAccount } from '@\/contexts\/AccountContext';\nimport useAccountStatus from '@\/hooks\/useAccountStatus';\nconst API_URL = 'http:\/\/localhost:4242\/api';\nexport default function ConnectOnboarding() {\n  const [email, setEmail] = useState<string>('');\n  const { accountId, setAccountId } = useAccount();\n  const { accountStatus, needsOnboarding } = useAccountStatus();\n  const handleCreateAccount = async () => {\n    const res = await fetch(`${API_URL}\/create-connect-account`, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application\/json' },\n      body: JSON.stringify({ email }),\n    });\n    const data = await res.json();\n    setAccountId(data.accountId);\n  };\n  const handleStartOnboarding = async () => {\n    const res = await fetch(`${API_URL}\/create-account-link`, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application\/json' },\n      body: JSON.stringify({ accountId }),\n    });\n    const data = await res.json();\n    window.location.href = data.url;\n  };\n  if (!accountId) {\n    return (\n      <p>\n        <h2 classname=\"text-xl font-bold mb-4\">Create Your Seller Account<\/h2>\n        <input type=\"email\" placeholder=\"Your email\" value=\"{email}\" onchange=\"{(e)\"\/> setEmail(e.target.value)}\n          className=\"w-full border p-2 rounded mb-4\"\n        \/>\n        <button onclick=\"{handleCreateAccount}\" classname=\"w-full bg-green-600 text-white p-2 rounded hover:bg-green-700\">\n          Create Connect Account\n        <\/button>\n      <\/p>\n    );\n  }\n  return (\n    <div classname=\"max-w-md mx-auto p-6\">\n      <h3 classname=\"font-semibold mb-2\">Account: {accountId} <\/h3>\n      <p classname=\"mb-2\">Charges: {accountStatus?.chargesEnabled ? 'Active' : 'Pending'} <\/p>\n      <p classname=\"mb-4\">Payouts: {accountStatus?.payoutsEnabled ? 'Active' : 'Pending'} <\/p>\n      {needsOnboarding && (\n        <button onclick=\"{handleStartOnboarding}\" classname=\"bg-purple-600 text-white px-6 py-2 rounded hover:bg-purple-700\">\n          Complete Onboarding\n        <\/button>\n      )}\n    <\/div>\n  );\n}\n<\/string><\/code><\/pre>\n<p>\u06cc\u06c1 \u062c\u0632\u0648 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06d2 \u062a\u062c\u0631\u0628\u06d2 \u06a9\u06cc \u062f\u0648\u0646\u0648\u06ba \u062d\u0627\u0644\u062a\u0648\u06ba \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 \u0627\u06cc \u0645\u06cc\u0644 \u0641\u0627\u0631\u0645 \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627\u06d4 \u0627\u067e\u0646\u0627 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0627\u06af\u0631 \u0636\u0631\u0648\u0631\u06cc \u06c1\u0648 \u062a\u0648 \u0622\u067e \u0627\u067e\u0646\u06d2 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06cc \u062d\u06cc\u062b\u06cc\u062a \u0627\u0648\u0631 \u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af \u0628\u0679\u0646 \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<h2 id=\"heading-how-to-build-the-product-create-product-list-and-checkout\"><strong>\u0645\u0635\u0646\u0648\u0639\u0627\u062a \u06a9\u06cc \u062a\u062e\u0644\u06cc\u0642\u060c \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a\u060c \u0627\u0648\u0631 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u06d2<\/strong><\/h2>\n<p>\u0628\u0646\u0627\u0646\u0627 <code>components\/Products.tsx<\/code>:<\/p>\n<pre><code class=\"language-typescript\">'use client';\nimport { useState, useEffect } from 'react';\nimport { useAccount } from '@\/contexts\/AccountContext';\nimport useAccountStatus from '@\/hooks\/useAccountStatus';\nconst API_URL = 'http:\/\/localhost:4242\/api';\ninterface Product {\n  id: string;\n  name: string;\n  description: string | null;\n  price: number | null;\n  priceId: string;\n  period: string | null;\n}\nexport default function Products() {\n  const { accountId } = useAccount();\n  const { needsOnboarding } = useAccountStatus();\n  const [products, setProducts] = useState<product>([]);\n  useEffect(() => {\n    if (!accountId || needsOnboarding) return;\n    const fetchProducts = async () => {\n      const res = await fetch(`\\({API_URL}\/products\/\\){accountId}`);\n      const data: Product[] = await res.json();\n      setProducts(data);\n    };\n    fetchProducts();\n    const interval = setInterval(fetchProducts, 5000);\n    return () => clearInterval(interval);\n  }, [accountId, needsOnboarding]);\n  return (\n    <div classname=\"grid grid-cols-1 md:grid-cols-3 gap-6 mt-6\">\n      {' '}\n      {products.map((product) => (\n        <div key=\"{product.priceId}\" classname=\"border rounded-lg p-4 shadow-sm\">\n          <h3 classname=\"text-lg font-semibold\">\u00a0 {product.name}<\/h3>\n\n          <p classname=\"text-gray-600 mt-1\">\u00a0 {product.description}<\/p>\n\n          <p classname=\"text-xl font-bold mt-3\">\n            ${((product.price ?? 0) \/ 100).toFixed(2)}\n            {product.period ? ` \/ ${product.period}` : ''}\n          <\/p>\n\n          \n        <\/div>\n      ))}\n    <\/div>\n  );\n}\n\n<\/product><\/code><\/pre>\n<p>\u067e\u0631\u0648\u0688\u06a9\u0679\u0633 \u06a9\u0627 \u062c\u0632\u0648 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06d2 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0627\u06a9\u0627\u0624\u0646\u0679 \u0633\u06d2 \u062a\u0645\u0627\u0645 \u067e\u0631\u0648\u0688\u06a9\u0679\u0633 \u06a9\u0648 \u06a9\u06be\u06cc\u0646\u0686\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u0627\u06cc\u06a9 \u0631\u06cc\u0633\u067e\u0627\u0646\u0633\u06cc\u0648 \u06af\u0631\u0688 \u0645\u06cc\u06ba \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0686\u06cc\u06a9 \u0622\u0624\u0679 \u0628\u0679\u0646 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0622\u067e \u06a9\u06d2 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u067e\u0631 \u0627\u06cc\u06a9 \u0641\u0627\u0631\u0645 \u062c\u0645\u0639 \u06a9\u0631 \u06a9\u06d2 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u06d2 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0686\u06cc\u06a9 \u0622\u0624\u0679 \u0635\u0641\u062d\u06c1 \u067e\u0631 \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u06d4 \u0646\u0648\u0679 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0628\u0679\u0646 \u06a9\u0627 \u0645\u062a\u0646 \u06a9\u0633 \u0637\u0631\u062d \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u0627\u0633 \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u067e\u0631\u0648\u0688\u06a9\u0679 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u06a9\u06cc \u062e\u0631\u06cc\u062f\u0627\u0631\u06cc \u06c1\u06d2 \u06cc\u0627 \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646\u06d4<\/p>\n<h2 id=\"heading-how-to-build-the-product-form\"><strong>\u067e\u0631\u0648\u0688\u06a9\u0679 \u0641\u0627\u0631\u0645 \u06a9\u06cc\u0633\u06d2 \u067e\u064f\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/h2>\n<p>\u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u067e\u0631 \u067e\u0631\u0648\u0688\u06a9\u0679\u0633 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0628\u0646\u0627\u0646\u0627 <code>components\/ProductForm.tsx<\/code>:<\/p>\n<pre><code class=\"language-typescript\">'use client';\nimport { useState } from 'react';\nimport { useAccount } from '@\/contexts\/AccountContext';\nimport useAccountStatus from '@\/hooks\/useAccountStatus';\nconst API_URL = 'http:\/\/localhost:4242\/api';\ninterface ProductFormData {\n  productName: string;\n  productDescription: string;\n  productPrice: number;\n}\nexport default function ProductForm() {\n  const { accountId } = useAccount();\n  const { needsOnboarding } = useAccountStatus();\n  const [showForm, setShowForm] = useState<boolean>(false);\n  const [formData, setFormData] = useState<productformdata>({\n    productName: '',\n    productDescription: '',\n    productPrice: 1000,\n  });\n  const handleSubmit = async (e: React.FormEvent): Promise<void> => {\n    e.preventDefault();\n    if (!accountId || needsOnboarding) return;\n    await fetch(`${API_URL}\/create-product`, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application\/json' },\n      body: JSON.stringify({\n        ...formData,\n        accountId,\n      }),\n    }); \/\/ Reset form and hide it\n    setFormData({\n      productName: '',\n      productDescription: '',\n      productPrice: 1000,\n    });\n    setShowForm(false);\n  }; \/\/ Only show the form if the merchant has completed\n  \/\/ onboarding and can accept charges\n  if (!accountId || needsOnboarding) return null;\n  return (\n    <div classname=\"my-6\">\n      <button onclick=\"{()\"> setShowForm(!showForm)}\n        className=\"bg-green-600 text-white px-4 py-2 rounded hover:bg-green-700\"\n      >\n        {showForm ? 'Cancel' : 'Add New Product'}\n      <\/button>\n\n      {showForm && (\n        \n      )}\n    <\/div>\n  );\n}\n<\/void><\/productformdata><\/boolean><\/code><\/pre>\n<p>\u06cc\u06c1 \u062c\u0632\u0648 \u0635\u0631\u0641 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06d2 \u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af \u0645\u06a9\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u067e\u06cc\u0634 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 ( <code>if (!accountId || needsOnboarding) return null<\/code> \u0627\u0648\u067e\u0631 \u062f\u06cc\u06a9\u06be\u06cc\u06ba)\u06d4 \u0627\u06cc\u06a9 \u0641\u0627\u0631\u0645 \u06a9\u0648 \u0679\u0648\u06af\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u06c1\u0627\u06ba \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u0627 \u0646\u0627\u0645\u060c \u062a\u0641\u0635\u06cc\u0644 \u0627\u0648\u0631 \u0642\u06cc\u0645\u062a \u0633\u06cc\u0646\u0679 \u0645\u06cc\u06ba \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba\u06d4 \u062c\u0645\u0639 \u06a9\u0631\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u06a9\u0627\u0644 \u0645\u0648\u0635\u0648\u0644 \u06c1\u0648\u06af\u06cc\u06d4 <code>\/api\/create-product<\/code> \u06cc\u06c1 \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u0642\u0637\u06c1 \u06c1\u06d2 \u062c\u0648 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0627\u06a9\u0627\u0624\u0646\u0679 \u0645\u06cc\u06ba \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u0627\u0648\u0631 \u0642\u06cc\u0645\u062a\u06cc\u06ba \u062f\u0648\u0646\u0648\u06ba \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0642\u06cc\u0645\u062a \u06a9\u0627 \u0645\u06cc\u062f\u0627\u0646 \u0648\u0627\u0626\u0646 \u0633\u06cc\u0646\u0679 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u06a9\u06cc \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u06cc \u062a\u0648\u0642\u0639 \u06c1\u06d2\u06d4 \u0644\u06c1\u0630\u0627\u060c \u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u0627 \u06a9\u0648\u0626\u06cc \u067e\u0631\u0648\u0688\u06a9\u0679 \\(25.00) \u0645\u06cc\u06ba \u0641\u0631\u0648\u062e\u062a \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0648\u06c1 2500 \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4 \u0622\u067e \u06a9\u06cc \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0627\u06cc\u067e \u0645\u06cc\u06ba\u060c \u0622\u067e \u0627\u06cc\u06a9 \u062f\u0648\u0633\u062a\u0627\u0646\u06c1 \u0627\u0646 \u067e\u0679 \u0634\u0627\u0645\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u062a\u0627\u062c\u0631\u0648\u06ba \u06a9\u0648 \\)25.00 \u0645\u06cc\u06ba \u062f\u0627\u062e\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0633\u06cc\u0646\u0679 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-how-to-build-the-main-page\"><strong>\u0645\u0631\u06a9\u0632\u06cc \u0635\u0641\u062d\u06c1 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/strong><\/h2>\n<p>\u0622\u062e\u0631 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0633\u0628 \u06a9\u0686\u06be \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0628\u0627\u0646\u062f\u06be\u062a\u06d2 \u06c1\u06cc\u06ba. <code>app\/page.tsx<\/code>:<\/p>\n<pre><code class=\"language-typescript\">'use client';\nimport { AccountProvider } from '@\/contexts\/AccountContext';\nimport ConnectOnboarding from '@\/components\/ConnectOnboarding';\nimport Products from '@\/components\/Products';\nimport ProductForm from '@\/components\/ProductForm';\nexport default function Home() {\n  return (\n    <accountprovider>\n      {' '}\n      <main classname=\"max-w-6xl mx-auto p-8\">\n        \n        <connectonboarding\/>\n        <productform\/>\n        <products\/>\n      <\/main>\n    <\/accountprovider>\n  );\n}\n<\/code><\/pre>\n<h2 id=\"heading-how-to-test-the-full-flow\"><strong>\u067e\u0648\u0631\u06d2 \u0628\u06c1\u0627\u0624 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u06cc\u0633\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4<\/strong><\/h2>\n<p>\u062f\u0648\u0646\u0648\u06ba \u0633\u0631\u0648\u0631\u0632 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-shell\"># Terminal 1 - Backend\ncd server\nnpm run dev\n\u00a0\n# Terminal 2 - Frontend\ncd client\nnpm run dev\n\u00a0\n# Terminal 3 - Stripe webhook listener\nstripe listen --forward-to localhost:4242\/api\/webhook\n<\/code><\/pre>\n<p>\u0627\u0628 \u0622\u0626\u06cc\u06d2 \u067e\u0648\u0631\u06d2 \u0628\u06c1\u0627\u0624 \u06a9\u0648 \u062c\u0627\u0646\u0686\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<ol>\n<li>\n<p>http:\/\/localhost:3000 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0633\u06cc\u0644\u0631 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u067e\u0646\u0627 \u0627\u06cc \u0645\u06cc\u0644 \u062f\u0631\u062c \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>&quot;\u0645\u06a9\u0645\u0644 \u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af&#8221; \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u0627 \u0679\u06cc\u0633\u0679 \u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af \u0641\u0627\u0631\u0645 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0679\u06cc\u0633\u0679 \u0688\u06cc\u0679\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u06cc\u0633\u06d2 \u0641\u0648\u0646 \u0646\u0645\u0628\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 000-000-0000 \u0627\u0648\u0631 SSN \u06a9\u06d2 \u0622\u062e\u0631\u06cc 4 \u06c1\u0646\u062f\u0633\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 0000\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u067e\u0646\u06d2 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06cc \u0635\u0648\u0631\u062a\u062d\u0627\u0644 \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0686\u0646\u062f \u0633\u06cc\u06a9\u0646\u0688 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u06a9\u06cc \u0634\u0631\u062d \u0686\u0627\u0644\u0648 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u0634\u0627\u0645\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u0631\u0648\u0688\u06a9\u0679 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0679 \u0641\u0627\u0631\u0645 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba (\u0642\u06cc\u0645\u062a \u0633\u06cc\u0646\u0679 \u0645\u06cc\u06ba \u0633\u06cc\u0679 \u06a9\u0631\u06cc\u06ba &#8211; \u062c\u06cc\u0633\u06d2 2500 \u0688\u0627\u0644\u0631 25.00 \u0645\u06cc\u06ba)\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0686\u06cc\u06a9 \u0622\u0624\u0679 \u06a9\u0627 \u0639\u0645\u0644 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0679 \u067e\u0631 &quot;\u0627\u0628\u06be\u06cc \u062e\u0631\u06cc\u062f\u06cc\u06ba&#8221; \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0635\u0641\u062d\u06c1 \u067e\u0631\u060c \u0627\u067e\u0646\u06cc \u0645\u0633\u062a\u0642\u0628\u0644 \u06a9\u06cc \u0645\u06cc\u0639\u0627\u062f \u062e\u062a\u0645 \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e \u0627\u0648\u0631 CVC \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0679\u06cc\u0633\u0679 \u06a9\u0627\u0631\u0688 \u0646\u0645\u0628\u0631 4242 4242 4242 4242 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u067e\u0646\u0627 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0622\u067e \u06a9\u0648 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u06cc\u06a9 \u0648\u06cc\u0628 \u06c1\u06a9 \u0627\u06cc\u0648\u0646\u0679 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0622\u067e \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u067e\u0631 \u0627\u067e\u0646\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0641\u06cc\u0633\u060c \u0627\u0648\u0631 \u0627\u067e\u0646\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0645\u06cc\u06ba \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u06cc \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"heading-how-the-payment-split-works\"><strong>\u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/strong><\/h2>\n<p>\u06cc\u06c1\u0627\u06ba \u0628\u0627\u0644\u06a9\u0644 \u0648\u06c1\u06cc \u06c1\u06d2 \u062c\u0628 \u06a9\u0648\u0626\u06cc \u0635\u0627\u0631\u0641 \u06a9\u0633\u06cc \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 $25.00 \u0627\u062f\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<ol>\n<li>\n<p>\u06a9\u0633\u0679\u0645\u0631 \u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u06d2 \u0686\u06cc\u06a9 \u0622\u0624\u0679 \u067e\u06cc\u062c \u067e\u0631 $25.00 \u0627\u062f\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u0679\u06cc \u0627\u06cc\u06a9 \u067e\u0631\u0648\u0633\u06cc\u0633\u0646\u06af \u0641\u06cc\u0633 (\u062a\u0642\u0631\u06cc\u0628\u0627\u064b 2.9% + $0.30 \u0627\u0645\u0631\u06cc\u06a9\u06cc \u06a9\u0627\u0631\u0688\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2) \u06a9\u0627\u0679\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0622\u067e \u06a9\u0627 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0641\u06cc\u0633 \u0644\u06cc\u062a\u0627 \u06c1\u06d2 \u062c\u0633\u06d2 \u0622\u067e \u0646\u06d2 \u0645\u0642\u0631\u0631 \u06a9\u06cc\u0627 \u06c1\u06d2 (\u0627\u0633 \u0645\u062b\u0627\u0644 \u0645\u06cc\u06ba $1.23)\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0628\u0642\u06cc\u06c1 \u0631\u0642\u0645 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0627\u06a9\u0627\u0624\u0646\u0679 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631 \u062f\u06cc \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062a\u0627\u062c\u0631 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0633\u06d2 \u0627\u067e\u0646\u06d2 \u0628\u06cc\u0646\u06a9 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0645\u06cc\u06ba \u0631\u0642\u0648\u0645 \u0646\u06a9\u0627\u0644 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0622\u067e \u0627\u067e\u0646\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0631\u0627\u0633\u062a\u06d2 \u0645\u06cc\u06ba \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0641\u06cc\u0633 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631\u06cc \u0645\u0646\u0688\u06cc\u0648\u06ba \u0645\u06cc\u06ba\u060c \u0627\u0633 \u06a9\u0627 \u062d\u0633\u0627\u0628 \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u06a9\u06d2 \u0641\u06cc\u0635\u062f \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c 10% \u06a9\u0645\u06cc\u0634\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2:<\/p>\n<pre><code class=\"language-plaintext\">onst applicationFee = Math.round(\n\u00a0 (price.unit_amount ?? 0) * 0.1\n);\n<\/code><\/pre>\n<h2 id=\"heading-next-steps\"><strong>\u0627\u06af\u0644\u06d2 \u0627\u0642\u062f\u0627\u0645\u0627\u062a<\/strong><\/h2>\n<p>\u06c1\u0645\u0627\u0631\u06d2 \u067e\u0627\u0633 \u0627\u0628 \u0627\u06cc\u06a9 \u0641\u0639\u0627\u0644 \u0645\u0627\u0631\u06a9\u06cc\u0679 \u06c1\u06d2\u06d4 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0645\u06cc\u06ba \u063a\u0648\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0628\u06c1\u062a\u0631\u06cc \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p>NextAuth.js \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062a\u0648\u062b\u06cc\u0642 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u062a\u0627\u062c\u0631 \u0627\u067e\u0646\u06d2 \u0633\u06cc\u0634\u0646\u0632 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0645\u062d\u0641\u0648\u0638 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0644\u0627\u06af \u0627\u0646 \u0627\u0648\u0631 \u0627\u067e\u0646\u06d2 \u0627\u06a9\u0627\u0624\u0646\u0679\u0633 \u06a9\u0627 \u0646\u0638\u0645 \u06a9\u0631 \u0633\u06a9\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u0633\u0679\u0631\u0627\u0626\u067e \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0628\u0627\u0688\u06cc \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 Zod \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0631\u0646 \u0679\u0627\u0626\u0645 \u062a\u0648\u062b\u06cc\u0642 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>Cloudinary \u06cc\u0627 AWS S3 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u067e\u0646\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u060c \u067e\u06be\u0631 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u06d2 URL \u06a9\u0648 Stripe \u06a9\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0679 \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u0644\u06af \u0627\u0644\u06af \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0627\u0648\u0631 \u06a9\u0633\u0679\u0645\u0631 \u06a9\u06d2 \u062e\u06cc\u0627\u0644\u0627\u062a \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0627\u06cc\u067e \u0627\u06cc\u06a9 \u0635\u0641\u062d\u06d2 \u067e\u0631 \u062f\u0648\u0646\u0648\u06ba \u062a\u062c\u0631\u0628\u0627\u062a \u06a9\u0648 \u06cc\u06a9\u062c\u0627 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u067e\u0646\u06d2 \u067e\u0633\u062f\u06cc\u062f \u06a9\u0648 \u0631\u06cc\u0644\u0648\u06d2 \u06cc\u0627 \u0631\u06cc\u0646\u0688\u0631 \u0627\u0648\u0631 \u0627\u067e\u0646\u06d2 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u06a9\u0648 \u0648\u0631\u0633\u0644 \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u067e\u0646\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0633\u0631\u0648\u0631 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0645\u06cc\u06ba \u0648\u06cc\u0628 \u06c1\u06a9 URL \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0622\u067e \u0627\u0633 \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644 \u06a9\u0627 \u0645\u06a9\u0645\u0644 \u0633\u0648\u0631\u0633 \u06a9\u0648\u0688 GitHub (https:\/\/github.com\/michaelokolo\/marketplace) \u067e\u0631 \u062d\u0627\u0635\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-acknowledgements\"><strong>\u0627\u0639\u062a\u0631\u0627\u0641\u0627\u062a<\/strong><\/h2>\n<p>\u0627\u0633 \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644 \u0645\u06cc\u06ba API \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u06a9\u0686\u06be \u0646\u0645\u0648\u0646\u06d2 \u0622\u0641\u06cc\u0634\u0644 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u0645\u06cc\u06ba \u062f\u06cc \u06af\u0626\u06cc \u0645\u062b\u0627\u0644\u0648\u06ba \u0633\u06d2 \u0645\u062a\u0627\u062b\u0631 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0645\u062b\u0627\u0644\u06cc\u06ba \u06cc\u06c1 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06cc\u06ba \u06a9\u06c1 \u0627\u06cc\u06a9 \u0645\u06a9\u0645\u0644 \u0645\u0644\u0679\u06cc \u0648\u06cc\u0646\u0688\u0631 \u0645\u0627\u0631\u06a9\u06cc\u0679 \u067e\u0644\u06cc\u0633 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<h2 id=\"heading-conclusion\"><strong>\u0646\u062a\u06cc\u062c\u06c1<\/strong><\/h2>\n<p>\u0627\u0633 \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0646\u06d2 \u0627\u06cc\u06a9 \u0645\u06a9\u0645\u0644 \u0622\u0646 \u0644\u0627\u0626\u0646 \u0645\u0627\u0631\u06a9\u06cc\u0679 \u067e\u0644\u06cc\u0633 \u0628\u0646\u0627\u06cc\u0627 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u06a9\u0646\u06cc\u06a9\u0679 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0622\u0646 \u0628\u0648\u0631\u0688 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u0633\u0679\u0631\u0627\u0626\u067e \u0645\u06cc\u06ba \u0630\u062e\u06cc\u0631\u06c1 \u0634\u062f\u06c1 \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u0628\u0646\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0633\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0627\u06ba \u0648\u0635\u0648\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0633\u0628 \u06a9\u0633\u06cc \u0645\u0648\u062c\u0648\u062f\u06c1 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0645\u0645\u06a9\u0646 \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u067e \u0646\u06d2 \u0645\u0631\u0686\u0646\u0679 \u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 Stripe&#8217;s V2 Account API \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0633\u06cc\u06a9\u06be\u0627\u060c \u0645\u0646\u0633\u0644\u06a9 \u0627\u06a9\u0627\u0624\u0646\u0679\u0633 \u0645\u06cc\u06ba \u067e\u0631\u0648\u0688\u06a9\u0679\u0633 \u0627\u0648\u0631 \u0642\u06cc\u0645\u062a\u06cc\u06ba \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u0646\u0627\u060c \u06cc\u06a9 \u0648\u0642\u062a\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0648\u06ba \u0627\u0648\u0631 \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646\u0632 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627 \u0628\u06c1\u0627\u0624 \u0628\u0646\u0627\u0646\u0627\u060c \u0648\u06cc\u0628 \u06c1\u06a9\u0633 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0648\u0627\u0642\u0639\u0627\u062a \u0633\u0646\u0646\u0627\u060c \u0627\u0648\u0631 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0627\u0646 \u06a9\u06cc \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646\u0632 \u06a9\u0627 \u0646\u0638\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0628\u0644\u0646\u06af \u067e\u0648\u0631\u0679\u0644 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u0646\u0627 \u0633\u06cc\u06a9\u06be\u0627\u06d4<\/p>\n<p>\u0627\u06c1\u0645 \u0628\u0635\u06cc\u0631\u062a \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 Stripe Connect \u0645\u0627\u0631\u06a9\u06cc\u0679 \u067e\u0644\u06cc\u0633 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u06a9\u06d2 \u0633\u0628 \u0633\u06d2 \u0645\u0634\u06a9\u0644 \u062d\u0635\u0648\u06ba \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0634\u0645\u0648\u0644 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u062a\u0642\u0633\u06cc\u0645\u060c \u0679\u06cc\u06a9\u0633 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0644\u060c \u0634\u0646\u0627\u062e\u062a \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642\u060c \u0627\u0648\u0631 \u0641\u0646\u0688 \u06a9\u06cc \u0645\u0646\u062a\u0642\u0644\u06cc\u06d4 \u0622\u067e \u06a9\u0627 \u06a9\u0627\u0645 \u0627\u0633 \u06a9\u06d2 \u0627\u0648\u067e\u0631 \u0627\u06cc\u06a9 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u0635\u0627\u0631\u0641 \u06a9\u0627 \u062a\u062c\u0631\u0628\u06c1 \u0628\u0646\u0627\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644 \u06a9\u0627\u0631\u0622\u0645\u062f \u0644\u06af\u0627 \u062a\u0648 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u0633\u06d2 \u06a9\u0633\u06cc \u0627\u06cc\u0633\u06d2 \u0634\u062e\u0635 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0634\u06cc\u0626\u0631 \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u0645\u06a9\u0645\u0644 \u0627\u0633\u0679\u06cc\u06a9 \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646\u0632 \u0628\u0646\u0627\u0646\u0627 \u0633\u06cc\u06a9\u06be \u0631\u06c1\u0627 \u06c1\u0648\u06d4 \u0645\u0628\u0627\u0631\u06a9 \u06a9\u0648\u0688\u0646\u06af!<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u06a9\u06cc\u0627 \u0622\u067e \u0646\u06d2 \u06a9\u0628\u06be\u06cc \u0633\u0648\u0686\u0627 \u06c1\u06d2 \u06a9\u06c1 Etsy\u060c Uber\u060c \u06cc\u0627 Teachable \u062c\u06cc\u0633\u06d2 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06c1\u0632\u0627\u0631\u0648\u06ba \u0641\u0631\u0648\u062e\u062a \u06a9\u0646\u0646\u062f\u06af\u0627\u0646 \u06a9\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0648\u06ba \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0633\u0646\u0628\u06be\u0627\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u061f \u062c\u0648\u0627\u0628 \u06c1\u06d2 \u0645\u0644\u0679\u06cc \u0648\u06cc\u0646\u0688\u0631 \u0645\u0627\u0631\u06a9\u06cc\u0679 \u067e\u0644\u06cc\u0633: \u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u06cc \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646 \u06c1\u06d2 \u062c\u0648 \u0628\u06cc\u0686\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u06a9\u0648 \u0633\u0627\u0626\u0646 \u0627\u067e \u06a9\u0631\u0646\u06d2\u060c \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u06cc\u0627 \u062e\u062f\u0645\u0627\u062a \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0628\u0646\u0627\u0646\u06d2 \u0627\u0648\u0631 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0633\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0648\u0635\u0648\u0644 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-22249","post","type-post","status-publish","format-standard","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/22249","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/comments?post=22249"}],"version-history":[{"count":0,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/22249\/revisions"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media?parent=22249"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/categories?post=22249"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/tags?post=22249"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}