DoraFund 2.0 是一个专注于 ERC20 协议支付 的区块链支付平台,目前支持以太坊兼容链(EVM 系)。Solana 支付暂不支持。
官方网址:dorafund.com
官方文档地址:dora4.github.io/dora-wallet...
订单界面展示

订单界面需开发者自行实现(SDK 后续将提供默认模板)。核心字段包括:
- 订单号 orderId
- 商品名称和描述
- 支付金额 + Token Symbol
- 订单状态(未支付 / 已支付 / 已确认)
- 交易哈希 transactionHash
集成流程
1.在Application中初始化SDK
            
            
              kt
              
              
            
          
          private fun initPay() {
    val chains: Array<Modal.Model.Chain> = arrayOf(
        Web3ModalChainsPresets.ethChains["43114"]!!    // Avalanche C-Chain
    )
    DoraFund.init(this,
        "你的应用名称",
        "你的应用描述",
        "http://yourdomain.com",
        chains,
        getColor(R.color.gold_yellow),
        object : DoraFund.PayListener {
            override fun onPayFailure(orderId: String, msg: String) {
            }
            override fun onSendTransactionToBlockchain(orderId: String, transactionHash: String) {
                val order = DaoFactory.getDao(Order::class.java)
                    .selectOne(WhereBuilder.create().addWhereEqualTo("order_id", orderId))
                order?.let {
                    it.transactionHash = transactionHash
                    DaoFactory.getDao(Order::class.java).update(it)
                }
            }
        })
}DoraFund.PayListener建议随init一起,然后你可以通过发消息给具体的处理界面。onSendTransactionToBlockchain会在用户点击了钱包的确认发送代币按钮后,如果广播成功,则会回调交易哈希给你,这个回调中同时也会给你orderId,你需要把自己用户点击商品购买按钮下的那个订单时的orderId与之比对,关联订单的交易哈希数据。
2.生成订单并发起支付
调用 DoraFund.pay 即可:
            
            
              kt
              
              
            
          
          private fun buyGoods1() {
    DoraFund.pay(this,
       "你的accesskey",
       "你的secretKey",
       "你的商品名称",
       "支付0.01AVAX购买完整版功能,仅支付一次,永久有效,是否购买?",
       "0xcBa852Ef29a43a7542B88F60C999eD9cB66f6000",
       0.01,
       object : DoraFund.OrderListener {
          override fun onPrintOrder(
             orderId: String,
             chain: Modal.Model.Chain,
             value: Double
          ) {
             val order = Order()
             order.orderId = orderId
             order.createdTime = System.currentTimeMillis()
             order.goodsName = "你的商品名称"
             order.goodsDesc = "和订单展示的一样"
             order.tokenSymbol = "AVAX" // 同样展示在订单列表界面,和amount拼接
             order.amount = 0.01 // 同样展示在订单列表界面,和tokenSymbol拼接
             DaoFactory.getDao(Order::class.java).insert(order)
          }
       })
}调用 pay 后,SDK 会弹出支付确认;用户确认后将请求钱包发送代币。交易成功广播即回调 onSendTransactionToBlockchain,并携带对应的 orderId 与 transactionHash。
3.交易确认(发货逻辑)
            
            
              kt
              
              
            
          
          Observable.fromCallable {
    // 自动提取
    val verified = PayUtils.queryTransaction(order.transactionHash)
    if (verified) {
        // 标记订单已经过区块链确认
        order.isVerified = true
        DaoFactory.getDao(Order::class.java).update(order)
    }
    verified
}.subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe { verified ->
        if (verified) {
            // 主线程刷新UI
        }
    }
}4.钱包连接检测
首次支付需检测钱包连接:
            
            
              kt
              
              
            
          
          if (!DoraFund.isWalletConnected()) {
    DoraFund.connectWallet(this, REQUEST_BUY_GOODS_1)
} else {
    buyGoods1()
}连接完成后,会回调 onActivityResult。然后在Activity中处理之前的支付请求。
            
            
              kt
              
              
            
          
          override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (resultCode == Activity.RESULT_OK) {
       if (requestCode == REQUEST_BUY_GOODS_1) {
          if (DoraFund.isWalletConnected()) {
             buyGoods1()
          }
       } else if (requestCode == REQUEST_GOODS_2) {
          if (DoraFund.isWalletConnected()) {
             buyGoods3()
          }
       } else if (requestCode == REQUEST_GOODS_3) {
          if (DoraFund.isWalletConnected()) {
             buyGoods3()
          }
       }
    }
}数据表结构
订单表 Order 示例:
            
            
              kt
              
              
            
          
          import dora.db.constraint.Id
import dora.db.migration.OrmMigration
import dora.db.table.Column
import dora.db.table.OrmTable
class Order(
    override val isUpgradeRecreated: Boolean = false,
    override val migrations: Array<OrmMigration>? = arrayOf()
) : OrmTable {
    @Id
    val id: Long = OrmTable.ID_UNASSIGNED
    @Column("order_id")
    var orderId: String = ""
    @Column("goods_name")
    var goodsName: String = ""
    @Column("goods_desc")
    var goodsDesc: String = ""
    @Column("token_symbol")
    var tokenSymbol: String = ""
    @Column("amount")
    var amount: Double = 0.0
    @Column("created_time")
    var createdTime: Long = 0
    @Column("is_verified")
    var isVerified: Boolean = false
    @Column("transaction_hash")
    var transactionHash: String = ""
}注意事项
1.用户能否自行加速
app需要提示用户,不能通过提高gas费进行加速操作。这个过程只有钱包知道,SDK不知道,因此导致交易哈希变化,从而无法提取商品的所有损失由用户承担。后期SDK也会补上此信息。正确的处理流程是,用户一旦发现网络拥堵(矿工费给低了极端情况可能需要确认几个小时,但正常不会超过15秒),应该等待区块确认完成或者取消。如对该笔订单有疑问,请提交工单干预,协商原路退还发送的代币,可以收取一定手续费,防止恶意退款。
2.用户付款了商户能否不发货
不能。官方提供了举报模板,消费者可以举报app给平台,一经发现欺诈行为,accessKey将被永久禁用,证据可能会被提交给司法机关。
PayFi和区块链支付的前景
当前区块链支付正在加速发展,包括美国已经纳入法律监管。
- 
全球合规化趋势 - 美国、欧盟已逐步将区块链支付纳入监管框架,反洗钱(AML)和合规审查要求日益严格。
- 区块链支付正逐渐从"灰色地带"走向 合法合规的金融基础设施。
 
- 
PayFi 的发展方向 - PayFi(Payment + DeFi)代表支付与去中心化金融的融合。
- 未来不仅限于简单的代币支付,还会结合 稳定币(USDT、USDC) 、去中心化抵押贷款 、链上信用评分。
- 可能出现 跨链支付结算网络,实现"全球支付一键完成"。
 
- 
对商户与用户的价值 - 商户端:零门槛接入全球支付,无需传统支付通道(Visa/MasterCard)。
- 用户端:可用加密资产进行小额支付、订阅、跨境购物。
- 安全透明:所有支付均可链上溯源,防止欺诈。
 
- 
未来展望 - 区块链支付将在 3~5 年内逐步进入 跨境电商、游戏充值、会员订阅、数字资产购买 等领域。
- DoraFund 2.0 的定位是:开发者友好的 ERC20 支付 SDK,降低区块链支付集成的复杂度。