groupOfferRepository->get($message->groupOfferId); $group = $groupOffer->getGroup(); $user = $this->userRepository->get($message->userId); $gateway = $this->payum->getGateway($message->paymentToken->getGatewayName()); $status = new GetHumanStatus($message->paymentToken); $gateway->execute($status); // /** @var Payment $payment */ // $payment = $status->getFirstModel(); // Not captured if (!$status->isCaptured()) { return $status; } // user has an invitation for this group if ($user->hasLink($group)) { /** @var UserGroup $userGroup */ $userGroup = $user->getGroupMembership($group); } else { $userGroup = (new UserGroup()) ->setUser($user) ->setGroup($groupOffer->getGroup()); } // promote to member $userGroup ->setMembership(UserMembership::MEMBER) ->setStartAt(CarbonImmutable::today()) ->setPayedAt(CarbonImmutable::now()) ; // set the end date for recurring offers $offerType = $groupOffer->getType(); if ($offerType->isRecurring()) { $userGroup->setEndAt(new CarbonImmutable($offerType->getEndAtInterval())); } $user->addUserGroup($userGroup); $this->userManager->save($user, true); // payment was captured and membership is saved so invalidate the token $this->payum->getHttpRequestVerifier()->invalidate($message->paymentToken); return $status; } }