API POST для нового пользователя

Я пытаюсь выполнить POST-запрос через API для создания нового пользователя.

Сценарий использования: создание нового пользователя после отправки формы кредитной карты на сайте WordPress. В конечном итоге это будет запускаться через Google Tag Manager с использованием JavaScript.

Для тестирования я написал следующий код, сохранил его как PHP-файл и загрузил на свой сервер. Я получаю ошибку: Parse error: syntax error, unexpected 'POST' (T_STRING) in /nas/content/live/username/newuser.php on line 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( "Данные сохранены: " + msg );
});
</script>

Кажется, вы неправильно поняли API. Этот эндпоинт не предназначен для создания пользователя. Он сгенерирует ссылку-приглашение и отправит её на электронную почту пользователя. После перехода по ссылке пользователь сможет зарегистрироваться.

Чтобы создать пользователя вручную, следует использовать этот эндпоинт: Discourse API Docs

Ну, это было глупо с моей стороны. Спасибо, Arkshine.

Чувствую, что почти близко, но в логах 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.

Мой план: передавать переменные имени и email из формы на страницу «Спасибо», а затем отправлять покупателю письмо с его новыми данными для входа.

Google Tag Manager может извлечь переменные имени и email из URL и добавить их в скрипт, как показано выше.

Есть ли более подходящий способ сделать это? Я не хочу использовать SSO с WP Discourse.

Почему бы не использовать SSO и один из нескольких менеджеров подписок для WordPress, которые описаны здесь? Обновление членства в группах из WordPress хорошо документировано.

Хорошо, я с трудом нахожу правильный подход. Я хочу сохранить свой форум на Discourse ради всех преимуществ И при этом создать простой курс из 7 модулей, которые будут выдаваться в течение 14 недель.

С вашим тематическим компонентом Feverbee компоновка выглядит отлично.

Раньше я проводил курс в рамках групп (когорт): люди просто оплачивали, а я вручную создавал для них учётную запись в Discourse. Это было нормально, но теперь я хочу перейти на «открытую регистрацию».

Я изучал Paid Membership Pro, но мне не нравится идея использовать сайт на WordPress только для управления членством.

Я пользовался Memberful несколько месяцев, но их комиссия за транзакцию 4,9% плюс ежемесячная плата кажутся чрезмерными.

Discourse Subscriptions выглядит хорошо, хотя, насколько я понимаю, я не могу показывать страницы тарифных планов пользователям, не вошедшим в систему (а они не вошли бы, если ещё не являются клиентами).

Моя идея отправлять API POST-запрос для создания нового участника и добавления его в группу — это приемлемое временное решение, пока я привлекаю больше участников. Когда их станет больше, я планирую заказать кастомную разработку.

Дополнительная проблема: у меня есть iOS-приложение, скомпилированное из репозитория, и я не хочу снова арендовать виртуальную машину для повторной компиляции с новым URL, если мне придётся использовать SSO с сайта на WordPress. Возможно, я ошибаюсь насчёт необходимости менять файл конфигурации приложения; я ещё этого не делал.

Кажется, что WordPress SSO + Paid Membership Pro — это единственный вариант для полноценного управления членством.

Я очень взволнован по поводу плагина Discourse Subscriptions.

Кажется, это решаемая проблема — возможно, за счёт оплаты соответствующего функционала или путём создания части сайта, доступной для людей, которые ещё не внесли оплату.

Сегодня я немного поработал с плагином «Подписки». Я думаю, что рекомендую вам разместить на сайте бесплатный контент, чтобы у пользователей была мотивация создать аккаунт перед покупкой курса. Это довольно хорошее решение для предоставления страниц с тарифами доступными для тех, кто еще не оформил подписку. Логично, что они хотят немного ознакомиться с контентом перед оплатой.

Хорошее наблюдение, но мой опыт покупки здесь совсем другой. В данном случае это скорее прямая продажа, где форум Discourse является частью продукта.

Мне нужно решение, позволяющее направлять потенциального клиента на форму оформления заказа, которую он сможет заполнить, не создавая предварительно учётную запись на Discourse.

Да. Нужно, чтобы подписка была интегрирована в модальное окно для новых пользователей.

Моя мысль такова: если мне удастся заставить этот API 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>

Я попробовал этот URL в 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, и там ничего нет. Также проверил папку спам.