신규 사용자 API POST

API를 통해 POST 요청을 보내서 새로운 사용자를 생성하려고 합니다.

사용 사례: WordPress 사이트에서 신용카드 양식이 제출되면 새로운 사용자를 한 번 생성하는 것입니다. 궁극적으로 이 작업은 Google Tag Manager를 사용하여 JavaScript로 실행될 것입니다.

이를 테스트하기 위해 아래 코드를 작성하여 PHP 파일로 저장한 후 서버에 업로드했습니다. 그런데 /nas/content/live/username/newuser.php 파일의 2번째 줄에서 Parse error: syntax error, unexpected 'POST' (T_STRING) 오류가 발생합니다.

<?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를 전혀 사용하지 않고 GTM에서 사용할 JavaScript만 사용하고 싶다는 걸 깨달았습니다.

이게 좀 더 가까워지는 건가요? 다만 이 스크립트에 API 키를 어디에 추가해야 하는지 모르겠습니다:

<script>
$.ajax({
method: "POST",
url: "https://site.com/invites",
data: { email: "foo@gmail.com", group_names: "Paid_Members" }
})
.done(function( msg ) {
alert( "Data Saved: " + 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( "Data Saved: " + msg );
 });
 </script>

생성하신 API 키와 연결된 Api-Username이 누락되었습니다.
오류에 대해서는 더 많은 정보를 제공해 주셔야 합니다.

시도:

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

역시 내 실수였네요. 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>

해결하려는 문제를 설명하기 위해 한두 단계 뒤로 물러나보시길 권합니다. 현재 취하고 계신 경로가 좋은 해결책인지 명확하지 않습니다.

좋은 아이디어입니다. 제 Wordpress 사이트에서 누군가가 결제 양식을 완료할 때, Discourse에서 새로운 사용자를 생성하고 두 개의 그룹에 추가하고 싶습니다.

제 계획은 양식의 이름/이메일 변수를 감사 페이지로 전달한 다음, 구매자에게 새로운 로그인 정보를 이메일로 보내는 것입니다.

Google Tag Manager를 사용하면 URL에서 이름/이메일 변수를 가져와서 위에서 게시된 스크립트에 추가할 수 있습니다.

이보다 더 나은 방법이 있을까요? WP Discourse를 통한 SSO는 원하지 않습니다.

여기에 문서화된 SSO와 여러 워드프레스 구독 관리자 중 하나를 사용하는 것은 어떨까요? 워드프레스에서 그룹 멤버십을 업데이트하는 방법은 잘 문서화되어 있습니다.

음, 적절한 접근법을 찾는 데 좀 고전하고 있어요. 포럼의 모든 장점을 살리기 위해 discourse를 유지하고 싶은데, 동시에 14주에 걸쳐 7개 모듈로 구성된 간단한 코스를 제공하려고 해요.

Feverbee 테마 컴포넌트를 사용하면 레이아웃이 정말 멋져요.

이전에는 코스를 코호트 방식으로 운영하면서 사람들이 결제하면 제가 수동으로 Discourse 사용자를 생성해줬어요. 그 방식도 나쁘지 않았지만, 이제는 더 ‘개방형 등록(open enrollment)’ 방식을 원해요.

Paid Membership Pro를 알아봤는데, 멤버십 관리를 위해 WordPress 사이트를 사용하는 건 별로 마음에 들지 않아요.

몇 달간 Memberful을 사용했는데, 4.9%의 거래 수수료에 월정액까지 더해지니 좀 과하게 느껴져요.

Discourse Subscriptions는 괜찮아 보이긴 하지만, 로그인하지 않은 사용자에게 플랜 페이지를 보여줄 수 없는 것 같아요(이미 고객이 아니라면 당연히 로그인되어 있지 않을 테니까요).

API POST로 새 멤버를 생성하고 그룹에 추가하는 제 아이디어는 더 많은 멤버를 확보하기 전까지의 임시 조치로 괜찮을 것 같아요. 멤버가 더 늘면 그때 커스텀 코딩을 진행하는 것도 고려해볼 수 있겠어요.

추가 문제: 저장소에서 컴파일한 iOS 앱이 있는데, 만약 WP 사이트에서 SSO를 사용해야 한다면 새 URL로 다시 컴파일하기 위해 가상 머신을 다시 대여하고 싶진 않아요. 앱 설정 파일을 변경해야 한다는 제 추측이 틀렸을 수도 있어요. 아직 그 부분은 확인해 보지 않았거든요.

WordPress SSO + Paid Membership Pro가 실제 멤버십 관리를 위한 유일한 옵션인 것 같아요.

Discourse Subscriptions 플러그인에 대해 꽤 기대가 큽니다.

해결할 수 있는 문제인 것 같습니다. 해당 기능을 위해 비용을 지불하거나, 아직 결제하지 않은 사용자도 접근할 수 있는 사이트의 일부를 만들어서 말이죠.

오늘 하루 종일 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>

Postman에서 이 URL을 시도해 보았습니다:
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에서 로그를 확인해 보았지만 아무것도 목록에 표시되지 않았습니다. 스팸 폴더도 확인했습니다.