新用户API POST

我试图通过 API 发送 POST 请求以创建新用户。

使用场景:在 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_* 函数。

1 个赞

谢谢。我意识到我根本不想使用 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: {}
1 个赞

我有以下代码,但 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,我将继续寻找解决方法。

这绝对是一项我准备不足的任务,但我正在努力。:slight_smile:

通过将 Api-UsernameApi-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>
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>

我建议你退后一两步,描述一下你试图解决的问题。目前尚不清楚你采取的路径是否是一个好的解决方案。

2 个赞

好主意。我想在有人在我的 WordPress 站点完成付款表单后,在 Discourse 中创建一个新用户,并将其添加到两个群组中。

我的计划是将表单中的姓名和邮箱变量传递到“感谢”页面,然后向买家发送一封包含其新登录凭据的邮件。

Google Tag Manager 可以从 URL 中提取姓名和邮箱变量,然后将其添加到上面发布的脚本中。

有没有更好的方法?我不想使用 WP Discourse 进行 SSO。

[quote=“waffleslop, 帖子:13, 主题:148676”]
我想在 Discourse 中创建一个新用户,并将其添加到两个群组中,条件是有人在 WordPress 网站上完成了付款表单。[/quote]

为什么不使用 SSO 以及此处文档中记录的几种 WordPress 订阅管理器呢?如何从 WordPress 更新群组成员资格已有详细文档说明。

好的,我正在努力寻找合适的解决方案。我希望保留我的 Discourse 论坛以享受其所有优势,同时还想提供一个包含 7 个模块、在 14 周内分阶段发布的简单课程。

使用您的 Feverbee 主题组件,布局看起来非常棒。

之前,我采用班级制运行课程,用户支付后,我会手动为他们创建 Discourse 账户。那样也可以,但现在我希望实现更“开放注册”的模式。

我研究过 Paid Membership Pro,但我不太喜欢为了管理会员而专门使用一个 WordPress 站点。

我曾使用过 Memberful 几个月,但他们 4.9% 的交易手续费加上月费确实有点过高。

Discourse Subscriptions 看起来不错,但我认为无法向未登录的用户展示计划页面(如果他们还不是客户,自然就不会登录)。

我打算通过 API POST 请求创建新成员并将其添加到某个群组,这可以作为我在吸引更多成员期间的临时解决方案。等成员数量增加后,我计划进行一些自定义开发。

额外的问题:我根据代码库编译了一个 iOS 应用,如果必须使用来自 WordPress 站点的 SSO,我更倾向于不再租用虚拟机来重新编译并更改 URL。我可能搞错了,也许并不需要更改应用的配置文件;我还没尝试过。

目前看来,WordPress SSO 配合 Paid Membership Pro 似乎是管理会员的唯一可行方案。

我对 Discourse 订阅插件 感到非常兴奋。

这似乎是一个可以解决的问题,或许可以通过付费获取该功能,或者让网站的一部分内容对尚未付费的用户开放。

我今天稍微试用了一下订阅插件。我认为,我建议您在网站上提供一些免费内容,这样用户在购买课程前就有理由先创建账户。我觉得这是一个相当不错的解决方案,可以让非订阅者也能访问计划页面。让他们在付费前先看一点内容,这很合理。

很有见地,但我的买家体验与此截然不同。在这里,这更像是一种直接销售,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 日志,没有任何记录。我也检查了垃圾邮件文件夹。

1 个赞