使用srmklive/paypal集成PayPal支付时获取正确交易ID的问题
问题原因及解决方案
你当前获取的$response['id']是PayPal的订单ID,而卖家账户交易记录里显示的是资金捕获(Capture)的交易ID,二者属于PayPal支付流程中不同的实体标识,所以不一致。
修正代码
需要从响应的captures节点中提取真实的交易ID,修改代码中交易ID的赋值部分即可:
// 替换原交易ID赋值代码 $save_transaction->transaction_id = $response['purchase_units'][0]['payments']['captures'][0]['id']; // 同时修改返回给视图的transaction_id $transaction_id = $response['purchase_units'][0]['payments']['captures'][0]['id'];
修改后的完整控制器逻辑片段:
if (isset($response['status']) && $response['status'] == 'COMPLETED') { if(isset($video_id) && !empty($video_id)) { $save_transaction = new Transcation(); $save_transaction->user_id = Auth::user()->id; $save_transaction->item_type = 'video'; $save_transaction->item_id = $video_id; $save_transaction->amount = $response['purchase_units'][0]['payments']['captures'][0]['amount']['value']; // 修正:获取捕获的交易ID $save_transaction->transaction_id = $response['purchase_units'][0]['payments']['captures'][0]['id']; $save_transaction->transaction_type = 'paypal'; $save_transaction->is_payment_done = 1; $save_transaction->save(); } $message = 'Your transaction is completed successfully!'; // 同步修正返回的交易ID $transaction_id = $response['purchase_units'][0]['payments']['captures'][0]['id']; return view('frontend.payment.success_payment',compact('message','transaction_id')); }
补充说明
PayPal的支付流程中,Order(订单)是支付请求的整体标识,而Capture(捕获)是实际完成资金扣划的交易记录,卖家后台展示的交易ID正是捕获环节的ID,因此需要从captures数组中提取该值。
内容的提问来源于stack exchange,提问作者Vinod
相关产品推荐
相关产品推荐

