您好,我正在使用条纹包(composer require stripe / stripe-php)在我的网站中集成条纹支付功能。我正在为收费用户使用此代码。
public function stripe(Request $request){
$customer = json_decode(Session::get('customer'));
if (Cart::getContent() == null || $customer == null){
return redirect()->back();
}
$cartCollection = Cart::getContent();
$shippingCost=0;
foreach ($cartCollection as $getSingleCartProduct){
$shippingCost += $getSingleCartProduct->attributes->unit_charge;
}
$total_price =Cart::getSubTotal()+$shippingCost;
$error = '';
$success = '';
$currency = Currency::find('1');
Stripe::setApiKey("sk_live_xxxxxxxxxxxxxxxxxxxxxxxx");
if (Cart::getContent()){
$charge = Charge::create([
'amount' => $total_price * 100,
'currency' => 'usd',
'source' => $request->stripeToken,
'receipt_email' => $request->email,
]);
}
$cartCollections= Cart::getContent();
foreach ($cartCollections as $cartCollection){
$order = new Order();
$order->name = $cartCollection->name;
$order->price = $cartCollection->price;
$order->quantity = $cartCollection->quantity;
$order->image = $cartCollection->attributes->image;
$order->product_id = $cartCollection->attributes->product_id;
$order->unit_charge = $cartCollection->attributes->unit_charge;
$order->curier_id = $cartCollection->attributes->curier_id;
$order->seller_id = $cartCollection->attributes->seller_id;
$order->buyer_id = \Illuminate\Support\Facades\Auth::user()->id;
$order->color = $cartCollection->attributes->color;
$order->size = $cartCollection->attributes->size;
$order->color_image = $cartCollection->attributes->color_image;
$order->first_name = $customer->first_name;
$order->last_name = $customer->last_name;
$order->email = $customer->email;
$order->address1 = $customer->address1;
$order->address2 = $customer->address2;
$order->country = $customer->country;
$order->state = $customer->state;
$order->zip = $customer->zip;
$order->payment_status = $customer->payment_status;
$order->status ='0';
$order->save();
}
if ($order->save()){
$delete_carts = Cart::getContent();
foreach ($delete_carts as $delete_cart){
Cart::remove($delete_cart->id);
}
return redirect()->route('charge.complete')->with('success', 'Yor order successfully placed');
}else{
return redirect()->route('charge.complete')->with('success', 'Invalid Activity!');
}
}
当卡有效且有足够的金额时它将起作用。但是,当卡无效时,我无法显示它。 Laravel显示它是默认错误(卡没有足够的余额) 这是我的完整代码
答案 0 :(得分:1)
我已经重构了您的一些代码,重用了提取的Cart::getContent
并添加了一些错误处理。希望这种错误处理能够以您喜欢的方式显示更多错误。
public function stripe(Request $request) {
$cartCollections = Cart::getContent();
$customer = json_decode(Session::get('customer'));
if ($cartCollections == null || $customer == null) {
return redirect()->back()->withErrors(['msg', 'Your session has expired']);
}
$shippingCost = 0;
foreach ($cartCollections as $cartCollection) {
$shippingCost += $cartCollection->attributes->unit_charge;
}
$total_price = Cart::getSubTotal() + $shippingCost;
$currency = Currency::find(1);
Stripe::setApiKey("XXXXXXXXXXXXXXXXXXXXXXXX");
try {
$charge = Charge::create([
'amount' => $total_price * 100,
'currency' => 'usd',
'source' => $request->stripeToken,
'receipt_email' => $request->email,
]);
foreach ($cartCollections as $cartCollection) {
$order = new Order();
$order->name = $cartCollection->name;
$order->price = $cartCollection->price;
$order->quantity = $cartCollection->quantity;
$order->image = $cartCollection->attributes->image;
$order->product_id = $cartCollection->attributes->product_id;
$order->unit_charge = $cartCollection->attributes->unit_charge;
$order->curier_id = $cartCollection->attributes->curier_id;
$order->seller_id = $cartCollection->attributes->seller_id;
$order->buyer_id = \Illuminate\Support\Facades\Auth::user()->id;
$order->color = $cartCollection->attributes->color;
$order->size = $cartCollection->attributes->size;
$order->color_image = $cartCollection->attributes->color_image;
$order->first_name = $customer->first_name;
$order->last_name = $customer->last_name;
$order->email = $customer->email;
$order->address1 = $customer->address1;
$order->address2 = $customer->address2;
$order->country = $customer->country;
$order->state = $customer->state;
$order->zip = $customer->zip;
$order->payment_status = $customer->payment_status;
$order->status ='0';
$order->save();
}
if ($order->save()) {
foreach ($cartCollections as $cartCollection) {
Cart::remove($cartCollection->id);
}
return redirect()->route('charge.complete')->with('success', 'Yor order successfully placed');
}
return redirect()->route('charge.complete')->withErrors(['msg', 'Invalid Activity!']);
} catch (Error\Base $e) {
// change to the route you want to display error
return redirect()->route('charge.complete')->withErrors(['msg', $e->getMessage()]);
} catch (Exception $e) {
// change to the route you want to display error
return redirect()->route('charge.complete')->withErrors(['msg', $e->getMessage()]);
}
}
在您的视图中,添加以下代码片段以显示错误消息:
@if($errors->any())
<p>Error: {{$errors->first()}}</p>
@endif
如果您想处理更多可能的异常,可以查看Stripe文档中的可用异常类型:https://stripe.com/docs/api/errors/handling