Hyperswitch项目:如何集成新的支付连接器

Hyperswitch项目:如何集成新的支付连接器

hyperswitch juspay/hyperswitch: 这是一个用于实现API网关和微服务的Java库。适合用于需要实现API网关和微服务的场景。特点:易于使用,支持多种API网关和微服务实现,具有高性能和可扩展性。 hyperswitch 项目地址: https://gitcode.com/gh_mirrors/hy/hyperswitch

概述

在支付网关系统中,连接器(Connector)扮演着至关重要的角色,它负责与各种支付服务提供商(如Stripe、Adyen等)进行交互。本文将详细介绍如何在Hyperswitch项目中集成一个新的支付连接器,帮助开发者理解整个集成流程和技术实现细节。

准备工作

在开始集成前,需要确保满足以下条件:

  1. 熟悉目标连接器的API文档和规范
  2. 本地已搭建并运行Hyperswitch项目环境
  3. 获取测试用的API凭证(通常在连接器官网申请沙盒/UAT环境凭证)
  4. 安装Rust nightly工具链用于代码格式化:
    rustup toolchain install nightly
    

核心概念解析

连接器(Connector)与支付方式(Payment Method)

  • 连接器:处理支付交易或管理欺诈风险的中间件(如Stripe处理支付,Signifyd管理风险)
  • 支付方式:具体的交易方式(如信用卡、PayPal等)

集成步骤详解

1. 生成连接器模板

使用项目提供的脚本快速生成连接器基础结构:

sh scripts/add_connector.sh <connector-name> <connector-base-url>

生成的文件结构示例:

hyperswitch_connectors/src/connectors
├── billwerk
│   └── transformers.rs
└── billwerk.rs
crates/router/tests/connectors
└── billwerk.rs

注意:需要将测试文件移动到正确位置: crates/hyperswitch_connectors/src/connectors/connector_name/test.rscrates/router/tests/connectors/connector_name.rs

2. 实现请求和响应类型

transformers.rs中定义API请求/响应结构体,并实现与Hyperswitch核心数据结构的转换。

请求结构体示例
#[derive(Debug, Serialize)]
pub struct BillwerkPaymentsRequest {
    handle: String,
    amount: MinorUnit,
    source: Secret<String>,
    currency: common_enums::Currency,
    customer: BillwerkCustomerObject,
    metadata: Option<SecretSerdeValue>,
    settle: bool,
}
转换实现
impl TryFrom<&BillwerkRouterData<&types::PaymentsAuthorizeRouterData>> for BillwerkPaymentsRequest {
    type Error = error_stack::Report<errors::ConnectorError>;
    fn try_from(item: &BillwerkRouterData<&types::PaymentsAuthorizeRouterData>) -> Result<Self, Self::Error> {
        // 转换逻辑...
    }
}

3. 处理响应映射

定义支付状态枚举并实现到Hyperswitch状态的转换:

#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "lowercase")]
pub enum BillwerkPaymentState {
    Created,
    Authorized,
    Pending,
    Settled,
    Failed,
    Cancelled,
}

impl From<BillwerkPaymentState> for enums::AttemptStatus {
    fn from(item: BillwerkPaymentState) -> Self {
        match item {
            BillwerkPaymentState::Created | BillwerkPaymentState::Pending => Self::Pending,
            BillwerkPaymentState::Authorized => Self::Authorized,
            BillwerkPaymentState::Settled => Self::Charged,
            BillwerkPaymentState::Failed => Self::Failure,
            BillwerkPaymentState::Cancelled => Self::Voided,
        }
    }
}

4. 关键字段说明

  • connector_request_reference_id:商户请求参考ID
  • connector_response_reference_id:连接器返回的交易标识ID
  • resource_id:连接器交易ID
  • redirection_data:用于3D Secure等重定向流程

5. 错误处理

定义错误响应结构体:

#[derive(Debug, Serialize, Deserialize)]
pub struct BillwerkErrorResponse {
    pub code: Option<i32>,
    pub error: String,
    pub message: Option<String>,
}

核心Trait实现

ConnectorCommon Trait

包含连接器的基本描述信息:

impl ConnectorCommon for Billwerk {
    fn id(&self) -> &'static str {
        "Billwerk"
    }
    
    fn get_currency_unit(&self) -> api::CurrencyUnit {
        api::CurrencyUnit::Minor
    }
    
    fn common_get_content_type(&self) -> &'static str {
        "application/json"
    }
    
    // 其他必要方法...
}

ConnectorIntegration Trait

实现各API端点的集成逻辑:

impl ConnectorIntegration<api::Authorize, ...> for Billwerk {
    fn get_url(&self, _req: &..., connectors: &Connectors) -> CustomResult<String, ...> {
        Ok(format!("{}/v1/payments", self.base_url(connectors)))
    }
    
    fn get_request_body(&self, req: &...) -> CustomResult<RequestContent, ...> {
        let connector_req = BillwerkPaymentsRequest::try_from(req)?;
        Ok(RequestContent::Json(Box::new(connector_req)))
    }
    
    // 其他必要方法...
}

测试与验证

  1. 编写基本支付流程测试用例
  2. 测试各种支付场景(成功、失败、3D Secure等)
  3. 验证错误处理逻辑
  4. 检查日志和监控数据

最佳实践建议

  1. 状态处理:默认状态应为Pending,只有明确成功或失败时才更新状态
  2. 错误处理:全面覆盖各种错误场景
  3. 日志记录:详细记录请求/响应数据便于调试
  4. 性能考虑:优化转换逻辑减少性能开销
  5. 安全性:妥善处理敏感数据的序列化和反序列化

通过以上步骤,开发者可以系统性地完成一个新支付连接器的集成工作,确保其与Hyperswitch核心系统的无缝协作。

hyperswitch juspay/hyperswitch: 这是一个用于实现API网关和微服务的Java库。适合用于需要实现API网关和微服务的场景。特点:易于使用,支持多种API网关和微服务实现,具有高性能和可扩展性。 hyperswitch 项目地址: https://gitcode.com/gh_mirrors/hy/hyperswitch

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张俊领Tilda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值