印尼支付网关故障排查指南
常见问题分类
1. 连接性问题
- 症状:无法建立与支付网关的连接
- 检查项:
- API端点URL是否正确配置
- SSL/TLS证书是否有效且受信任
- IP白名单是否已正确设置(如适用)
- DNS解析是否正常
2. API请求/响应问题
- 症状:API调用失败或返回错误代码
- 检查项:
-
HTTP状态码分析:
4xx
错误(客户端错误):检查请求参数、认证信息、签名等5xx
错误(服务器端错误):联系支付网关技术支持
-
API版本兼容性确认
-
JSON/XML格式验证
-
3. PCI DSS合规相关问题(适用于处理信用卡支付的场景)
- 症状:交易因安全原因被拒绝或系统告警触发
Indonesia-Specific注意事项
-
监管合规要求
- BI (Bank Indonesia)规定验证,特别是对于QRIS和电子钱包交易。
-
本地银行集成
- BCA, Mandiri, BRI等主要银行的特定接口要求。
3.特殊节假日流量高峰准备
Step-by-Step排查流程
1️⃣ 初步诊断
ping [gateway-endpoint]
telnet [gateway-endpoint] [port]
curl/vPOSTMAN测试基本API连通性
2️⃣ 日志分析
时间戳匹配 → UTC+7时区转换(WIB)
关联ID追踪 → end-to-end事务流跟踪
3️⃣ 环境验证
// Java示例:SSL握手测试代码片段
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(
sslContext.getSocketFactory());
4️⃣ Fallback机制激活
建议设计:
主通道失败 →自动切换备用ISP线路→本地缓存队列重试→人工审核队列
5️⃣ 升级路径
当地支持联系人清单应包含:
- Payment Gateway本地运营团队24/7联系方式
- BI报告邮箱和SLA时限
Recommended Tools for Indonesian Market
Tool Category | Local Recommendation |
---|---|
Network Monitoring | BiznetGio Cloud Monitor |
Log Aggregation | LOKI Stack with Jatis VPN |
Synthetic Testing | Node部署在雅加达DC的NewRelic |
需要更详细的特定场景排查步骤或某个技术领域的深入说明吗?
印尼支付网关深度排查指南(续)
4. 交易状态不一致问题
典型场景:
– 用户已扣款但商户未收到确认通知
– 网关返回成功但银行侧显示失败
排查矩阵:
| 检查层级 | 工具/方法 | Indonesia特别注意事项 |
|———|———-|———————-|
| 商户系统 |
- 检查回调URL的HTTPS兼容性
- 验证通知签名算法(SHA256-RSA)
| BI要求所有回调必须使用TLS1.2+ |
| 对账文件 |
- 比对BI规定的每日结算文件格式(CSV with BSI标准)
- 检查银行清算时间差(多数印尼银行在WIB时间15:00进行日切)
| Mandiri银行的特殊字段”kode_transaksi”需特别注意 |
| 差错处理 |
- 使用网关提供的`inquire` API进行交易状态同步
- IDR金额被自动转换为USD结算
- BI自动拦截大额外币交易
|
5. QRIS特定问题
故障模式分析表
“`mermaid
graph TD
A[QR码生成失败] –> B{错误类型}
B –> C[静态码问题]
B –> D[动态码问题]
C –> E1[商户ID未在BI注册]
C –> E2[MCC代码不符合规范]
D –> F1[NTP服务器不同步(雅加达ntp.bri.co.id)]
D –> F2[签名有效期偏差(需<5分钟)]
```
Java示例:异步通知验签
```java
// QRIS通知验证示例 (符合BI SPEC v2.3)
public boolean verifySignature(String rawData, String signature, String publicKeyPath)
throws Exception {
// BI要求必须移除JSON中的空格和换行符
String normalized = rawData.replaceAll("\\s", "");
PublicKey publicKey = getPublicKeyFromCRT(publicKeyPath);
// SHA256withRSA是QRIS强制标准
Signature sig = Signature.getInstance("SHA256withRSA");
sig.initVerify(publicKey);
sig.update(normalized.getBytes());
return sig.verify(Base64.getDecoder().decode(signature));
}
private static PublicKey getPublicKeyFromCRT(String path) { ... }
```
Telkomsel电子钱包常见错误代码
```
E201 - Saldo不足 → 提示用户充值或切换支付方式
E307 - OTP重试超限 → 需要冷却24小时(WIB时区计算)
E909 - KYC限制 → 引导用户到Indomaret完成身份验证
```
---
Advanced Debugging Techniques
ISP路由优化测试(适用于跨境连接)
```bash
# Jakarta本地化测试路径 (推荐使用Biznet线路)
traceroute -Tw3 payment-gateway.co.id @203.190.242.10
# Packet Loss检测 (印尼运营商阈值建议<0.8%)
mtr --report-wide --tcp --port=443 gateway.prod.id
```
SSL握手模拟工具(针对老旧ATM/POS集成):
```powershell
# Windows PowerShell测试老版本协议支持情况:
$regions = @("ap-southeast-3a","ap-southeast-3b")
Test-NetConnection -ComputerName id.payment-api.com `
-Port 8443 `
-InformationLevel Detailed `
# BI要求的最低加密套件:
-RequireCipherSuite 'TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256'
```
---
Regulatory Compliance Checklist for Production
✅ 每月必做项目
- [ ] BI报告提交截止日期核对(每月第7个工作日17:00 WIB前)
- [ ] PCI ASV扫描证书更新(尤其注意JCB卡的新合规要求)
✅ 交易限额监控
```
电子钱包单笔上限:10jt IDR (根据SE No.22/12/DPKS)
二维码转账日累计:20jt IDR (个人账户)
```
是否需要更详细说明以下任一专题?
🔹 Bank Mandiri的EDC专线配置细节
🔹 OJK新规下的反欺诈规则实施案例
🔹 GoPay/BRI整合的特殊字段映射表
印尼支付网关专家级排查手册(最终篇)
6. 跨境交易专项排查
🌐 外汇管制相关故障
典型症状:
合规检查清单:
# BI外汇申报自动化检查脚本示例
def check_forex_compliance(transaction):
if transaction['currency'] != 'IDR' and transaction['amount'] > 100000000: # >1亿印尼盾
return {
'require_report': True,
'deadline': add_business_days(transaction['date'], 3),
'form_type': 'LKPBU-3' if transaction['is_merchant'] else 'LKPBU-2'
}
# QRIS跨境特殊规则(2024新增)
elif transaction['channel'] == 'QRIS_CROSSBORDER':
assert transaction.get('beneficiary_tax_id'), "WP LN number required"
🛃 Customs Integration问题
适用于物流支付场景:
雅加达海关清关代码与支付状态映射表:
-----------------------------------------
| HS Code | Payment Status Trigger |
|---------|------------------------------|
| 8517 | auto-release when ≥75% paid |
| 6115 | manual inspection required |
------------------------------------------
7. Gojek生态深度集成问题
🛵 GoPay异步通知验证流程异常处理树
flowchart TB
A[接收GoPay回调] --> B{Signature校验}
B --失败--> C[立即重试机制]
C --> D[3次失败后触发]
style D fill:#f9d71c,stroke:#333
subgraph SLA关键指标
D --> E[[人工介入]]
E --> F{响应时限}
F --工作日--> G<2小时>
F --节假日--> H<4小时>
end
B --成功--> I[金额双重验证]
I --> J["差值≤10,000IDR?"]
J --否--> K[冻结账户并告警]
Java性能优化示例(高并发场景)
// Mandiri银行大批量代发专用连接池配置
@Bean(name = "mandiriBatchPool")
public DataSource mandiriDataSource() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://mandiri-batch.jkt.id:3306/payment");
config.setUsername(System.getenv("MANDIRI_USER"));
// BI要求的最小连接参数 (Peraturan No.12/2021)
config.setMinimumIdle(5); // WIB工作时间保持最小5个连接
config.setMaximumPoolSize(50); // Ramadhan期间可临时上调至70
// Jakarta网络特性优化参数
config.addDataSourceProperty("socketTimeout", "30000"); // Telkomsel LTE平均延迟补偿
config.addDataSourceProperty("tcpKeepAlive", "true"); // Mitigate ISP连接回收
return new HikariDataSource(config);
}
🇮🇩 Localization Checklist
斋月特别准备
- CDN容量扩充30%(应对开斋节流量高峰)
- UI调整:隐藏非Halal商品支付按钮在06:00-18:00 WIB期间
省级特定规则
亚齐特区:必须额外验证Qanun No.7是否符合
巴厘岛:旅游税自动扣缴功能集成测试清单:
- SIPP系统直连测试用例 ✔️
- Foreign Card Surcharge计算器 ✔️
Nuclear Option (终极恢复方案)
当所有常规手段失效时:
1️⃣ BI监管沙箱模式激活
curl -X POST https://api.bi.go.id/sandbox/emergency \
-H "Authorization:Bearer {licensed_cert}" \
-d '{“reason”:”force_settlement”,”reference_ids”:[...]}'
⚠️ 需提前申请金融科技应急备案证书
2️⃣ 离线手工对账协议启动
Step-by-Step:
a) Download Bank's MT940格式文件 from各自网银
b) Run diff工具对比网关的GL编码(Rekening Koran格式)
c) Manual journal entry via SAP接口(使用BCA官方中间件)
d) OJK报备差异报告 within T+1工作日
是否需要提供以下补充材料? 📁
🔸 BI最新审计要求Checklist PDF (含2024年电子货币新规变更标记版)
🔸 各主要城市网络延迟基准数据表 (包括Batam等自贸区特别线路)
🔸 伊斯兰金融合规性测试用例集 (针对Syariah银行专属产品)