{"id":28239,"date":"2026-08-25T00:02:35","date_gmt":"2026-08-25T00:02:35","guid":{"rendered":"https:\/\/umang.pk\/2026\/08\/25\/%d8%ac%db%8c%d9%86%da%af%d9%88-%d9%85%db%8c%da%ba-%d8%b1%db%8c%d9%81%d8%b1%d9%84-%d8%b3%db%92-%d8%a2%da%af%d8%a7%db%81-%d8%aa%d9%82%d8%b3%db%8c%d9%85-%d8%a7%d8%af%d8%a7%d8%a6%db%8c%da%af%db%8c-%da%a9\/"},"modified":"2026-08-25T00:02:35","modified_gmt":"2026-08-25T00:02:35","slug":"%d8%ac%db%8c%d9%86%da%af%d9%88-%d9%85%db%8c%da%ba-%d8%b1%db%8c%d9%81%d8%b1%d9%84-%d8%b3%db%92-%d8%a2%da%af%d8%a7%db%81-%d8%aa%d9%82%d8%b3%db%8c%d9%85-%d8%a7%d8%af%d8%a7%d8%a6%db%8c%da%af%db%8c-%da%a9","status":"publish","type":"post","link":"https:\/\/umang.pk\/ur\/2026\/08\/25\/%d8%ac%db%8c%d9%86%da%af%d9%88-%d9%85%db%8c%da%ba-%d8%b1%db%8c%d9%81%d8%b1%d9%84-%d8%b3%db%92-%d8%a2%da%af%d8%a7%db%81-%d8%aa%d9%82%d8%b3%db%8c%d9%85-%d8%a7%d8%af%d8%a7%d8%a6%db%8c%da%af%db%8c-%da%a9\/","title":{"rendered":"\u062c\u06cc\u0646\u06af\u0648 \u0645\u06cc\u06ba \u0631\u06cc\u0641\u0631\u0644 \u0633\u06d2 \u0622\u06af\u0627\u06c1 \u062a\u0642\u0633\u06cc\u0645 \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"},"content":{"rendered":"\n<div id=\"\">\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u06cc \u0627\u06cc\u06a9 \u06c1\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u0645\u0646\u0637\u0642 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0622\u0633\u0627\u0646 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0635\u0627\u0631\u0641 \u0633\u06d2 \u0686\u0627\u0631\u062c \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0622\u0631\u0688\u0631 \u06a9\u0648 \u0628\u0637\u0648\u0631 \u0627\u062f\u0627 \u0634\u062f\u06c1 \u0646\u0634\u0627\u0646 \u0632\u062f \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0622\u06af\u06d2 \u0628\u0691\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0644\u06cc\u06a9\u0646 \u062c\u0628 \u0622\u067e \u06a9\u06d2 \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0645\u0627\u0688\u0644 \u0645\u06cc\u06ba \u0627\u0628\u06be\u06cc \u0688\u067e\u0627\u0632\u0679\u060c \u0628\u0639\u062f \u0645\u06cc\u06ba \u0628\u06cc\u0644\u0646\u0633\u060c \u0627\u0648\u0631 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0645\u06cc\u06ba \u0631\u06cc\u0641\u0631\u0644 \u06cc\u0627 \u06a9\u0648\u067e\u0646 \u0627\u0646\u062a\u0633\u0627\u0628 \u0634\u0627\u0645\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0645\u0633\u0626\u0644\u06c1 \u0628\u0627\u0644\u06a9\u0644 \u0645\u062e\u062a\u0644\u0641 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0648\u0642\u062a\u060c \u0622\u067e \u0635\u0631\u0641 \u067e\u06cc\u0633\u06c1 \u0646\u06c1\u06cc\u06ba \u0628\u0691\u06be\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644 \u0645\u06cc\u06ba\u060c \u0645\u06cc\u06ba \u0622\u067e \u06a9\u0648 \u062f\u06a9\u06be\u0627\u0624\u06ba \u06af\u0627 \u06a9\u06c1 \u062c\u06cc\u0646\u06af\u0648 \u0645\u06cc\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u0631\u06cc\u0641\u0631\u0644 \u0622\u06af\u0627\u06c1\u06cc \u062a\u0642\u0633\u06cc\u0645 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0628\u06c1\u0627\u0624 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p>\u0645\u0631\u062d\u0644\u06c1 2: \u0688\u067e\u0627\u0632\u0679\u0633 \u0627\u0648\u0631 \u0628\u06cc\u0644\u0646\u0633 \u06a9\u0648 \u0627\u0644\u06af \u0633\u06d2 \u0679\u0631\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0648\u067e\u0646 \u0627\u0648\u0631 \u067e\u0627\u0631\u0679\u0646\u0631 \u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0633\u067e\u0648\u0631\u0679<\/p>\n<\/li>\n<li>\n<p>\u0688\u067e\u0644\u06cc\u06a9\u06cc\u0679 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u067e\u0631\u0648\u0633\u06cc\u0633\u0646\u06af \u0633\u06d2 \u0628\u0686\u06cc\u06ba<\/p>\n<\/li>\n<li>\n<p>\u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06d2 \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0631\u06cc\u0641\u0631\u0644 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0648\u06ba \u06a9\u0648 \u0645\u0633\u062a\u0642\u0644 \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0648\u0631\u06a9 \u0641\u0644\u0648 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u06c1\u06cc \u0688\u06cc\u0644\u06cc\u0648\u0631\u06cc \u0627\u06cc\u0628\u0644\u0632 \u06a9\u0648 \u063a\u06cc\u0631 \u0645\u0642\u0641\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0645\u0631\u06a9\u0632\u06cc \u062e\u06cc\u0627\u0644 \u0633\u0627\u062f\u06c1 \u06c1\u06d2\u06d4 \u062e\u06cc\u0627\u0644 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0648 \u0648\u06cc\u0628 \u06c1\u06a9 \u0627\u06cc\u0648\u0646\u0679 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0631\u06cc\u0627\u0633\u062a\u06cc \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<h3 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h3>\n<h2 id=\"heading-prerequisites\">\u0634\u0631\u0637\u06cc\u06ba<\/h2>\n<p>\u0627\u0646 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0622\u067e \u06a9\u0648 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u062f\u0631\u062c \u0630\u06cc\u0644 \u0633\u06d2 \u0648\u0627\u0642\u0641 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2:<\/p>\n<ul>\n<li>\n<p>\u062c\u06cc\u0646\u06af\u0648 \u0645\u0627\u0688\u0644\u0632\u060c \u0622\u0631\u0627\u0621\u060c \u0627\u0648\u0631 \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u06d2 \u0633\u06cc\u0679<\/p>\n<\/li>\n<li>\n<p>\u062c\u06cc\u0646\u06af\u0648 \u0645\u06cc\u06ba \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06d2 \u0644\u06cc\u0646 \u062f\u06cc\u0646<\/p>\n<\/li>\n<li>\n<p>\u0628\u0646\u06cc\u0627\u062f\u06cc \u0648\u06cc\u0628 \u06c1\u06a9 \u062a\u0635\u0648\u0631\u0627\u062a<\/p>\n<\/li>\n<li>\n<p>Python \u06a9\u0644\u0627\u0633 \u067e\u0631 \u0645\u0628\u0646\u06cc \u06cc\u0627 \u0641\u0646\u06a9\u0634\u0646 \u067e\u0631 \u0645\u0628\u0646\u06cc \u0645\u0646\u0638\u0631 \u06a9\u06d2 \u0646\u0645\u0648\u0646\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0633\u0679\u0631\u0627\u0626\u067e \u06cc\u0627 \u067e\u06d2 \u0627\u0633\u0679\u06cc\u06a9 \u062c\u06cc\u0633\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0627\u06cc\u0648\u0646\u0679 \u06a9\u0627\u0644 \u0628\u06cc\u06a9\u0633 \u06a9\u06cc\u0633\u06d2 \u0628\u06be\u06cc\u062c\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0622\u067e \u06a9\u0648 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0648\u06ba \u06a9\u0627 \u0645\u0627\u06c1\u0631 \u0628\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u0633\u0645\u062c\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u06a9\u06c1 Django \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u06cc\u0633\u06d2 \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06cc\u06c1 \u06a9\u06cc\u0633\u06d2 \u0645\u062d\u0641\u0648\u0638 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0627\u0633\u0679\u06cc\u0679 \u06a9\u0648 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-project-structure\">\u0645\u0646\u0635\u0648\u0628\u06d2 \u06a9\u06cc \u0633\u0627\u062e\u062a<\/h2>\n<p>\u0645\u0637\u0644\u0648\u0628\u06c1 \u062d\u0635\u0648\u06ba \u06a9\u06cc \u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 \u0633\u0627\u062e\u062a \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-text\">payments\/\n\u251c\u2500\u2500 models.py\n\u251c\u2500\u2500 services.py\n\u251c\u2500\u2500 views.py\n\u251c\u2500\u2500 urls.py\n\u2514\u2500\u2500 webhooks.py\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0639\u0644\u06cc\u062d\u062f\u06af\u06cc \u0627\u06c1\u0645 \u06c1\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p><code>models.py<\/code>    \u0627\u067e\u0646\u06cc \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u062d\u0627\u0644\u062a \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>services.py<\/code>    \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0645\u0646\u0637\u0642 \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>views.py<\/code>    \u0635\u0627\u0631\u0641 \u06a9\u0627 \u0633\u0627\u0645\u0646\u0627 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc\u0648\u06ba \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>webhooks.py<\/code>    \u06af\u06cc\u0679 \u0648\u06d2 \u06a9\u0627\u0644 \u0628\u06cc\u06a9 \u0648\u0635\u0648\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><code>urls.py<\/code>    \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0645\u0642\u0627\u0645\u0627\u062a \u06a9\u0648 \u062c\u0648\u0691\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0646\u0638\u0631\u0648\u06ba \u0633\u06d2 \u0627\u0648\u062c\u06be\u0644 \u0631\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u0633\u0633\u0679\u0645 \u06a9\u0648 \u062c\u0627\u0646\u0686\u0646\u0627 \u0622\u0633\u0627\u0646 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062a\u0648\u0691\u0646\u0627 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u0634\u06a9\u0644 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-designing-the-data-model\">\u0688\u06cc\u0679\u0627 \u0645\u0627\u0688\u0644 \u0688\u06cc\u0632\u0627\u0626\u0646<\/h2>\n<p>\u0633\u0628 \u0633\u06d2 \u0627\u06c1\u0645 \u0641\u06cc\u0635\u0644\u06c1 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0645\u0631\u0627\u062d\u0644 \u06a9\u0648 \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0645\u0627\u0688\u0644 \u0628\u0646\u0627\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0645\u0628\u06c1\u0645 &quot;\u0627\u062f\u0627 \u06a9\u0631\u062f\u06c1&#8221; \u062c\u06be\u0646\u0688\u0627 \u0628\u0686\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0627\u0646 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u0622\u067e \u06a9\u0627 \u06a9\u0627\u0631\u0648\u0628\u0627\u0631 \u062f\u0631\u062d\u0642\u06cc\u0642\u062a \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631:<\/p>\n<pre><code class=\"language-python\">from django.db import models\nfrom django.conf import settings\n\nclass Journey(models.Model):\n    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)\n    deposit_paid = models.BooleanField(default=False)\n    balance_paid = models.BooleanField(default=False)\n    deliverables_released = models.BooleanField(default=False)\n    referral_code = models.CharField(max_length=50, blank=True, default=\"\")\n    partner_name = models.CharField(max_length=120, blank=True, default=\"\")\n    created_at = models.DateTimeField(auto_now_add=True)\n\nclass Payment(models.Model):\n    STAGE_DEPOSIT = \"deposit\"\n    STAGE_BALANCE = \"balance\"\n\n    STAGE_CHOICES = [\n        (STAGE_DEPOSIT, \"Deposit\"),\n        (STAGE_BALANCE, \"Balance\"),\n    ]\n\n    STATUS_PENDING = \"pending\"\n    STATUS_SUCCEEDED = \"succeeded\"\n    STATUS_FAILED = \"failed\"\n\n    STATUS_CHOICES = [\n        (STATUS_PENDING, \"Pending\"),\n        (STATUS_SUCCEEDED, \"Succeeded\"),\n        (STATUS_FAILED, \"Failed\"),\n    ]\n\n    journey = models.ForeignKey(Journey, on_delete=models.CASCADE, related_name=\"payments\")\n    stage = models.CharField(max_length=20, choices=STAGE_CHOICES)\n    gateway_reference = models.CharField(max_length=120, unique=True)\n    amount = models.DecimalField(max_digits=10, decimal_places=2)\n    discount_amount = models.DecimalField(max_digits=10, decimal_places=2, default=0)\n    net_amount = models.DecimalField(max_digits=10, decimal_places=2)\n    status = models.CharField(max_length=20, choices=STATUS_CHOICES, default=STATUS_PENDING)\n    raw_payload = models.JSONField(null=True, blank=True)\n    finalized_at = models.DateTimeField(null=True, blank=True)\n\nclass ReferralPayout(models.Model):\n    payment = models.OneToOneField(Payment, on_delete=models.CASCADE, related_name=\"referral_payout\")\n    partner_name = models.CharField(max_length=120)\n    amount = models.DecimalField(max_digits=10, decimal_places=2)\n    is_paid = models.BooleanField(default=False)\n    created_at = models.DateTimeField(auto_now_add=True)\n<\/code><\/pre>\n<p>\u0627\u0633 \u0645\u0627\u0688\u0644 \u06a9\u0627 \u0688\u06cc\u0632\u0627\u0626\u0646 \u0635\u0627\u0641 \u0639\u0644\u06cc\u062d\u062f\u06af\u06cc \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p><code>Journey<\/code>    \u06af\u0627\u06c1\u06a9 \u06a9\u06cc \u0645\u062c\u0645\u0648\u0639\u06cc \u062a\u0631\u0642\u06cc \u06a9\u06cc \u0646\u0634\u0627\u0646\u062f\u06c1\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>Payment<\/code>    \u06c1\u0631 \u0645\u0627\u0644\u06cc\u0627\u062a\u06cc \u062a\u0642\u0631\u06cc\u0628 \u06a9\u06cc \u0646\u0645\u0627\u0626\u0646\u062f\u06af\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>ReferralPayout<\/code>    \u06cc\u06c1 \u0646\u0645\u0627\u0626\u0646\u062f\u06af\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u067e\u0627\u0631\u0679\u0646\u0631 \u06a9\u0648 \u0627\u0633 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0633\u06d2 \u06a9\u062a\u0646\u06cc \u0622\u0645\u062f\u0646\u06cc \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u06cc\u06c1 \u0639\u0644\u06cc\u062d\u062f\u06af\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0642\u0627\u0628\u0644 \u0627\u0646\u062a\u0638\u0627\u0645 \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-how-split-payments-work\">\u062a\u0642\u0633\u06cc\u0645 \u0634\u062f\u06c1 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/h2>\n<p>\u0642\u0633\u0637 \u06a9\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 \u067e\u06cc\u0679\u0631\u0646 \u06a9\u06cc \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<ol>\n<li>\n<p>\u06a9\u0633\u0679\u0645\u0631 \u0688\u067e\u0627\u0632\u0679 \u0627\u062f\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0688\u067e\u0627\u0632\u0679\u0633 \u06a9\u0627 \u0633\u0633\u0679\u0645 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u0628\u0646\u0627\u06cc\u0627<\/p>\n<\/li>\n<li>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0622\u067e \u06a9\u0627 \u0628\u06cc\u0644\u0646\u0633 \u0635\u0627\u0641 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p>\u067e\u0648\u0631\u0627 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062f\u0631\u0633\u062a \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06a9\u06d2 \u0628\u0639\u062f \u06c1\u06cc \u0688\u06cc\u0644\u06cc\u0648\u0631\u06cc \u0627\u06cc\u0628\u0644\u0632 \u06a9\u0648 \u063a\u06cc\u0631 \u0645\u0642\u0641\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u06c1\u0645 \u062d\u0635\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627 \u06c1\u0631 \u0645\u0631\u062d\u0644\u06c1 \u0648\u0627\u0636\u062d \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0688\u067e\u0627\u0632\u0679\u0633 \u0627\u0648\u0631 \u0628\u06cc\u0644\u0646\u0633 \u06a9\u0648 \u062f\u0648 \u0645\u062e\u062a\u0644\u0641 \u0633\u0646\u06af \u0645\u06cc\u0644 \u0645\u0627\u0646\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p>\u0631\u0639\u0627\u06cc\u062a \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u062f\u0631\u062c\u06d2 \u067e\u0631 \u0644\u0627\u06af\u0648 \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2 \u0646\u06c1 \u06a9\u06c1 \u062f\u0648\u0633\u0631\u06d2 \u062f\u0631\u062c\u0648\u06ba \u067e\u0631\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0633\u0641\u0627\u0631\u0634\u06cc \u0627\u0646\u062a\u0633\u0627\u0628 \u06a9\u0648 \u0645\u0631\u062d\u0644\u06c1 \u0648\u0627\u0631 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0635\u0631\u0641 \u0627\u0633 \u0648\u0642\u062a \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2 \u062c\u0628 \u06a9\u0648\u0626\u06cc \u0645\u0631\u062d\u0644\u06c1 \u062f\u0631\u062d\u0642\u06cc\u0642\u062a \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u0646\u062a\u0638\u0645\u06cc\u0646 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u06a9\u06cc \u0635\u062d\u06cc\u062d \u062d\u06cc\u062b\u06cc\u062a \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u06cc\u06c1 \u0635\u0631\u0641 \u0645\u0642\u062f\u0627\u0631 \u0633\u06d2 \u0645\u0639\u0646\u06cc \u0646\u06a9\u0627\u0644\u0646\u06d2 \u0633\u06d2 \u06a9\u06c1\u06cc\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u0645\u062d\u0641\u0648\u0638 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-finalizing-payments-safely\">\u0645\u062d\u0641\u0648\u0638 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0645\u06a9\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u062d\u062a\u0645\u06cc \u0645\u0646\u0637\u0642 \u0633\u0631\u0648\u0633 \u0641\u0646\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2\u060c \u0648\u06cc\u0628 \u06c1\u06a9 \u0648\u06cc\u0648 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 \u0645\u062b\u0627\u0644 \u06cc\u06c1 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-python\">from django.db import transaction\nfrom django.utils import timezone\n\ndef finalize_payment(*, payment):\n    with transaction.atomic():\n        locked_payment = Payment.objects.select_for_update().select_related(\"journey\").get(pk=payment.pk)\n\n        if locked_payment.status == Payment.STATUS_SUCCEEDED:\n            return locked_payment\n\n        locked_payment.status = Payment.STATUS_SUCCEEDED\n        locked_payment.finalized_at = timezone.now()\n        locked_payment.save(update_fields=[\"status\", \"finalized_at\"])\n\n        journey = locked_payment.journey\n\n        if locked_payment.stage == Payment.STAGE_DEPOSIT:\n            journey.deposit_paid = True\n        elif locked_payment.stage == Payment.STAGE_BALANCE:\n            journey.balance_paid = True\n\n        if journey.deposit_paid and journey.balance_paid:\n            journey.deliverables_released = True\n\n        journey.save(update_fields=[\"deposit_paid\", \"balance_paid\", \"deliverables_released\"])\n\n        if journey.referral_code and not hasattr(locked_payment, \"referral_payout\"):\n            ReferralPayout.objects.create(\n                payment=locked_payment,\n                partner_name=journey.partner_name,\n                amount=locked_payment.net_amount * 0.10,\n            )\n\n        return locked_payment\n<\/code><\/pre>\n<p>\u06cc\u06c1\u0627\u06ba \u062a\u06cc\u0646 \u0627\u06c1\u0645 \u062e\u06cc\u0627\u0644\u0627\u062a \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 <code>transaction.atomic()<\/code> \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0627\u067e \u0688\u06cc\u0679\u0633 \u0627\u06cc\u06a9 \u06cc\u0648\u0646\u0679 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062f\u0648\u0633\u0631\u0627 <code>select_for_update()<\/code> \u062f\u0648 \u0639\u0645\u0644\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u06c1\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0642\u0637\u0627\u0631\u0648\u06ba \u06a9\u0648 \u0645\u0642\u0641\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u062a\u06cc\u0633\u0631\u0627\u060c \u06cc\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u06c1\u0644\u06cc\u062a \u06a9\u06c1 \u0622\u06cc\u0627 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06c1\u0648 \u0686\u06a9\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u062d\u0641\u0648\u0638 \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0642\u0627\u0628\u0644 \u062a\u06a9\u0645\u06cc\u0644 \u0631\u0627\u0633\u062a\u06c1 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-handling-webhooks-idempotently\">\u0648\u06cc\u0628 \u06c1\u06a9\u0633 \u06a9\u0648 \u0633\u0645\u062c\u06be\u062f\u0627\u0631\u06cc \u0633\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u0646\u0627<\/h2>\n<p>\u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627 \u06af\u06cc\u0679 \u0648\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u06cc\u0628 \u06c1\u06a9 \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0628\u0627\u0631 \u0628\u06be\u06cc\u062c \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0648\u06cc\u0628 \u06c1\u064f\u06a9 \u06c1\u06cc\u0646\u0688\u0644\u0631 \u06a9\u0627 \u0622\u0626\u06cc\u0688\u06cc\u0645\u067e\u0648\u0679\u06cc\u0646\u0679 \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u060c \u062c\u0633 \u06a9\u0627 \u0633\u06cc\u062f\u06be\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u0688\u067e\u0644\u06cc\u06a9\u06cc\u0679 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u0628\u0646\u0627\u0626\u06d2 \u06cc\u0627 \u06a9\u0631\u067e\u0679 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062d\u0627\u0644\u062a \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0626\u06cc \u0628\u0627\u0631 \u0645\u062d\u0641\u0648\u0638 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0686\u0644\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0635\u0627\u0641 \u0646\u0645\u0648\u0646\u06c1 \u06cc\u06c1 \u06c1\u0648\u06af\u0627:<\/p>\n<pre><code class=\"language-python\">import json\nfrom django.http import HttpResponse, JsonResponse\nfrom django.views.decorators.csrf import csrf_exempt\nfrom django.views.decorators.http import require_POST\n\n@csrf_exempt\n@require_POST\ndef payment_webhook(request):\n    payload = json.loads(request.body.decode(\"utf-8\"))\n\n    event_type = payload.get(\"event\")\n    data = payload.get(\"data\", {})\n    reference = data.get(\"reference\")\n\n    if not reference:\n        return JsonResponse({\"error\": \"Missing reference\"}, status=400)\n\n    if event_type != \"charge.success\":\n        return HttpResponse(status=200)\n\n    payment = Payment.objects.filter(gateway_reference=reference).first()\n    if not payment:\n        return JsonResponse({\"error\": \"Payment not found\"}, status=404)\n\n    finalize_payment(payment=payment)\n    return HttpResponse(status=200)\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0646\u0638\u0631\u06cc\u06c1 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0686\u06be\u0648\u0679\u0627 \u0631\u06a9\u06be\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0642\u0648\u0627\u0646\u06cc\u0646 \u06a9\u0627 \u062a\u0639\u06cc\u0646 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0635\u0631\u0641 \u0648\u06cc\u0628 \u06c1\u06a9 \u06a9\u0648 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u0631\u0642\u0645 \u062a\u0644\u0627\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0633\u0631\u0648\u0633 \u0644\u06cc\u0626\u0631 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u062c\u0627\u0646\u0686 \u0627\u0648\u0631 \u0688\u06cc\u0628\u06af\u0646\u06af \u06a9\u0648 \u0628\u06c1\u062a \u0622\u0633\u0627\u0646 \u0628\u0646\u0627 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-applying-coupons-and-referral-attribution\">\u06a9\u0648\u067e\u0646\u0632 \u0627\u0648\u0631 \u0631\u06cc\u0641\u0631\u0644 \u06a9\u0646\u0679\u0631\u06cc\u0628\u06cc\u0648\u0634\u0646\u0632 \u06a9\u0627 \u0627\u0637\u0644\u0627\u0642 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u062c\u0628 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0648\u06ba \u06a9\u0648 \u0645\u062a\u0639\u062f\u062f \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u06a9\u0648\u067e\u0646 \u0627\u0648\u0631 \u067e\u0627\u0631\u0679\u0646\u0631 \u06a9\u0648\u0688 \u0645\u0634\u06a9\u0644 \u06c1\u0648 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u06a9\u0648\u067e\u0646 \u0635\u0631\u0641 \u0688\u067e\u0627\u0632\u0679\u0633 \u067e\u0631 \u0644\u0627\u06af\u0648 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u0627 \u06cc\u06c1 \u0635\u0631\u0641 \u0622\u067e \u06a9\u06d2 \u0628\u06cc\u0644\u0646\u0633 \u067e\u0631 \u0644\u0627\u06af\u0648 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u0627 \u0634\u0627\u06cc\u062f \u06cc\u06c1 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0645\u062a\u0627\u062b\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0628\u06c1\u062a\u0631\u06cc\u0646 \u062d\u0644 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0646 \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u0648 \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0645\u062d\u0641\u0648\u0638 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<p>\u0627\u0633\u0679\u06cc\u062c \u0633\u06d2 \u0622\u06af\u0627\u06c1\u06cc \u06a9\u0648\u067e\u0646 \u0645\u0646\u0637\u0642 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06cc\u06c1\u0627\u06ba \u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 \u0645\u0627\u0688\u0644 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-python\">class DiscountCode(models.Model):\n    APPLIES_DEPOSIT = \"deposit\"\n    APPLIES_BALANCE = \"balance\"\n    APPLIES_BOTH = \"both\"\n\n    APPLIES_CHOICES = [\n        (APPLIES_DEPOSIT, \"Deposit only\"),\n        (APPLIES_BALANCE, \"Balance only\"),\n        (APPLIES_BOTH, \"Both stages\"),\n    ]\n\n    code = models.CharField(max_length=50, unique=True)\n    partner_name = models.CharField(max_length=120, blank=True, default=\"\")\n    applies_to = models.CharField(max_length=20, choices=APPLIES_CHOICES, default=APPLIES_BOTH)\n    percent_off = models.PositiveSmallIntegerField(default=0)\n    is_active = models.BooleanField(default=True)\n<\/code><\/pre>\n<p>\u0686\u06cc\u06a9 \u0622\u0624\u0679 \u0641\u0644\u0648 \u0627\u0628 \u0686\u06cc\u06a9 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u06a9\u0648\u067e\u0646 \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0645\u0631\u062d\u0644\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u0633\u062a \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u062f\u062f\u06af\u0627\u0631 \u0627\u0641\u0639\u0627\u0644 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-python\">def calculate_discount(amount, coupon, stage):\n    if not coupon or not coupon.is_active:\n        return 0\n\n    if coupon.applies_to == DiscountCode.APPLIES_DEPOSIT and stage != Payment.STAGE_DEPOSIT:\n        return 0\n\n    if coupon.applies_to == DiscountCode.APPLIES_BALANCE and stage != Payment.STAGE_BALANCE:\n        return 0\n\n    return amount * (coupon.percent_off \/ 100)\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0622\u067e \u06a9\u06cc \u0633\u0641\u0627\u0631\u0634 \u0627\u0648\u0631 \u06a9\u0648\u067e\u0646 \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0642\u0627\u0628\u0644 \u0642\u06cc\u0627\u0633 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-why-the-referral-payout-should-be-explicit\">\u0631\u06cc\u0641\u0631\u0644 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0648\u06ba \u06a9\u0648 \u0648\u0627\u0636\u062d \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06a9\u06cc\u0648\u06ba \u06c1\u06d2\u06d4<\/h2>\n<p>\u0628\u06c1\u062a \u0633\u06d2 \u0646\u0638\u0627\u0645 \u063a\u0644\u0637\u06cc \u0633\u06d2 \u062f\u0631\u062c \u0630\u06cc\u0644 \u062e\u06cc\u0627\u0644\u0627\u062a \u06a9\u0648 \u0645\u0644\u0627 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p>\u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u06af\u0626\u06cc\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0648\u067e\u0646 \u0644\u06af\u0627 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0622\u067e \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062c\u0645\u0639 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062d\u0648\u0627\u0644\u06c1 \u062f\u06cc\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0646\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0648\u06c1 \u0627\u06cc\u06a9 \u06c1\u06cc \u0686\u06cc\u0632 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u067e \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0631\u06cc\u0641\u0631\u0644 \u06a9\u0648\u0688 \u0645\u0646\u0633\u0644\u06a9 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0635\u0644 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0635\u0631\u0641 \u0627\u0633\u06cc \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u067e\u06cc\u062f\u0627 \u06a9\u06cc \u062c\u0627\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2 \u062c\u0628 \u0627\u0633\u06d2 \u0622\u067e \u06a9\u06d2 \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0642\u0648\u0627\u0639\u062f \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0645\u062d\u0641\u0648\u0638 \u0633\u0645\u062c\u06be\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<p>\u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u0622\u067e \u0641\u06cc\u0635\u0644\u06c1 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u0688\u067e\u0627\u0632\u0679 \u0627\u062f\u0627 \u06a9\u0631 \u062f\u06cc\u06ba \u06af\u06d2\u060c \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0631\u0679\u0646\u0631 \u06a9\u0648 \u06a9\u0631\u06cc\u0688\u0679 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0622\u067e \u06a9\u0627 \u0628\u06cc\u0644\u0646\u0633 \u062e\u062a\u0645 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u06c1\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0627\u06ba \u062a\u06cc\u0627\u0631 \u06a9\u06cc \u062c\u0627\u0626\u06cc\u06ba \u06af\u06cc\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u0631\u0642\u0645 \u062d\u062a\u0645\u06cc \u062e\u0627\u0644\u0635 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u0631\u0642\u0645 \u067e\u0631 \u0645\u0628\u0646\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u06cc\u06c1 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u062c\u0644\u062f \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2 \u0627\u06af\u0631 \u0648\u06c1 \u067e\u0648\u0631\u0627 \u0628\u06c1\u0627\u0624 \u0645\u06a9\u0645\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-unlocking-deliverables-at-the-right-time\">\u0635\u062d\u06cc\u062d \u0648\u0642\u062a \u067e\u0631 \u0688\u06cc\u0644\u06cc\u0648\u0631\u06cc \u0627\u06cc\u0628\u0644\u0632 \u06a9\u0648 \u063a\u06cc\u0631 \u0645\u0642\u0641\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u062a\u0642\u0633\u06cc\u0645 \u0634\u062f\u06c1 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0646\u0638\u0627\u0645 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0633\u0628 \u0633\u06d2 \u0628\u0691\u06cc \u063a\u0644\u0637\u06cc\u0648\u06ba \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u067e\u06c1\u0644\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0628\u0639\u062f \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u063a\u06cc\u0631 \u0645\u0642\u0641\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0633\u06d2 \u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u0627\u0648\u0631 \u0627\u0639\u062a\u0645\u0627\u062f \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644 \u067e\u06cc\u062f\u0627 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0628\u06c1\u062a\u0631 \u0627\u0635\u0648\u0644 \u06cc\u06c1 \u06c1\u0648\u06af\u0627:<\/p>\n<p>\u06c1\u0645 \u0627\u0633 \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0628\u06c1\u062a \u0633\u0627\u062f\u06c1 \u0631\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>Journey<\/code> \u0645\u0627\u0688\u0644:<\/p>\n<pre><code class=\"language-python\">def update_delivery_state(journey):\n    journey.deliverables_released = journey.deposit_paid and journey.balance_paid\n    journey.save(update_fields=[\"deliverables_released\"])\n<\/code><\/pre>\n<p>\u0645\u0646\u0637\u0642 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644\u060c \u0642\u0627\u0628\u0644 \u0622\u0632\u0645\u0627\u0626\u0634\u060c \u0627\u0648\u0631 \u0645\u0646\u062a\u0638\u0645\u06cc\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0645\u062c\u06be\u0646\u0627 \u0622\u0633\u0627\u0646 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-common-mistakes\">\u0639\u0627\u0645 \u063a\u0644\u0637\u06cc\u0627\u06ba<\/h2>\n<p>\u0648\u06c1 \u063a\u0644\u0637\u06cc\u0627\u06ba \u062c\u0648 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0642\u0633\u0637\u0648\u06ba \u06a9\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0646\u0638\u0627\u0645 \u0645\u06cc\u06ba \u0645\u0633\u0627\u0626\u0644 \u06a9\u0627 \u0628\u0627\u0639\u062b \u0628\u0646\u062a\u06cc \u06c1\u06cc\u06ba \u0627\u0646 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba:<\/p>\n<h4 id=\"heading-1-using-one-payment-flag-for-everything\">1. \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627 \u062c\u06be\u0646\u0688\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h4>\n<p>\u0627\u06a9\u06cc\u0644\u0627 <code>paid=True<\/code> \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u06a9\u0627\u0631\u0648\u0628\u0627\u0631 \u0645\u06cc\u06ba \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0645\u062a\u0639\u062f\u062f \u0645\u0631\u0627\u062d\u0644 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u06a9\u0627\u0641\u06cc \u0641\u06cc\u0644\u0688\u0632 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-2-letting-the-webhook-write-directly-to-many-tables\">2. \u0648\u06cc\u0628 \u06c1\u06a9\u0633 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0645\u062a\u0639\u062f\u062f \u0679\u06cc\u0628\u0644\u0632 \u067e\u0631 \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u06ba\u06d4<\/h4>\n<p>\u06cc\u06c1 \u0628\u06c1\u0627\u0624 \u06a9\u0648 \u062c\u0627\u0646\u0686\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u0634\u06a9\u0644 \u0627\u0648\u0631 \u0679\u0648\u0679 \u067e\u06be\u0648\u0679 \u06a9\u0627 \u0634\u06a9\u0627\u0631 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0633\u0631\u0648\u0633 \u0644\u06cc\u0626\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-3-forgetting-idempotency\">3. \u0628\u06d2 \u062d\u0633\u06cc \u06a9\u0648 \u0628\u06be\u0648\u0644 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/h4>\n<p>\u0627\u06af\u0631 \u06af\u06cc\u0679 \u0648\u06d2 \u0648\u06cc\u0628 \u06c1\u06a9 \u06a9\u06cc \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0627\u0633\u06d2 \u0688\u067e\u0644\u06cc\u06a9\u06cc\u0679 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc\u0627\u06ba \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u06cc \u0686\u0627\u06c1\u0626\u06cc\u06ba \u06cc\u0627 \u0633\u0641\u0631 \u06a9\u0648 \u062f\u0648 \u0628\u0627\u0631 \u0627\u067e \u0688\u06cc\u0679 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<h4 id=\"heading-4-applying-coupons-without-checking-the-stage\">4. \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0648\u067e\u0646 \u0644\u06af\u0627\u0626\u06cc\u06ba\u06d4<\/h4>\n<p>\u0627\u06cc\u06a9 \u06a9\u0648\u0688 \u062c\u0648 \u0688\u067e\u0627\u0632\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u0633\u062a \u06c1\u06d2 \u0648\u06c1 \u0622\u067e \u06a9\u06d2 \u0628\u06cc\u0644\u0646\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u0633\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u0648 \u0633\u06a9\u062a\u0627\u06d4<\/p>\n<h4 id=\"heading-5-releasing-deliverables-too-early\">5. \u0628\u06c1\u062a \u062c\u0644\u062f \u0646\u062a\u0627\u0626\u062c \u062c\u0627\u0631\u06cc \u06a9\u0631\u0646\u0627<\/h4>\n<p>\u0645\u06a9\u0645\u0644 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u0645\u06cc\u0634\u06c1 \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06a9\u06c1 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-conclusion\">\u0646\u062a\u06cc\u062c\u06c1<\/h2>\n<p>\u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u06af\u06cc\u0679 \u0648\u06cc\u0632 \u06a9\u06cc \u0628\u062f\u0648\u0644\u062a \u062d\u0648\u0627\u0644\u06c1 \u0633\u06d2 \u0622\u06af\u0627\u06c1 \u062a\u0642\u0633\u06cc\u0645 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0627 \u0646\u0638\u0627\u0645 \u0645\u0634\u06a9\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0645\u0634\u06a9\u0644 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0642\u0648\u0627\u0639\u062f \u06a9\u062b\u06cc\u0631 \u0633\u0637\u062d\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u067e\u0646\u06d2 \u0633\u0633\u0679\u0645 \u06a9\u06d2 \u0627\u0633\u062a\u062d\u06a9\u0627\u0645 \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0622\u067e \u06a9\u0648:<\/p>\n<ul>\n<li>\n<p>\u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u06c1\u0631 \u0642\u062f\u0645 \u06a9\u0648 \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0645\u0627\u0688\u0644 \u0628\u0646\u0627\u0626\u06cc\u06ba<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0648\u067e\u0646 \u0627\u0648\u0631 \u0633\u0641\u0627\u0631\u0634\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0627\u0644\u06af \u0633\u06d2 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u0645\u06a9\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>transaction.atomic()<\/code><\/p>\n<\/li>\n<li>\n<p>\u0627\u06cc\u06a9 \u0642\u0637\u0627\u0631 \u0628\u0646\u062f \u06a9\u0631\u0648 <code>select_for_update()<\/code><\/p>\n<\/li>\n<li>\n<p>\u0648\u06cc\u0628 \u06c1\u064f\u06a9 \u067e\u0631\u0648\u0633\u06cc\u0633\u0646\u06af \u06a9\u0648 \u06a9\u0645\u0632\u0648\u0631 \u0628\u0646\u0627\u0646\u0627<\/p>\n<\/li>\n<li>\n<p>\u0645\u06a9\u0645\u0644 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u06c1\u06cc \u0688\u06cc\u0644\u06cc\u0648\u0631\u06cc \u0627\u06cc\u0628\u0644\u0632 \u06a9\u0648 \u063a\u06cc\u0631 \u0645\u0642\u0641\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u06cc\u06c1 \u0637\u0631\u06cc\u0642\u06c1 Django \u0627\u06cc\u067e\u0633 \u06a9\u0648 \u0627\u06cc\u0645\u0627\u0646\u062f\u0627\u0631\u060c \u0642\u0627\u0628\u0644 \u0634\u0646\u0627\u062e\u062a\u060c \u0627\u0648\u0631 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u06d2 \u0628\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0646\u06d2 \u0645\u06cc\u06ba \u0628\u06c1\u062a \u0622\u0633\u0627\u0646 \u0628\u0646\u0627 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u06cc \u0627\u06cc\u06a9 \u06c1\u06cc \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06cc \u0645\u0646\u0637\u0642 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0622\u0633\u0627\u0646 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0635\u0627\u0631\u0641 \u0633\u06d2 \u0686\u0627\u0631\u062c \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0622\u0631\u0688\u0631 \u06a9\u0648 \u0628\u0637\u0648\u0631 \u0627\u062f\u0627 \u0634\u062f\u06c1 \u0646\u0634\u0627\u0646 \u0632\u062f \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0622\u06af\u06d2 \u0628\u0691\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0644\u06cc\u06a9\u0646 \u062c\u0628 \u0622\u067e \u06a9\u06d2 \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0645\u0627\u0688\u0644 \u0645\u06cc\u06ba \u0627\u0628\u06be\u06cc \u0688\u067e\u0627\u0632\u0679\u060c \u0628\u0639\u062f \u0645\u06cc\u06ba [&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-28239","post","type-post","status-publish","format-standard","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts\/28239","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/comments?post=28239"}],"version-history":[{"count":0,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/posts\/28239\/revisions"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/media?parent=28239"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/categories?post=28239"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/ur\/wp-json\/wp\/v2\/tags?post=28239"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}