用途
该技能面向 Razorpay Curlec 支付网关的集成工作,适用于搭建、构建、调试、审查和讲解 Curlec 支付集成。使用前应先阅读 references/curlec-payment-gateway.md,其中包含来源 URL、集成流程、端点映射、签名规则、webhook 规则、沙箱说明以及常见故障修复;当用户询问注册方式、需要哪些 API 密钥、凭据来源或仪表盘设置时,应阅读 references/account-setup.md。
主要能力
技能覆盖以下工作内容:
- 识别产品形态:标准 Checkout、重定向/FPX 流程、Payment Links、Orders/Payments/Refunds API、移动 SDK、插件,或 payout/RazorpayX。
- 识别环境:测试模式或正式模式,并要求密钥、订单、webhook 与仪表盘检查按模式隔离。
- 集成流程指导:先创建内部交易/订单记录,再在服务端创建 Curlec Order;仅向 Checkout 传递公开 Key ID 与 Curlec order_id,Key Secret 只保留在服务端。
- 支付结果处理:Checkout 成功后存储 razorpay_payment_id、razorpay_order_id 与 razorpay_signature,并在服务端校验签名;使用 webhook 做持久化异步履约,必要时通过 API 拉取做即时用户确认。
- 履约前校验:核对金额、币种、订单映射、支付状态、捕获状态、签名、幂等性与重复事件。
关键规则
- 多数 API 的基础 URL 为 https://api.razorpay.com/v1。
- API 认证使用 Basic Auth,即 Key ID:Key Secret;不得在浏览器代码中暴露 Key Secret。
- 金额使用最小货币单位,例如 MYR 使用 sen。集成非 MYR 流程时需确认币种/账户支持情况。
- 支付签名消息为 order_id + "|" + razorpay_payment_id,其中 order_id 是服务端存储的 Curlec Order ID;生成签名时不得信任或替换客户端传来的 razorpay_order_id。
- webhook 签名以原始请求体为消息、webhook secret 为密钥,使用 SHA-256 HMAC,并读取 X-Razorpay-Signature 头;校验前不得对请求体做 JSON 解析、字符串化或修改。
- webhook 可能重复且乱序;应使用 x-razorpay-event-id 去重,并采用单调状态转换。
- Checkout 成功表示授权成功;除非业务明确在授权时履约,否则在不可逆履约前应确认捕获状态为 captured。
- 对于 FPX 等重定向支付方式,需配置 callback_url 与 redirect: true;仅靠浏览器端处理器不够。
- 旧 webhook 重试在密钥轮换后可能需要旧 webhook secret。
- 最新定价、已启用方式、账户限制、webhook IP 范围、仅仪表盘可设的配置或生产凭据,需以实时 Dashboard/文档为准。
使用方式
技能以工作流方式引导集成:先确定产品形态与环境,再按服务端创建订单、前端仅传公开信息、服务端验签、webhook 异步履约的顺序推进。当被问及某个 Curlec 策略是否“100% 确信”时,运行“漏洞审查循环”:列出所有信任边界(浏览器、后端、Curlec API、webhook 接收端、数据库、履约任务、管理仪表盘);检查各类绕过(伪造成功回调、金额/币种错误、webhook 重放、重复事件、乱序事件、延迟授权、未捕获支付、密钥泄露、测试/正式密钥混用、订单不匹配、重试超时、退款重复提交);为每种绕过补充修复(服务端创建订单、使用服务端存储的订单 ID 做 HMAC、原始请求体验签、幂等键/唯一约束、API 状态重查、持久事件日志、严格状态机、环境隔离、审计日志);并重读参考文档中与缺口相关的章节。若剩余不确定性取决于账户配置、已启用支付方式、定价或当前 Dashboard 状态,应明确说明。
适用场景
适用于需要接入或维护 Curlec 支付网关的开发者与团队,包括标准 Checkout、FPX 重定向、Payment Links、Orders/Payments/Refunds API、移动 SDK、插件及 payout/RazorpayX 等场景的搭建、调试、代码审查与知识讲解。
限制
技能本身不提供实时定价、已启用支付方式、账户限制、webhook IP 范围、仅仪表盘可设的配置或生产凭据,这些需以实时 Dashboard/文档为准。部分结论可能依赖账户配置、已启用支付方式、定价或当前 Dashboard 状态,存在不确定性时应明确说明。