如何在Laravel中动态获取Stripe Connect ID及处理支付客户字段问题
问题一:动态获取Stripe Connect ID
Stripe Connect ID(acct_xxx格式)是平台关联商户账户的唯一标识,动态获取需按以下步骤操作:
- 在用户/商户数据表中新增字段(例如
stripe_connect_id),用于存储商户授权后Stripe返回的Connect ID。 - 商户通过Stripe Connect授权平台时,Stripe会返回包含
stripe_user_id的响应,该值即为目标acct_xxx,需存入数据库对应字段。 - 创建Charge时,从数据库读取对应商户的Connect ID,替换硬编码值。
修改后的控制器代码示例:
Stripe\Stripe::setApiKey(config('services.stripe.secret')); // 建议用config替代直接调用env,更安全 // 假设当前操作的商户为登录用户,从数据库读取Connect ID $stripeConnectId = auth()->user()->stripe_connect_id; $charge = Stripe\Charge::create( [ "amount" => 100 * 100, "currency" => "AUD", "source" => $request->stripeToken, "description" => "This is test payment", ], ['stripe_account' => $stripeConnectId] );
问题二:填充Stripe支付板块的客户名称
当前代码直接用source创建Charge,Stripe不会自动生成Customer记录,导致客户字段为空。解决方式是先创建Stripe Customer并传入名称,再基于该Customer创建Charge:
修改后的代码示例:
Stripe\Stripe::setApiKey(config('services.stripe.secret')); // 1. 先创建Customer,传入客户名称等信息 $customer = Stripe\Customer::create( [ 'name' => $request->customer_name, // 从请求参数获取客户名称 'source' => $request->stripeToken, ], ['stripe_account' => auth()->user()->stripe_connect_id] // 对应商户的Connect ID ); // 2. 基于Customer ID创建Charge $charge = Stripe\Charge::create( [ "amount" => 100 * 100, "currency" => "AUD", "customer" => $customer->id, // 用Customer ID替代source参数 "description" => "This is test payment", ], ['stripe_account' => auth()->user()->stripe_connect_id] );
完成后,Stripe支付板块会显示该Customer的名称。若不想创建Customer,也可在Charge的description字段拼接客户名称,但仅能在描述中显示,无法填充专门的客户字段。
内容的提问来源于stack exchange,提问作者quad que
相关产品推荐
相关产品推荐

