Skip to content

Commit ec4f0ed

Browse files
[7.x] fix: make it possible to update order from Gateway::callback (#1240)
* fix: make it possible to update order from Gateway::callback fixes #1237 * fix: use $order->fresh() to refetch the order This prevents creating a new order instance if it initially was created from cart. * Don't need a comment here. --------- Co-authored-by: Duncan McClean <duncan@doublethree.digital>
1 parent 465ef4c commit ec4f0ed

1 file changed

Lines changed: 8 additions & 6 deletions

File tree

src/Http/Controllers/GatewayCallbackController.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,9 @@ class GatewayCallbackController extends BaseActionController
1818

1919
public function index(Request $request, $gateway)
2020
{
21-
if ($request->has('_order_id')) {
22-
$order = Order::find($request->get('_order_id'));
23-
} else {
24-
$order = $this->getCart();
25-
}
21+
$order = $request->has('_order_id')
22+
? Order::find($request->get('_order_id'))
23+
: $this->getCart();
2624

2725
$gatewayName = $gateway;
2826

@@ -40,11 +38,15 @@ public function index(Request $request, $gateway)
4038
$callbackSuccess = $order->paymentStatus() === PaymentStatus::Paid;
4139
}
4240

41+
$order->fresh();
42+
4343
if (! $callbackSuccess) {
4444
return $this->withErrors($request, "Order [{$order->get('title')}] has not been marked as paid yet.");
4545
}
4646

47-
$order->status(OrderStatus::Placed)->save();
47+
if ($order->status() !== OrderStatus::Placed) {
48+
$order->status(OrderStatus::Placed)->save();
49+
}
4850

4951
$this->forgetCart();
5052

0 commit comments

Comments
 (0)