44
55namespace Sylius \PayPalPlugin \Controller ;
66
7+ use Doctrine \Persistence \ObjectManager ;
8+ use SM \Factory \FactoryInterface ;
79use Sylius \Component \Core \Model \PaymentInterface ;
10+ use Sylius \Component \Core \OrderCheckoutTransitions ;
811use Sylius \PayPalPlugin \Manager \PaymentStateManagerInterface ;
912use Sylius \PayPalPlugin \Provider \OrderProviderInterface ;
1013use Symfony \Component \HttpFoundation \JsonResponse ;
@@ -23,25 +26,42 @@ final class CompletePayPalOrderAction
2326 /** @var OrderProviderInterface */
2427 private $ orderProvider ;
2528
29+ /** @var FactoryInterface */
30+ private $ stateMachineFactory ;
31+
32+ /** @var ObjectManager */
33+ private $ orderManager ;
34+
2635 public function __construct (
2736 PaymentStateManagerInterface $ paymentStateManager ,
2837 UrlGeneratorInterface $ router ,
29- OrderProviderInterface $ orderProvider
38+ OrderProviderInterface $ orderProvider ,
39+ FactoryInterface $ stateMachineFactory ,
40+ ObjectManager $ orderManager
3041 ) {
3142 $ this ->paymentStateManager = $ paymentStateManager ;
3243 $ this ->router = $ router ;
3344 $ this ->orderProvider = $ orderProvider ;
45+ $ this ->stateMachineFactory = $ stateMachineFactory ;
46+ $ this ->orderManager = $ orderManager ;
3447 }
3548
3649 public function __invoke (Request $ request ): Response
3750 {
38- $ token = (string ) $ request ->attributes ->get ('token ' );
39- $ order = $ this ->orderProvider ->provideOrderByToken ($ token );
51+ $ id = (int ) $ request ->attributes ->get ('id ' );
52+ $ order = $ this ->orderProvider ->provideOrderById ($ id );
53+
4054 /** @var PaymentInterface $payment */
4155 $ payment = $ order ->getLastPayment (PaymentInterface::STATE_PROCESSING );
42-
4356 $ this ->paymentStateManager ->complete ($ payment );
4457
58+ $ stateMachine = $ this ->stateMachineFactory ->get ($ order , OrderCheckoutTransitions::GRAPH );
59+ $ stateMachine ->apply (OrderCheckoutTransitions::TRANSITION_COMPLETE );
60+
61+ $ this ->orderManager ->flush ();
62+
63+ $ request ->getSession ()->set ('sylius_order_id ' , $ order ->getId ());
64+
4565 return new JsonResponse ([
4666 'orderID ' => $ payment ->getDetails ()['paypal_order_id ' ],
4767 'status ' => $ payment ->getState (),
0 commit comments