开发者
预览版一个下午,为 POS 加上刷掌结账。
您的 POS 请求同一终端上的 VenaPass 应用识别顾客,返回您自己的客户 ID,以及支付服务商可信赖的签名令牌。
Android POS:启动支付界面
VenaPass 显示金额、扫描手掌并返回结果。金额以最小货币单位表示,并附 ISO 4217 货币代码。
val pay = Intent("com.venapass.action.PAY")
.putExtra("amount", 500000L) // NGN 5,000.00
.putExtra("currency", "NGN")
.putExtra("terminal_id", "LEKKI-POS-1")
.putExtra("request_id", UUID.randomUUID().toString())
startActivityForResult(pay, PAY_WITH_PALM)
// Result extras: success, customer_ref,
// assertion, receipt_id (gateway mode), message
网关 URL:调用终端上的应用
适用于可配置支付网关地址的 POS 软件。重试时请使用相同的 request_id,切勿使用新的。
POST http://127.0.0.1:9090/api/pay_direct
{ "amount": 500000, "currency": "NGN",
"terminal_id": "LEKKI-POS-1",
"request_id": "6f1c2e9a-…" }
200 OK
{ "success": true,
"customer_ref": "CUST-1042",
"assertion": "eyJhbGciOiJFZERTQSIs…",
"receipt_id": null,
"message": "Identity verified" }
面向支付服务商:验证令牌
该断言是标准的签名 JWT(EdDSA)。任何 JWT 库都可以用我们的公钥进行验证:
https://api.venapass.com/.well-known/venapass-keys
其 sub 是您自己的客户编号,因此您可直接从已为该客户留存的支付方式扣款。
- 1签名可通过当前有效的 VenaPass 密钥验证。
- 2令牌未过期(有效期约两分钟)。
- 3txn 与您即将扣款的金额和币种完全一致。
- 4terminal_id 与发起该笔交易的 POS 终端一致。
- 5您此前从未接受过此 jti 。
网关模式:接收来自 VenaPass 的扣款请求
如果您选择网关模式,我们会将每笔已识别的交易推送到您的 URL,并使用仅由您和我们持有的密钥签名。请将 request_id 作为幂等键处理。
POST https://your-provider.example/venapass
X-VenaPass-Signature: sha256=<HMAC of the body>
{ "assertion": "eyJ…", "customer_ref": "CUST-1042",
"amount": 500000, "currency": "NGN",
"terminal_id": "LEKKI-POS-1", "request_id": "6f1c…" }
Reply: { "approved": true, "reference": "PSP-88213",
"message": "Approved" }
从您的 POS 注册顾客
启动 com.venapass.action.ENROLL ,并传入您的 customer_ref。VenaPass 会引导完成三次掌部扫描并返回成功结果。不会向我们发送任何姓名或电话号码。
申请沙盒访问权限