印度支付通道API怎么接入?开发者指南

印度支付通道API怎么接入?开发者指南

# 印度支付通道API接入指南

作为印度支付平台专家,我将为您详细介绍如何接入印度主流支付通道的API。

主要印度支付网关

1. Razorpay
2. PayU India
3. CCAvenue
4. Instamojo
5. Paytm Payment Gateway

通用接入流程

1. 注册商户账户
– 访问所选支付网关官网注册商家账户
– 提交KYC文件(通常包括PAN卡、GSTIN、银行账户证明等)
– 等待审核通过(通常需要1-3个工作日)

2. API密钥获取
– Dashboard中生成或查看API密钥对:
– Key ID/Public Key
– Key Secret/Private Key

3. API集成方式选择
大多数印度支付网关支持:
“`
a) Checkout页面集成(最简单)
b) Webhooks实时通知处理
c) SDK集成(Node.js, PHP, Python等)
d) Raw API调用(RESTful接口)
“`

Razorpay示例代码(Node.js)

“`javascript
const Razorpay = require(‘razorpay’);
const instance = new Razorpay({
key_id: ‘YOUR_KEY_ID’,
key_secret: ‘YOUR_KEY_SECRET’
});

//创建订单
const options = {
amount: req.body.price *100, //金额以派萨为单位(100派萨=1卢比)
currency: “INR”,
receipt: “order_rcptid_11”
};

instance.orders.create(options).then((order)=>{
res.json(order);
}).catch((err)=>{
res.status(500).send(err);
});
“`

PayU India示例(PHP)

“`php

// Razorpay UPI Intent示例
const options = {
amount: 50000, // ₹500 (以派萨为单位)
currency: "INR",
method: "upi",
customer: {
contact: "+919876543210",
email: "[email protected]"
},
upi_link: true, //启用UPI Intent流程
};

instance.paymentLink.create(options);

关键参数说明

  • vpa: Virtual Payment Address (如user@upi)
  • flow: collect或intent(默认)
  • expire_by: UPI链接有效期(UNIX时间戳)

EMI选项配置

处理分期付款时需特别注意:

$emiOptions = [
'bank' => 'HDFC', //支持的银行代码
'tenure' => [3,6], //允许的分期月数
'interest_rate' => ['3'=>0,'6'=>2] //各期利率(%)
];

2. Webhook安全实现

JWT签名验证(PayU示例)

from jwt import decode, InvalidSignatureError

def verify_webhook(request):
try:
payload = decode(
request.headers['X-PayU-Signature'],
key='YOUR_MERCHANT_SECRET',
algorithms=['HS256']
)
return payload['payload']
except InvalidSignatureError:
abort(403) #拒绝未经验证的请求

@app.route('/webhook', methods=['POST'])
def handle_webhook():
verified_data = verify_webhook(request)

安全要点
✅ IP白名单验证(获取网关官方IP段)
✅ HMAC签名双重校验
✅ Nonce防重放攻击

API错误处理策略

常见错误代码及应对:

HTTP状态码 Error Code 建议处理方式
400 BAD_REQUEST 检查参数格式和必填字段
401 UNAUTHORIZED 重新生成认证令牌
429 RATE_LIMITED 实施指数退避重试机制
502/504 设计异步补偿机制

推荐的重试逻辑实现(Node.js):

async function makePaymentRequest(params, retries=3){
try{
return await gateway.charge(params);
}catch(err){
if(retries>0 && isRetriable(err)){
await new Promise(r=>setTimeout(r,1000*(4-retries)));
return makePaymentRequest(params,retries-1);
}
throw err;
}
}

function isRetriable(err){
const codes = ['ECONNRESET','ETIMEDOUT','EPIPE'];
return codes.includes(err.code) || err.statusCode>=500;
}

PCI DSS合规要求

在印度处理卡数据必须遵守的规范:

  1. SAQ A-EP适用场景
    ✔️完全托管支付页面
    ✔️无敏感数据流经自身服务器

  2. 必要措施清单
    🔹季度漏洞扫描(QSA认证工具)
    🔹年度渗透测试报告
    🔹TLS1.2+强制实施(HSTS头设置)

3.日志记录规范:
📝至少保留12个月交易日志
🚫禁止存储CVV/CVC号码
🛡️加密存储PAN号码(使用AES256+密钥轮换)

BharatQR特殊集成

对于线下商户需要支持统一二维码:

//生成BharatQR内容示例(BHIM SDK)
String qrData = new QRBuilder()
.setMerchantId("MER123456")
.setStoreId("STORE001")
..setTerminalId("POS01")
.setAmount(new BigDecimal("250.50"))
.buildBharatQRString();

//响应格式规范
{
"qrType":"BHARATQR",
"content":"000201010212...",
"imageUrl":"https://api.upi.qr/v1/generate?data=..."
}

⚠️注意动态二维码有效期通常为10分钟

希望这些进阶内容能帮助您构建更健壮的支付系统。实际开发中请务必参考各平台最新的官方文档,因为NPCI和RBI的监管要求会定期更新。如需特定网关的更详细实现方案,我可以针对某个平台提供专项指导。