我如何存储客人结帐?

How do I store guest checkouts?

好的,所以我的网站就像 "Post Your Order" 而不是通常的在线支付方式,因为我将先运送物品,然后是现金,即此处运送服务提供的货到付款。

我有一个用户 table user_id、电子邮件、密码、名字和姓氏等

一个user_ordertable有 order_id、user_id_fk、order_status、order_placed、address_id_fk

一个order_itemstable其中有 order_item_id, order_id_fk, product_id, 数量, size_id_fk

地址table address_id、user_id_fk、街道、城市、省等

因此,如果用户已注册,则很容易做到这一点,因为我只需 link 他们的 user_id 到 user_order table 和他们的地址 address_book

我的问题是,我该如何处理访客结帐?我试图避免他们被迫注册,即使这很容易。

我现在的想法是将它们也插入用户 table,但密码为 NULL,然后创建一个来宾组并将其放入该组。

但这可能会导致问题,我的用户 table 中的电子邮件必须是唯一的,来宾结帐可能会从同一电子邮件发生不止一次......现在怎么办?

我应该只在订单中添加列吗 table?另一个,姓名,电子邮件,地址?所以它与用户无关?这是可能的,但有一项功能我希望注册用户拥有...跟踪他们的订单历史记录。

请帮忙...谢谢 :D ;)

最主要的是拿到他们的钱。如果他们想留下来,那就让他们吧。提醒他们只有注册的用户才能收到促销信息并查看之前的内容 activity。 prior activity 而不是注册用户以后将不会出现。

假设他们从该电子邮件地址收到了 10 个订单。那又如何,将他们作为新用户 each 时间放入,然后将他们的电子邮件地址放在那里。将该用户标记为访客。所以 grandma@blahblah.com 有 10 个新的访客类型用户。没有电子邮件出去。毕竟,人们可能会使用一些可怜的奶奶的电子邮件地址来欺骗系统。

现在他们想成为注册用户。电子邮件已发送,他们必须单击它才能成为用户(电子邮件中 ​​link)。

现在第 11 次购买来自注册用户 (grandma@blahblah.com)。历史订单:1个订单。

对我来说似乎很困难。

我建议按照您的想法进行操作,只需添加用户并添加一列 'guests' int(1),如果用户是访客,则此值设置为 1,如果不是,则 0.

然后也将密码设置为空字符串即可。

我同意"Drew Pierce" 但从另一方面给你另一种选择

首先 你应该了解电子商务平台(例如 OpenCart),它们是如何驱动这些东西的。

second 对于以下情况,您无需将每个访客添加到用户 table:

1- 访客无权查看订单历史或...等等

2- 结帐时必须填写电子邮件字段,并且还会向他发送通知电子邮件(也许您添加确认电子邮件.. 由您决定)。

3- 您需要在数据库中保存的是订单 table

中的订单详细信息

4-您和客人之间的所有过程都将通过他的电子邮件

5- 在成为真实用户之前,他无权跟踪任何订单或查看他的活动

6- 订单详细信息必须始终包含有关用户的所有详细信息,即使他是真实用户(这将是真实用户的重复数据,但用户可以更改他的电子邮件或 phone 任何时间的号码,他不能为旧订单做,所以你总是知道订单的真实历史)

7-用户table中只有一个访客用户但是订单table中有很多订单,每个订单都有自己的详细信息、电子邮件、phone 号码、、等

出于可用性原因,您实际上可能希望 用户能够查看过去使用他们的电子邮件地址下的订单。帐单电子邮件字段回答了问题 "whom do you authorize to view this order?"。这样,grandma@blahblah.com 可以下多个订单,然后一旦她真正注册(通过更改密码),她就可以跟踪过去作为客人下的订单。所以试试这个流程,有时称为 shadow profile 模式:

  1. 在您的访客结帐页面上写清楚,账单电子邮件地址的合法所有者将能够看到使用该地址在网站上下的所有订单。
  2. 如果您的 users table 中不存在该地址,请使用零密码哈希和空 confirmed_on 日期创建帐户。
  3. 此步骤会根据您是否希望来宾能够使用注册用户的电子邮件地址而有所不同。
    • 如果是,请将 is_guest 列添加到 user_order
    • 如果不是,并且如果confirmed_on不为空,要求用户登录。这意味着在confirmed_on之前的所有订单都是访客订单,之后的所有订单都是登录订单.
  4. 向客人发送包含密码重置的电子邮件收据link。确保使用正确的 SPF 和 DKIM 记录。用这样的东西标记 link:

    Sign up to manage your orders with $store_name.

    In rare cases, you may be listed as the billing contact for an order that you did not place. If so, follow this link to cancel the order.

  5. 当用户首次通过电子邮件重置密码时 link,设置 confirmed_on 日期。

  6. 在登录用户的历史订单报告中,明确标记每个订单为访客或已注册。

如果不是 grandma@blahblah.com 的人在客人订单中输入 grandma@blahblah.comgrandma@blahblah.com 的真正所有者将收到电子邮件收据,从而有机会取消它。

另一种方法是将订单关联到会话而不是用户。您可能已经制作了一个随机会话 ID(并将其存储在 cookie 中)以区分一位客人的购物车和另一位客人的购物车。因此,将 user_order table 中的 user_id_fk 更改为 session_id_fk。然后 link 会话 ID 到您已经在使用的任何 user_session table 中的用户 ID。