API を通じて新しいユーザーを作成する POST リクエストを送信しようとしています。
使用ケース:WordPress サイトでクレジットカードフォームが送信されたら、新しいユーザーを作成します。最終的には、Google タグマネージャーから 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_*関数を使用する必要があります。
「いいね!」 1
ありがとうございます。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>
以下のコードを持っていますが、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 キーに関連付けられた Api-Username が不足しています。
エラーについては、より詳細な情報が必要です。
「いいね!」 1
試行中:
headers: { Api-Username: "System", Api-Key: "123123958712389478923478923" },
“5 行目 15 文字目でエラーが発生しました。解析エラーです。‘}’ が期待されました”
キーの周りに’ が不足しています。名前を変更していない限り、system であるはずです。
まだ対応できないタスクを行う前に、まず JavaScript の基礎を学ぶことをお勧めします。
自分が何をしているか分かっているように見えてしまったら、お詫び申し上げます!@Arkshine さんのご支援に感謝し、この問題の解決策を引き続き探してまいります。
これは完全に私が準備不足のまま取り組んでいるタスクですが、頑張っています。
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>
「いいね!」 1
API の理解が誤っているようです。このエンドポイントはユーザーを作成するものではありません。招待リンクを生成し、ユーザーのメールに送信します。リンクをクリックすると、ユーザーは登録できるようになります。
ユーザーを手動で作成するには、次のエンドポイントを使用してください: Discourse API Docs
「いいね!」 2
ああ、私が愚かでしたね。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>
pfaffman
(Jay Pfaffman)
2020 年 4 月 21 日午前 1:24
12
取り組んでいる問題を説明するために、一歩、あるいは二歩下がってみることをお勧めします。現在取っているアプローチが適切な解決策であるとは限りません。
「いいね!」 2
良いアイデアですね。WordPress サイトの支払いフォームが完了したときに、Discourse に新しいユーザーを作成し、2 つのグループに追加したいと考えています。
私の計画は、フォームから名前とメールアドレスの変数を「ありがとう」ページに渡した後、購入者に新しいログイン情報をメールで送信するというものです。
Google タグマネージャーは URL から名前とメールアドレスの変数を取得し、上記のスクリプトに追加できます。
これよりも良い方法はありますか?WP Discourse を使った SSO は行いたくありません。
pfaffman
(Jay Pfaffman)
2020 年 4 月 21 日午前 1:48
14
SSO と、こちらにドキュメント化されている複数の WordPress 用サブスクリプション管理ツールのいずれかを使用するのはどうでしょうか?WordPress からグループメンバーシップを更新する方法は、十分にドキュメント化されています。
さて、適切なアプローチを見つけるのに苦労しています。Discourseのすべてのメリットを活かしつつ、14週間にわたって7つのモジュールを段階的に提供するシンプルなコースも提供したいと考えています。
Feverbeeのテーマコンポーネントを使用すると、レイアウトが非常に良く仕上がっています。
以前は、コースをコホート形式で運営し、参加費を徴収した後、手動でDiscourseのユーザーアカウントを作成していました。それは問題ありませんでしたが、現在は「オープンエントリー」方式を導入したいと考えています。
Paid Membership Proを検討しましたが、メンバーシップ管理のためにWordpressサイトを別途用意するのは好ましくありません。
Memberfulを数ヶ月間利用しましたが、取引手数料の4.9%と月額費用が高額すぎるように感じました。
Discourse Subscriptionsは魅力的ですが、ログインしていないユーザー(つまり、まだ顧客ではない人)にはプランページを表示できないのではないかと考えています。
API POSTを使って新しいメンバーを作成し、グループに追加するという私の案は、メンバーが増えるまでのつなぎとしては十分です。メンバーが増えたら、カスタムコーディングを行うことも検討しています。
追加の課題:iOSアプリをリポジトリからコンパイルしており、WordpressサイトからSSOを使用する場合に、仮想マシンを再レンタルして新しいURLで再コンパイルする必要がないことを望んでいます。アプリ設定ファイルの変更が必要かどうかは間違っている可能性もありますが、まだ試していません。
結局、実際のメンバー管理については、Wordpress SSO + Paid Membership Proが唯一の選択肢のように思えます。
pfaffman
(Jay Pfaffman)
2020 年 4 月 21 日午後 5:25
16
Discourse Subscriptions プラグインがすごく楽しみです。
これは解決可能な問題のようです。機能に対して料金を支払うか、まだ支払いを行っていない人にもアクセス可能なサイトの一部を設けるなどの方法が考えられます。
pfaffman
(Jay Pfaffman)
2020 年 4 月 21 日午後 11:16
17
今日はサブスクリプションプラグインを少し試してみました。お勧めするのは、サイトに無料コンテンツをいくつか用意して、コースを購入する前にアカウント作成の動機を与えることです。これは、プランページを非購読者にも公開するためのかなり適切な解決策だと思います。有料コンテンツを少し見せてから購入してもらうのは理にかなっています。
waffleslop
(waffleslop)
2020 年 4 月 21 日午後 11:31
18
鋭いご指摘ですが、私の購入者体験はそれとはかなり異なります。ここでは、Discourse フォーラムが製品の一部である、より直接的な販売形態となっています。
まず Discourse のユーザー登録をさせることなく、見込み客がチェックアウトフォームを完了できるソリューションが必要です。
pfaffman
(Jay Pfaffman)
2020 年 4 月 21 日午後 11:33
19
はい。サブスクリプション機能を新しいユーザーモーダルと連携させる必要があります。
waffleslop
(waffleslop)
2020 年 4 月 22 日午前 12:14
20
私の考えでは、この 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 のログを確認しましたが、何も記録されていませんでした。スパムフォルダも確認しました。
「いいね!」 1