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,降低区块链支付集成的复杂度。
相关推荐
没有了遇见11 分钟前
Android 原生定位实现(替代融合定位收费,获取经纬度方案)
android·kotlin
逢生博客19 分钟前
Ubuntu Server 快速部署长安链:基于 Go 的智能合约实现商品溯源
ubuntu·golang·区块链·智能合约·web3.0·长安链·商品溯源
一枚小小程序员哈23 分钟前
基于Android的车位预售预租APP/基于Android的车位租赁系统APP/基于Android的车位管理系统APP
android·spring boot·后端·struts·spring·java-ee·maven
诸神黄昏EX28 分钟前
Android SystemServer 系列专题【篇四:SystemServerInitThreadPool线程池管理】
android
用户2018792831671 小时前
pm path 和 dumpsys package 的区别
android
是店小二呀1 小时前
【C++】智能指针底层原理:引用计数与资源管理机制
android·java·c++
TechubNews2 小时前
比特币操作系统:释放比特币在支付领域的潜力
区块链
HAORChain2 小时前
Hyperledger Fabric官方中文教程-改进笔记(十四)-向通道中添加组织
笔记·区块链·fabric
DoubleYellowIce2 小时前
一次混淆XLog导致的crash分析记录
android
早睡早起头发多3 小时前
Git 场景化实战指南:从菜鸟到高手的完整攻略🚀
github