【问题标题】:Square web api - how to send an external transaction IDSquare web api - 如何发送外部交易ID
【发布时间】:2018-04-18 08:08:08
【问题描述】:

我正在使用 web api(Android 和 IOS)将 Square POS 与 web 应用程序集成。

如何将系统的事务 ID 传递给对 Android 和 IOS 的 Intent 调用,以便稍后在 Connect API 的 Retrieve Transaction 端点中验证它们?

IOS 文档提到使用“状态”,但我目前正在使用 Android 并且没有这样的提及。

我是否应该尝试使用“Note”字段(Android 为 S.com.squareup.pos.NOTE 或 IOS 为“Notes”)?

我确实需要一个我可以同时用于 IOS 和 Android 的字段,因为我的 Retrieve Transaction 访问 Connect API 不会知道原始客户端的操作系统。

补充说明: 在 tristansokol 发表评论后,我想补充一点,我这样做的原因是为了加强 Square POS 客户端和我正在集成的 Web 应用程序之间的集成。否则,什么会阻止某人粘贴先前交易的 URI 以进行新的付款?

如果有人在付款后从浏览器复制此 URI: https://192.168.1.2/ctSquarePayDemo/Default?com.squareup.pos.CLIENT_TRANSACTION_ID=XXXXXXX&com.squareup.pos.SERVER_TRANSACTION_IDValue:YYYYYYYYY

然后可以为新的支付交易再次粘贴相同的 URI,我无法验证它来自“旧”交易。我知道您可能会说我可以第一次存储 Transaction_ID,然后第二次不允许它,但这不是最好的安排。

当我们使用 webapi 与其他支付系统集成时,我们通常能够传递我们自己的某种 orderID/transactionID 以确保验证交易很容易。


最终答案(从下面解释)
对于 Android Web API,在您的锚标记中使用 S.com.squareup.pos.NOTES=TRANSACTIONIDHERE。

对于 IOS Web API,使用“notes”json 元素并将您的交易 ID 放在那里。

然后您需要使用 Square Rest API V1(您不能使用 V2,它不会暴露 notes 数据元素)来检索交易数据并在付款成功后进行验证。端点将如下所示:

https://connect.squareup.com/v1/YOURLOCATIONID/payments/THESQUARETRANSACTIONID

我建议您在处理完付款后始终使用 api 查找您的交易。您可以确定您系统的交易 ID 与“notes”字段匹配,并仔细检查金额是否正确。这将有助于防止欺诈/滥用,并在回调 URL 因互联网连接不良而无法加载时防止您的系统出现数据问题。

【问题讨论】:

  • 支付流程结束时可以使用返回的交易id吗?
  • 支付成功后返回的Transaction_ID是Square的服务器生成的,不是我的应用。我需要发送一个可以推送到支付交易中的值,我可以使用检索交易进行验证,以便我可以在 POS 客户端调用 Web 回调 URI 时进行确认。
  • 为什么你不能验证 Square 给你的 id?为什么一定要创建id?
  • 您好 tristansokol,感谢您的回复,请查看更新后的问题以了解我认为可以解释的更多细节。

标签: square-connect


【解决方案1】:

在您的用例中,您可以使用notes 字段来满足您的需求。但是,如果您主要关心的是防止人们将任意数据粘贴到您的回调 url,您应该对您返回的交易 ID 进行一些验证。例如,您可以查看事务的时间戳,或者根据您的业务用例查看其他字段。

【讨论】:

  • 我可能会将此标记为正确,特别是因为使用注释字段是我看到的唯一解决方法。但我认为你会在未来看到更多。因为 web api 使用的是查询字符串,所以有人有机会试图欺骗系统。如果您将更多 POS Web api 的安全问题交给客户开发人员,这可能不是最好的长期解决方案。
  • 使用 POS Android Web Api 时,我将此字符串作为锚点“S.com.squareup.pos.NOTES=THISISTHENOTEFIELD”的一部分发送。它在 Square Dashboard 中显示为关于交易的注释,但是当我查询 /locations/XXXX/transactions/YYYYY 以获取结果时,该注释未显示在 json 中。
  • 更正,在我上面的评论中,我使用的是“S.com.squareup.pos.NOTE=THISISTHENOTEFIELD”,而注释末尾没有“S”。
  • 我应该打开另一个关于“笔记”问题的问题吗?我已经尝试了多次,Square Dashboard 显示了注释,但它不在我从交易查询中收到的数据中。
  • 您使用的是 v1 还是 v2 API?
猜你喜欢
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-22
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
相关资源
最近更新 更多