You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于React Native+Laravel的类Uber应用Stripe Connect实现方案咨询

使用Stripe Connect实现类Uber应用的资金流转方案

一、前置准备

  1. 安装Stripe Laravel SDK:
composer require stripe/stripe-php
  1. 在项目.env文件中配置Stripe密钥(从Stripe控制台获取):
STRIPE_SECRET_KEY=你的Stripe秘钥
STRIPE_CONNECT_CLIENT_ID=你的Connect客户端ID

二、为司机创建Stripe Connect关联账户

推荐使用Express类型账户,这种账户无需平台收集敏感身份信息,由Stripe完成合规验证,适配共享出行场景:

1. 后端创建账户并生成引导链接

在Laravel控制器中实现司机账户创建与验证跳转逻辑:

use Stripe\Stripe;
use Stripe\Account;
use Stripe\AccountLink;
use App\Models\Driver;
use Illuminate\Http\Request;

public function initiateDriverOnboarding(Request $request)
{
    Stripe::setApiKey(env('STRIPE_SECRET_KEY'));
    $driver = Driver::findOrFail($request->driver_id);

    // 若司机未关联Stripe账户,先创建Express账户
    if (!$driver->stripe_account_id) {
        $account = Account::create([
            'type' => 'express',
            'country' => 'CN', // 替换为司机所在国家/地区代码
            'email' => $driver->email,
            'capabilities' => [
                'transfers' => ['requested' => true], // 开启转账权限
            ],
        ]);
        $driver->stripe_account_id = $account->id;
        $driver->save();
    }

    // 生成账户验证链接,引导司机完成身份认证
    $accountLink = AccountLink::create([
        'account' => $driver->stripe_account_id,
        'refresh_url' => route('driver.stripe.onboarding.refresh'), // 验证失败跳转地址
        'return_url' => route('driver.stripe.onboarding.success'), // 验证成功跳转地址
        'type' => 'account_onboarding',
    ]);

    return response()->json(['onboarding_url' => $accountLink->url]);
}

将生成的onboarding_url返回给React Native前端,引导司机跳转至Stripe页面完成身份验证。

2. 验证账户状态

司机完成验证后,可通过以下代码确认账户是否具备转账能力:

$account = Account::retrieve($driver->stripe_account_id);
if ($account->capabilities->transfers === 'active') {
    // 账户已就绪,可进行转账操作
}

三、处理乘客支付与司机分账

乘客下单支付后,可通过两种方式实现自动分账(扣除平台手续费后转账给司机):

方式1:支付时自动分账

创建Payment Intent时直接指定分账规则,支付成功后资金自动拆分:

use Stripe\PaymentIntent;
use App\Models\Ride;

public function createRidePayment(Request $request)
{
    Stripe::setApiKey(env('STRIPE_SECRET_KEY'));
    $ride = Ride::findOrFail($request->ride_id);
    $driver = $ride->driver;
    
    $totalAmount = $ride->total_amount * 100; // 转换为分(Stripe金额单位为最小货币单位)
    $platformFee = $totalAmount * 0.1; // 平台收取10%手续费
    $driverAmount = $totalAmount - $platformFee;

    $paymentIntent = PaymentIntent::create([
        'amount' => $totalAmount,
        'currency' => 'cny',
        'payment_method_types' => ['card'],
        'transfer_data' => [
            'destination' => $driver->stripe_account_id,
            'amount' => $driverAmount,
        ],
    ]);

    // 返回客户端密钥给React Native,用于前端完成支付
    return response()->json(['client_secret' => $paymentIntent->client_secret]);
}

方式2:支付成功后手动转账

若需更灵活的分账时机,可在支付确认成功后手动创建转账:

use Stripe\Transfer;

// 确认Payment Intent状态为succeeded后执行
$transfer = Transfer::create([
    'amount' => $driverAmount,
    'currency' => 'cny',
    'destination' => $driver->stripe_account_id,
]);

四、前端适配(React Native)

集成@stripe/stripe-react-native SDK,用返回的client_secret完成支付流程,无需处理敏感支付信息。

内容的提问来源于stack exchange,提问作者blackmakiaveli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 10:12:42