我正在尝试为用户设置一个谷歌钱包支付流程来购买锦标赛的入场券。为了做到这一点,用户必须填写一堆关于自己的信息(姓名、联赛球员号码、联系电话号码等),还有一些其他的数据是隐含的,比如唯一的标识符他们参加的比赛。
在 Google Wallet 中似乎有两种方法可以实现这一点,我想知道我是否错过了另一种更好的工作流程和/或这两种方法中的一种是否更受欢迎。
可能性 #1
当用户单击钱包按钮时,我将表单序列化并使用 ajax 将其提交到我的服务器。如果表单填写正确,服务器会将表单的所有内容编码到 JWT 的 SellerData 字段中,并异步返回 JWT。然后我将这个 JWT 传递给钱包,期望在我的回发处理程序中接收它。
然后,回发处理程序使用来自 JWT SellerData 字段的信息构造条目并将其记录在数据库中。
这种可能性对我来说很直观,并且我已经实现了它,但是我遇到了 SellerData 字段的 200 个字符的限制,因为它包含多个人的姓名、电话号码和各种其他表单元素。只是没有空间。我没有解决此问题的方法,欢迎提出想法。
这种方法的优点是在付款成功之前不会在我的数据库中创建任何内容,但我不知道如何解决在 JWT 中表示整个表单以以某种方式将其发送到回发处理程序的困难。
可能性 #2
用户只需使用正常的 Web 表单提交过程提交条目表单,这会在数据库中创建一些内容。以这种方式新创建的数据库对象被标记为“未付费”,因此是不完整的。
一旦用户在数据库中成功创建了他们的条目,他们就会看到第二个页面,他们可以在该页面上付款。这会更好,因为我现在可以将他们刚刚创建的对象的数据库键放入 SellerData 字段,而不必担心大小限制。
它确实有不幸的副作用,即在数据库中包含这些半完成的对象,以及用户不太了解两步注册然后付款过程并忘记付款的风险。我必须非常小心和积极主动地确保用户意识到 A) 提交没有付款信息的表单是可以的,并且 B) 提交第一个表单并不意味着他们已经完成。
想法?