140 lines
4.6 KiB
PHP
140 lines
4.6 KiB
PHP
<?php
|
|
namespace Stemcell\Customer\Controller\Sms;
|
|
|
|
use Stemcell\Customer\Api\Data\Http\JsonResponse;
|
|
use Stemcell\Customer\Observer\CheckRegisterSmsObserver;
|
|
use Stemcell\Sms\Model\AliyunSmsSender;
|
|
use Stemcell\Sms\Model\AliyunSmsSenderFactory;
|
|
use Magento\Backend\Model\View\Result\RedirectFactory;
|
|
use Magento\Framework\App\Action\HttpPostActionInterface as HttpPostActionInterface;
|
|
use Magento\Framework\App\CsrfAwareActionInterface;
|
|
use Magento\Framework\App\Request\InvalidRequestException;
|
|
use Magento\Framework\App\RequestInterface;
|
|
use Magento\Framework\App\Response\RedirectInterface;
|
|
use Magento\Framework\Controller\Result\JsonFactory as ResultJsonFactory;
|
|
use Magento\Framework\Controller\Result\Json as ResultJson;
|
|
use Magento\Framework\Exception\LocalizedException;
|
|
use Magento\Framework\Session\SessionManagerInterface;
|
|
use Magento\Framework\Stdlib\DateTime\DateTimeFactory;
|
|
use Magento\Framework\UrlFactory;
|
|
use Magento\Framework\Data\Form\FormKey;
|
|
use Psr\Log\LoggerInterface;
|
|
|
|
class Send implements CsrfAwareActionInterface, HttpPostActionInterface
|
|
{
|
|
/**
|
|
* @var \Magento\Framework\Controller\Result\RedirectFactory
|
|
*/
|
|
protected $resultRedirectFactory;
|
|
|
|
/**
|
|
* @var \Magento\Framework\UrlInterface
|
|
*/
|
|
protected $urlModel;
|
|
|
|
protected RedirectInterface $_redirect;
|
|
|
|
protected ResultJson $resultJson;
|
|
|
|
protected FormKey\Validator $formKeyValidator;
|
|
|
|
protected DateTimeFactory $dateTimeFactory;
|
|
|
|
protected SessionManagerInterface $session;
|
|
|
|
protected FormKey $formKey;
|
|
|
|
protected JsonResponse $jsonResponse;
|
|
|
|
protected RequestInterface $request;
|
|
|
|
protected AliyunSmsSenderFactory $aliyunSmsSenderFactory;
|
|
|
|
protected LoggerInterface $logger;
|
|
|
|
public function __construct(
|
|
RedirectFactory $redirectFactory,
|
|
UrlFactory $urlFactory,
|
|
RedirectInterface $redirect,
|
|
ResultJsonFactory $resultJsonFactory,
|
|
FormKey\Validator $formKeyValidator,
|
|
FormKey $formKey,
|
|
SessionManagerInterface $session,
|
|
DateTimeFactory $dateTimeFactory,
|
|
JsonResponse $jsonResponse,
|
|
RequestInterface $request,
|
|
LoggerInterface $logger,
|
|
AliyunSmsSenderFactory $aliyunSmsSenderFactory
|
|
) {
|
|
$this->resultRedirectFactory = $redirectFactory;
|
|
$this->urlModel = $urlFactory;
|
|
$this->_redirect = $redirect;
|
|
$this->formKeyValidator = $formKeyValidator;
|
|
$this->resultJson = $resultJsonFactory->create();
|
|
$this->dateTimeFactory = $dateTimeFactory;
|
|
$this->session = $session;
|
|
$this->formKey = $formKey;
|
|
$this->request = $request;
|
|
$this->jsonResponse = $jsonResponse;
|
|
$this->aliyunSmsSenderFactory = $aliyunSmsSenderFactory;
|
|
$this->logger = $logger;
|
|
}
|
|
|
|
protected function _beforeExecute(RequestInterface $request) {
|
|
if (!$this->formKeyValidator->validate($request)) {
|
|
throw new LocalizedException(__('Please refresh current page'));
|
|
}
|
|
|
|
if ($request->getParam('captcha_fail')) {
|
|
throw new LocalizedException(__('Incorrect CAPTCHA.'));
|
|
}
|
|
return true;
|
|
}
|
|
|
|
protected function getType() {
|
|
$type = $this->request->getParam('form_id');
|
|
return $type?:CheckRegisterSmsObserver::FORMID;
|
|
}
|
|
|
|
public function execute()
|
|
{
|
|
$aliyunSmsSender = $this->aliyunSmsSenderFactory->create([
|
|
'data' => [
|
|
'type' => $this->getType(),
|
|
'mobile' => $this->request->getParam('mobile'),
|
|
]
|
|
]);
|
|
|
|
try {
|
|
$this->_beforeExecute($this->request);
|
|
$response = $aliyunSmsSender->send();
|
|
$data = [
|
|
'formKey' => $this->formKey->getFormKey(),
|
|
'result' => $response->getIsSuccess()
|
|
];
|
|
if ($aliyunSmsSender->getAppConfig()->getValue('sms/sms/debug')) {
|
|
$data['code'] = $aliyunSmsSender->getCode();
|
|
}
|
|
$this->jsonResponse->setErrors(!$response->getIsSuccess())->setData($data)->setMessages([$response->getMessage()]);
|
|
|
|
} catch (LocalizedException $e) {
|
|
$this->logger->critical('Sms send fail, '.$e->getMessage());
|
|
$this->jsonResponse->setErrors(true)
|
|
->setMessages([__($e->getMessage())->render()]);
|
|
// ->setMessages([__('Sms send fail')->render()]);
|
|
}
|
|
|
|
return $this->resultJson->setData($this->jsonResponse);
|
|
}
|
|
|
|
public function createCsrfValidationException(RequestInterface $request): ?InvalidRequestException
|
|
{
|
|
return null;
|
|
}
|
|
|
|
public function validateForCsrf(RequestInterface $request): ?bool
|
|
{
|
|
return true;
|
|
}
|
|
}
|