【发布时间】: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