طلب API POST لمستخدم جديد

أنا أحاول إرسال طلب POST عبر واجهة برمجة التطبيقات (API) لإنشاء مستخدم جديد.

حالة الاستخدام: إنشاء مستخدم جديد بمجرد إرسال نموذج بطاقة ائتمان على موقع ووردبريس. في النهاية، سيتم تنفيذ هذا من خلال Google Tag Manager باستخدام JavaScript.

للتجربة، قمت بكتابة الكود التالي، وحفظته كملف PHP، ثم قمت برفعه إلى الخادم. لقد حصلت على خطأ: Parse error: syntax error, unexpected 'POST' (T_STRING) في /nas/content/live/username/newuser.php في السطر 2

<?php 
curl -X POST "https://site.com/invites" \
-H "Content-Type: multipart/form-data;" \
-H "Api-Key: 123456789012345678901234567890" \

{
"email": "test@gmail.com",
"group_names": "Paid_Members",
"custom_message": "Custom message here"
}

?>

ما الذي ينقصني في طلب POST هذا؟ هل أحتاج إلى إضافة Accept: application/json إلى هذا الطلب؟

إذا كنت ترغب في الاختبار باستخدام PHP، فستحتاج إلى استخدام دوال curl_*.

شكرًا لك. أدرك الآن أنني لا أريد استخدام PHP على الإطلاق؛ فأنا أريد استخدام JavaScript فقط لأنني سأستخدمه مع GTM.

ربما يقتربني هذا من الحل؟ رغم أنني لا أعرف أين أضيف مفتاح API في هذا السكربت:

<script>
$.ajax({
method: "POST",
url: "https://site.com/invites",
data: { email: "foo@gmail.com", group_names: "Paid_Members" }
})
.done(function( msg ) {
alert( "تم حفظ البيانات: " + msg );
});
</script>

مفتاح الـ API / اسم المستخدم في

headers: {}

لدي الكود التالي، رغم أن GTM يشير إلى وجود أخطاء في السطر 5. هل يمكنك مساعدتي في معرفة ما الذي فاتني؟

 <script>
 $.ajax({
 method: "POST",
 url: "https://site.co/invites",
 headers: {Api-key: "1234567890987654321234578"},
 data: { email: "test@gmail.com", group_names: "Paid_Members" }
 })
 .done(function( msg ) {
 alert( "تم حفظ البيانات: " + msg );
 });
 </script>

لقد فاتك Api-Username المرتبط بمفتاح الـ API الذي أنشأته.
بخصوص الأخطاء، تحتاج إلى تقديم مزيد من المعلومات.

محاولة:

headers: { Api-Username: "System", Api-Key: "123123958712389478923478923" },

“خطأ في السطر 5، الموضع 15: خطأ في التحليل. تم التوقّع لـ ‘}’”

ينقص وجود علامات الاقتباس ' حول المفاتيح. وما لم قمت بإعادة التسمية، فيجب أن يكون system.

أوصيك بتعلم أساسيات JavaScript أولاً قبل تنفيذ مهام لا يمكنك التعامل معها بعد.

أعتذر إذا بدوت كشخص يعرف ما يفعله! أقدر مساعدتك، @Arkshine، وسأواصل البحث عن كيفية حل هذه المشكلة.

هذه بالتأكيد مهمة لم أكن مستعدًا لها بما يكفي، ومع ذلك أنا أحاول. :slight_smile:

تمكنت من حفظ الطلب بوضع Api-Username و Api-Key بين علامتي اقتباس. شكرًا لك يا Arkshine. ثم نفذت السكربت عبر GTM وفحصت سجلات Discourse دون ظهور أي شيء.

لم يتم إنشاء مستخدم جديد.

هل لديك أي أفكار؟

إليك السكربت النهائي الخاص بي في GTM:

<script type="text/javascript">
$.ajax({
method: "POST",
url: "https://test.co/invites",
headers: { "Api-Username": "system", "Api-Key": "1234556" },
data: { email: "test@gmail.com", group_names: "Paid_Members" }
})
.done(function( msg ) {
alert( "Data Saved: " + msg );
});
</script>

أعتقد أنك لم تفهم الـ API بشكل صحيح. هذه النقطة النهائية ليست لإنشاء مستخدم. بل ستقوم بتوليد رابط دعوة وإرساله إلى بريد المستخدم الإلكتروني. بمجرد النقر عليه، سيتمكن المستخدم من التسجيل.

لإنشاء مستخدم يدويًا، يجب استخدام هذه النقطة النهائية: Discourse API Docs

حسناً، كان ذلك ساذجاً مني. شكراً لك، أركشاين.

أشعر أنني قريب، رغم أنني لا ألاحظ أي تغييرات في سجلات Discourse الخاصة بي.

لقد جربت أيضاً type: "POST", دون جدوى.

<script type="application/json">
$.ajax({
method: "POST",
url: "https://test.co/users",
headers: { "Api-Username": "system", "Api-Key": "12345" },
data: { 
"name": "Bob Dingo",
"email": "grow@test.co",
"password": "Success101",
"username": "BobDingo",
"active": true,
"approved": true,
"user_fields[1]": "string"
}


});
</script>

أوصي بأن تتراجع خطوة أو خطوتين لوصف المشكلة التي تحاول حلها. ليس من الواضح أن المسار الذي تسلكه هو حل جيد.

فكرة جيدة. أود إنشاء مستخدم جديد في Discourse، مع إضافته إلى مجموعتين، عند إكمال شخص لنموذج الدفع على موقع WordPress الخاص بي.

خطتي هي تمرير متغيرات الاسم والبريد الإلكتروني من النموذج إلى صفحة الشكر، ثم إرسال بريد إلكتروني للمشتري يحتوي على بيانات تسجيل الدخول الجديدة.

يمكن لـ Google Tag Manager سحب متغيرات الاسم والبريد الإلكتروني من الرابط، ثم إضافتها إلى السكربت المنشور أعلاه.

هل توجد طريقة أفضل للقيام بذلك؟ لا أريد استخدام SSO مع WP Discourse.

لماذا لا تستخدم SSO وأحد مديري الاشتراكات في WordPress العديدين الموثقة هنا؟ كيفية تحديث عضوية المجموعة من WordPress موثقة جيدًا.

حسناً، أنا أجد صعوبة في العثور على النهج الصحيح. أريد الاحتفاظ بمجمعتي على منصة Discourse للاستفادة من جميع مزاياها، وفي الوقت نفسه أريد تقديم دورة بسيطة مكونة من 7 وحدات يتم إطلاقها تدريجياً على مدار 14 أسبوعاً.

مع مكون السمة Feverbee الخاص بك، يبدو التخطيط رائعاً.

في السابق، كنت أقوم بإدارة الدورات في مجموعات (cohorts)، حيث كان المشاركون يدفعون أولاً، ثم كنت أقوم بإنشاء حساباتهم على Discourse يدوياً. كان هذا مقبولاً، لكنني الآن أرغب في نظام “تسجيل مفتوح” أكثر مرونة.

لقد بحثت في إضافة Paid Membership Pro، لكنني لا أحب فكرة استخدام موقع ووردبريس فقط لإدارة العضوية.

لقد استخدمت Memberful لبضعة أشهر، لكن رسوم المعاملات البالغة 4.9% بالإضافة إلى الرسوم الشهرية تبدو مبالغاً فيها بعض الشيء.

يبدو خيار Discourse Subscriptions جيداً، لكنني أعتقد أنني لا أستطيع عرض صفحات الخطط للأشخاص غير المسجلين (والذين لن يكونوا مسجلين إذا لم يكونوا عملاء بالفعل).

فكرتي في إرسال طلب POST عبر الـ API لإنشاء عضو جديد وإضافته إلى مجموعة تعتبر حلاً مؤقتاً مقبولاً بينما أقوم بجذب المزيد من الأعضاء. بمجرد أن أكون لدي عدد أكبر من الأعضاء، كنت أفكر في طلب برمجة مخصصة.

مسألة إضافية: لدي تطبيق iOS قمت بتجميعه من المستودع، وأفضل عدم استئجار آلة افتراضية مرة أخرى لإعادة التجميع مع عنوان URL جديد إذا اضطررت لاستخدام SSO من موقع ووردبريس. قد أكون مخطئاً فيما يتعلق بضرورة تغيير ملف إعدادات التطبيق؛ لم أقم بذلك بعد.

يبدو أن دمج ووردبريس مع SSO وإضافة Paid Membership Pro هو الخيار الوحيد المتاح لإدارة الأعضاء الفعليّة.

أنا متحمس جدًا لإضافة Discourse Subscriptions.

يبدو أن هذه مشكلة قابلة للحل، ربما عن طريق الدفع مقابل هذه الوظيفة، أو ربما عن طريق وجود جزء من موقعك يمكن للأشخاص الذين لم يدفعوا بعد الوصول إليه.

لقد جربت إضافة الاشتراكات قليلاً اليوم. أعتقد أن ما أنصح به هو أن يكون لديك محتوى مجاني على موقعك حتى يكون لدى المستخدمين سبب لإنشاء حساب قبل شراء دورة تدريبية. أعتقد أن هذا حل معقول لجعل صفحات الخطط متاحة لغير المشتركين. من المنطقي أنهم يريدون رؤية جزء من المحتوى قبل الدفع.

رأي ثاقب، لكن تجربة المشتري لدي هنا مختلفة تمامًا. في هذه الحالة، الأمر أشبه ببيع مباشر، حيث يُعد منتدى Discourse جزءًا من المنتج.

أحتاج إلى حل يسمح لي بإحالة عميل محتمل إلى نموذج دفع يمكنه إكماله دون الحاجة إلى إنشاء حساب مستخدم في Discourse أولاً.

نعم. يجب ربط اشتراك المستخدم الجديد بالنافذة المنبثقة للمستخدم الجديد.

فكرتي هي أن مجرد جعل هذا الطلب POST يعمل سيمنحني حلاً قصير الأجل بينما أقوم بإشراك العملاء وأتمكن من تحمل تكاليف التطوير المخصص.

يتم تشغيل علامة Google Tag Manager الخاصة بي، لكن لا يظهر أي شيء داخل Discourse. إذا تمكنت من جعل GTM ينشئ مستخدمًا جديدًا ويحدد المجموعة الصحيحة، فسيكون حلّي بنسبة 70% طويل الأجل و100% قصير الأجل.

هل لديك أي أفكار حول ما قد يكون خاطئًا في هذا؟

<script type="application/json">
$.ajax({
method: "POST",
url: "https://site.co/invites",
headers: { "Api-Username": "system", "Api-Key": "12345" },
data: { 
"email": "grow@site.co",
"group_names": "Alumni",
"custom_message": "Welcome123"
}


});
</script>

لقد جربت هذا الرابط في Postman:
https://site.co/users.json?Api-Key=12345&Api-Username=system&email=hello@domain.com&group_names=Alumni&custom_message=Welcome321

والذي أعاد لي التالي:

{
    "success": true,
    "active": false,
    "message": "<p>أنت على وشك الانتهاء! لقد أرسلنا بريدًا إلكترونيًا لتفعيل الحساب إلى <b>hello@domain.com</b>. يرجى اتباع التعليمات الواردة في البريد لتفعيل حسابك.</p><p>إذا لم يصل البريد، فراجع مجلد الرسائل غير المرغوب فيها.</p>"
}

ومع ذلك، لم أتلق أي بريد إلكتروني. لقد تفحصت سجلاتي في /logs ولم يتم سرد أي شيء. كما تفحصت مجلد الرسائل غير المرغوب فيها.