基于React Native+Laravel的类Uber应用Stripe Connect实现方案咨询
使用Stripe Connect实现类Uber应用的资金流转方案
一、前置准备
- 安装Stripe Laravel SDK:
composer require stripe/stripe-php
- 在项目
.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
相关产品推荐
相关产品推荐

