DoraFund 2.0 集成与支付教程

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,并携带对应的 orderIdtransactionHash

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,降低区块链支付集成的复杂度。
相关推荐
邪修king34 分钟前
Re:Linux 系统篇(三十四):进程间通信开篇Chapter1 —— 匿名管道 pipe 深度拆解与代码实战
android·linux·运维·开发语言
AFinalStone43 分钟前
Android7 SystemUI 源码解析(一)全景概览与架构设计
android·systemui
2501_916008891 小时前
如何实现iOS App代码混淆:SwiftShield使用指南
android·ios·小程序·https·uni-app·iphone·webview
别动我齐刘海2 小时前
ROS2 Jazzy + C++ 实战路线——ros2_control
c++·人工智能·python·opencv·机器学习·机器人·github
恋猫de小郭2 小时前
AndroidX 新增 Security State ,支持可编程的系统安全状态查询
android·前端·flutter
怕浪猫2 小时前
ZCode 开源了来看看这是个什么东西
node.js·github·代码规范
AFinalStone2 小时前
Android7 SystemUI 源码解析(六)QuickSettings快捷设置面板
android·systemui
Kapaseker2 小时前
你有搞明白 Volatile 什么意思吗?
android·kotlin
美狐美颜SDK开放平台2 小时前
直播APP源码与视频美颜sdk如何配合?一套完整开发思路
android·人工智能·计算机视觉·音视频·直播美颜sdk
心平气和量大福大3 小时前
android-权限
android·java