1
0
Fork 0
mirror of synced 2025-04-20 01:21:01 +00:00

add legn vars in template

This commit is contained in:
Sergey Chazov 2020-10-16 15:24:28 +03:00
parent 7a4fac7f8e
commit 6ffc090692
12 changed files with 246 additions and 153 deletions

View file

@ -3020,8 +3020,21 @@ class ApiClient
public function activateLoyaltyAccount(int $loyaltyId): ApiResponse
{
return $this->client->makeRequest(
"/api/v5/loyalty/account/".$loyaltyId."/activate",
"/loyalty/account/".$loyaltyId."/activate",
Client::METHOD_POST
);
}
/**
* @param array $request
* @return \RetailCrm\Response\ApiResponse
*/
public function sendVerificationCode(array $request): ApiResponse
{
return $this->client->makeRequest(
"/verification/sms/confirm",
Client::METHOD_POST,
$request
);
}
}

View file

@ -1,3 +0,0 @@
<?
$MESS ['USER_PROPERTY_NAME'] = "User properties section title";
?>

View file

@ -1,63 +0,0 @@
<?
$MESS['AUTH_NONSECURE_NOTE'] = "The password will be sent in open form. Enable JavaScript in your web browser to enable password encryption.";
$MESS['AUTH_REGISTER'] = "Registration";
$MESS['AUTH_REQ'] = "Required fields.";
$MESS['AUTH_SECURE_NOTE'] = "The password will be encrypted before it is sent. This will prevent the password from appearing in open form over data transmission channels.";
$MESS['MAIN_REGISTER_AUTH'] = "You have been registered and authorized successfully.";
$MESS['REGISTER_CAPTCHA_PROMT'] = "CAPTCHA image characters";
$MESS['REGISTER_CAPTCHA_TITLE'] = "Spam bot protection (CAPTCHA)";
$MESS['REGISTER_EMAIL_WILL_BE_SENT'] = "A registration confirmation request will be sent to the specified e-mail address.";
$MESS['REGISTER_FIELD_AUTO_TIME_ZONE'] = "Time Zone";
$MESS['REGISTER_FIELD_CONFIRM_PASSWORD'] = "Password confirmation";
$MESS['REGISTER_FIELD_EMAIL'] = "E-mail";
$MESS['REGISTER_FIELD_LAST_NAME'] = "Last Name";
$MESS['REGISTER_FIELD_LOGIN'] = "Login (min. 3 characters)";
$MESS['REGISTER_FIELD_NAME'] = "Name";
$MESS['REGISTER_FIELD_PASSWORD'] = "Password";
$MESS['REGISTER_FIELD_PERSONAL_BIRTHDAY'] = "Birthday";
$MESS['REGISTER_FIELD_PERSONAL_CITY'] = "City";
$MESS['REGISTER_FIELD_PERSONAL_COUNTRY'] = "Country";
$MESS['REGISTER_FIELD_PERSONAL_FAX'] = "Fax";
$MESS['REGISTER_FIELD_PERSONAL_GENDER'] = "Gender";
$MESS['REGISTER_FIELD_PERSONAL_ICQ'] = "ICQ";
$MESS['REGISTER_FIELD_PERSONAL_MAILBOX'] = "Mailbox";
$MESS['REGISTER_FIELD_PERSONAL_MOBILE'] = "Mobile";
$MESS['REGISTER_FIELD_PERSONAL_NOTES'] = "Notes";
$MESS['REGISTER_FIELD_PERSONAL_PAGER'] = "Pager";
$MESS['REGISTER_FIELD_PERSONAL_PHONE'] = "Phone";
$MESS['REGISTER_FIELD_PERSONAL_PHOTO'] = "Photo";
$MESS['REGISTER_FIELD_PERSONAL_PROFESSION'] = "Job Title";
$MESS['REGISTER_FIELD_PERSONAL_STATE'] = "State";
$MESS['REGISTER_FIELD_PERSONAL_STREET'] = "Address";
$MESS['REGISTER_FIELD_PERSONAL_WWW'] = "Web page";
$MESS['REGISTER_FIELD_PERSONAL_ZIP'] = "Zip code";
$MESS['REGISTER_FIELD_PHONE_NUMBER'] = "Phone number";
$MESS['REGISTER_FIELD_SECOND_NAME'] = "Middle Name";
$MESS['REGISTER_FIELD_TITLE'] = "Salutation";
$MESS['REGISTER_FIELD_WORK_CITY'] = "City";
$MESS['REGISTER_FIELD_WORK_COMPANY'] = "Company";
$MESS['REGISTER_FIELD_WORK_COUNTRY'] = "Country";
$MESS['REGISTER_FIELD_WORK_DEPARTMENT'] = "Department";
$MESS['REGISTER_FIELD_WORK_FAX'] = "Fax";
$MESS['REGISTER_FIELD_WORK_LOGO'] = "Company logo";
$MESS['REGISTER_FIELD_WORK_MAILBOX'] = "Mailbox";
$MESS['REGISTER_FIELD_WORK_NOTES'] = "Notes";
$MESS['REGISTER_FIELD_WORK_PAGER'] = "Pager";
$MESS['REGISTER_FIELD_WORK_PHONE'] = "Phone";
$MESS['REGISTER_FIELD_WORK_POSITION'] = "Position";
$MESS['REGISTER_FIELD_WORK_PROFILE'] = "Profile";
$MESS['REGISTER_FIELD_WORK_STATE'] = "State";
$MESS['REGISTER_FIELD_WORK_STREET'] = "Address";
$MESS['REGISTER_FIELD_WORK_WWW'] = "Web page";
$MESS['REGISTER_FIELD_WORK_ZIP'] = "Zip code";
$MESS['USER_DONT_KNOW'] = "(unknown)";
$MESS['USER_FEMALE'] = "Female";
$MESS['USER_MALE'] = "Male";
$MESS['main_profile_time_zones_auto'] = "Auto Time Zone:";
$MESS['main_profile_time_zones_auto_def'] = "(default)";
$MESS['main_profile_time_zones_auto_no'] = "No, select from list";
$MESS['main_profile_time_zones_auto_yes'] = "Yes, use browser settings";
$MESS['main_profile_time_zones_zones'] = "Time Zone:";
$MESS['main_register_sms'] = "SMS confirmation code:";
$MESS['main_register_sms_send'] = "Submit";
?>

View file

@ -64,3 +64,8 @@ $MESS["UF_REG_IN_PL_INTARO"] = "Зарегистрироваться в прог
$MESS["UF_AGREE_PL_INTARO"] = "программы лояльности:";
$MESS["I_AM_AGREE"] = "Я согласен с условиями";
$MESS["UF_PD_PROC_PL_INTARO"] = "обработки персональных данных:";
$MESS["LP_CARD_NUMBER"] = "Номер карты программы лояльности";
$MESS["SEND"] = "Отправить";
$MESS["VERIFICATION_CODE"] = "Код подтверждения";
$MESS["SEND_VERIFICATION_CODE"] = "Отправьте код подтверждения";
$MESS["REG_LP_MESSAGE"] = "Для завершения регистрации в программе лояльности введите номер телефона и номер карты программы лояльности";

View file

@ -1,8 +1,6 @@
function addTelNumber(customerId) {
const phone = $('#loyaltyRegPhone').val();
const card = $('#loyaltyRegCard').val();
console.log(phone);
console.log(card);
BX.ajax.runAction('intaro:retailcrm.api.loyalty.register.accountCreate',
{
@ -16,7 +14,40 @@ console.log(card);
}
}
).then(
function(data) {
function(response) {
if (response.data.status === 'error' && response.data.errorMsg !== undefined) {
const errorMsg = 'Ошибка. ' + response.data.errorMsg;
$('#errorMsg').text(errorMsg);
}
if (response.data.status === 'activate') {
}
if (response.data.status === 'smsVerification') {
$('#verificationCodeBlock').show();
}
});
}
function sendVerificationCode(){
const verificationCode = $('#verificationCode').val();
BX.ajax.runAction('intaro:retailcrm.api.loyalty.register.sendVerificationCode',
{
data: {
sessid: BX.bitrix_sessid(),
loyaltyAccount: {
phone: phone,
card: card,
customerId: customerId
}
}
}
).then(
function(response) {
}
)
}

View file

@ -78,7 +78,6 @@ if($arResult["SHOW_SMS_FIELD"] == true)
});
</script>
<div class="bx-auth-reg">
<?if($USER->IsAuthorized()):?>
@ -97,14 +96,18 @@ if (
&& (int)$arUser['UF_PD_PROC_PL_INTARO'] === 1
) { ?>
<div id="regbody">
<b>Для завершения регистрации в программе лояльности введите номер телефона и номер карты</b><br>
<b><?= GetMessage('REG_LP_MESSAGE')?></b><br>
<input type="tel" id="loyaltyRegPhone" placeholder="+7 (900) 000-00-00">
<br>
<input type="text" id="loyaltyRegCard" placeholder="Номер карты">
<input type="button" onclick="addTelNumber(<?=$USER->GetID()?>)" value="Отправить"/>
<input type="text" id="loyaltyRegCard" placeholder="<?= GetMessage('LP_CARD_NUMBER')?>">
<input type="button" onclick="addTelNumber(<?=$USER->GetID()?>)" value="<?= GetMessage('SEND')?>"/>
<br>
<div id="confirmationCode" style="display: none;">
<div id="verificationCodeBlock" style="display: none;">
<b><?= GetMessage('SEND_VERIFICATION_CODE')?></b><br>
<input type="text" id="verificationCode" placeholder="<?= GetMessage('VERIFICATION_CODE')?>">
<input type="button" onclick="sendVerificationCode()" value="<?= GetMessage('SEND')?>"/>
</div>
<div id="errorMsg" style="color: brown"></div>
</div>
<?php } ?>
<?else:?>

View file

@ -1320,20 +1320,27 @@ class intaro_retailcrm extends CModule
false
);
$lpTemplatePath = $_SERVER['DOCUMENT_ROOT']
. '/local/templates/.default/components/bitrix/sale.order.ajax/intaro.retailcrm';
$lpTemplateNames = [
'sale.order.ajax',
'main.register',
];
if (!file_exists($lpTemplatePath)) {
$pathFrom = $_SERVER['DOCUMENT_ROOT']
. '/bitrix/modules/intaro.retailcrm/install/export/local/components/intaro/sale.order.ajax/templates/.default';
CopyDirFiles(
$pathFrom,
$lpTemplatePath,
true,
true,
false
);
foreach ($lpTemplateNames as $lpTemplateName){
$lpTemplatePath = $_SERVER['DOCUMENT_ROOT']
. '/local/templates/.default/components/bitrix/' . $lpTemplateName . '/intaro.retailcrm';
if (!file_exists($lpTemplatePath)) {
$pathFrom = $_SERVER['DOCUMENT_ROOT']
. '/bitrix/modules/intaro.retailcrm/install/export/local/components/intaro/' . $lpTemplateName . '/templates/.default';
CopyDirFiles(
$pathFrom,
$lpTemplatePath,
true,
true,
false
);
}
}
}
@ -1514,31 +1521,55 @@ class intaro_retailcrm extends CModule
{
$this->addCustomUserFields(
[
"UF_REG_IN_PL_INTARO",
"UF_AGREE_PL_INTARO",
"UF_PD_PROC_PL_INTARO",
"UF_EXT_REG_PL_INTARO",
[
'name' => "UF_CARD_NUM_INTARO",
'title' => GetMessage('UF_CARD_NUMBER_INTARO_TITLE'),
],
],
'string'
);
$this->addCustomUserFields(
[
[
'name' => "UF_REG_IN_PL_INTARO",
'title' => GetMessage('UF_REG_IN_PL_INTARO_TITLE'),
],
[
'name' => "UF_AGREE_PL_INTARO",
'title' => GetMessage('UF_AGREE_PL_INTARO_TITLE'),
],
[
'name' => "UF_PD_PROC_PL_INTARO",
'title' => GetMessage('UF_PD_PROC_PL_INTARO_TITLE'),
],
[
'name' => "UF_EXT_REG_PL_INTARO",
'title' => GetMessage('UF_EXT_REG_PL_INTARO_TITLE'),
],
]
);
}
/**
* @param $fieldNames
* @param $fields
* @param string $filedType
*/
public function addCustomUserFields($fieldNames, $filedType = 'boolean'): void
public function addCustomUserFields($fields, $filedType = 'boolean'): void
{
foreach ($fieldNames as $filedName) {
$arProps = [
"ENTITY_ID" => 'USER',
"FIELD_NAME" => $filedName,
"USER_TYPE_ID" => $filedType,
"MULTIPLE" => "N",
"MANDATORY" => "N"
foreach ($fields as $filed) {
$arProps = [
"ENTITY_ID" => 'USER',
"FIELD_NAME" => $filed['name'],
"USER_TYPE_ID" => $filedType,
"MULTIPLE" => "N",
"MANDATORY" => "N",
"EDIT_FORM_LABEL" => ["ru" => $filed['title']],
];
$obUserField = new CUserTypeEntity;
$dbRes = CUserTypeEntity::GetList([], ["FIELD_NAME" => $filedName])->fetch();
$dbRes = CUserTypeEntity::GetList([], ["FIELD_NAME" => $filed['name']])->fetch();
if (!$dbRes['ID']) {
$obUserField->Add($arProps);
}

View file

@ -19,6 +19,12 @@ $MESS ['AGREEMENT_PERSONAL_DATA_TEXT'] = 'Вставить текст согла
$MESS ['AGREEMENT_LOYALTY_PROGRAM_TITLE'] = 'Условия программы лояльности retailCRM';
$MESS ['AGREEMENT_PERSONAL_DATA_TITLE'] = 'Согласие на обработку персональных данных retailCRM';
$MESS ['UF_REG_IN_PL_INTARO_TITLE'] = 'Зарегистрироваться в программе лояльности';
$MESS ['UF_AGREE_PL_INTARO_TITLE'] = 'Я согласен с условиями программы лояльности';
$MESS ['UF_PD_PROC_PL_INTARO_TITLE'] = 'Согласие на обработку персональных данных';
$MESS ['UF_EXT_REG_PL_INTARO_TITLE'] = 'Поле, с меткой регистрации пользователя в ПЛ';
$MESS ['UF_CARD_NUMBER_INTARO_TITLE'] = 'Номер карты программы лояльности';
/*
$MESS ['ORDER_PROPS'] = 'Настройки соответствия полей заказа retailCRM свойствам заказа 1С-Битрикс';
$MESS ['FIO'] = 'Ф.И.О.';

View file

@ -103,4 +103,16 @@ trait LoyaltyTrait
return Deserializer::deserializeArray($response->getResponseBody(), LoyaltyAccountActivateResponse::class);
}
/**
* @param \Intaro\RetailCrm\Model\Api\Request\SmsVerification\SmsVerificationConfirmRequest $request
* @return \Intaro\RetailCrm\Model\Api\Response\Loyalty\Account\LoyaltyAccountActivateResponse|null
*/
public function sendVerificationCode(SmsVerificationConfirmRequest $request): ?SmsVerificationConfirmResponse
{
$serialized = Serializer::serializeArray($request);
$response = $this->client->sendVerificationCode($serialized);
return Deserializer::deserializeArray($response->getResponseBody(), SmsVerificationConfirmResponse::class);
}
}

View file

@ -9,58 +9,140 @@ use Intaro\RetailCrm\Component\Constants;
use Intaro\RetailCrm\Component\Factory\ClientFactory;
use Intaro\RetailCrm\Model\Api\Request\Loyalty\Account\LoyaltyAccountActivateRequest;
use Intaro\RetailCrm\Model\Api\Request\Loyalty\Account\LoyaltyAccountCreateRequest;
use Intaro\RetailCrm\Model\Api\Request\SmsVerification\SmsVerificationConfirmRequest;
use Intaro\RetailCrm\Model\Api\Response\SmsVerification\SmsVerificationStatusRequest;
use Intaro\RetailCrm\Model\Api\SerializedCreateLoyaltyAccount;
use Intaro\RetailCrm\Model\Api\SmsVerificationConfirm;
use Intaro\RetailCrm\Model\Bitrix\User;
class Register extends Controller
{
public function configureActions(): array
{
return [
'accountCreate' => [
'-prefilters' => [
Authentication::class,
],
],
];
}
public const MIN_CODE_LENGTH = 3;
public const MAX_CODE_LENGTH = 11;
/**
* @return string[]
* @param array $loyaltyAccount
* @return array|string[]
*/
public function accountCreateAction($loyaltyAccount): array
public function accountCreateAction(array $loyaltyAccount): array
{
$phoneNumber = preg_replace('/\s|\+|-|\(|\)/', '', $loyaltyAccount['phone']);
if (!is_numeric($phoneNumber)) {
return [
'status' => 'error',
'errorMsg' => 'Некорректный номер телефона',
];
}
$user = User::getEntityByPrimary($loyaltyAccount['customerId']);
global $USER_FIELD_MANAGER;
$USER_FIELD_MANAGER->Update('USER', $loyaltyAccount['customerId'], [
'UF_CARD_NUM_INTARO' => $loyaltyAccount['card'],
]);
if (empty($user->getPersonalPhone())) {
$user->setPersonalPhone($loyaltyAccount['phone']);
$user->save();
}
//TODO когда станет известен формат карты ПЛ, то добавить валидацию ввода
/** @var \Intaro\RetailCrm\Component\ApiClient\ClientAdapter $client */
$client = ClientFactory::createClientAdapter();
$credentials = $client->getCredentials();
$createRequest = new LoyaltyAccountCreateRequest();
$createRequest->site = $credentials->sitesAvailable[0];
$createRequest->loyaltyAccount = new SerializedCreateLoyaltyAccount();
$createRequest->loyaltyAccount->phoneNumber = $loyaltyAccount->phone;
$createRequest->loyaltyAccount->cardNumber = $loyaltyAccount->card;
$createRequest->loyaltyAccount->customerId = $loyaltyAccount->customerId;
$createRequest->loyaltyAccount->customFields = $loyaltyAccount->customFields;
$createResponse = $client->createLoyaltyAccount($createRequest);
$createRequest->loyaltyAccount->phoneNumber = $loyaltyAccount['phone'] ?? '';
$createRequest->loyaltyAccount->cardNumber = $loyaltyAccount['card'] ?? '';
$createRequest->loyaltyAccount->customerId = $loyaltyAccount['customerId'];
$createRequest->loyaltyAccount->customFields = $loyaltyAccount['customFields'] ?? [];
$createResponse = $client->createLoyaltyAccount($createRequest);
//TODO добавить провеку на кастомные поля, когда будет готов метод запроса
if ($createResponse !== null) {
if ($createResponse->success === false) {
return [
'status' => 'error',
'errorMsg' => $createResponse->errorMsg,
];
}
//если участник ПЛ создан и активирован
if ($createResponse->loyaltyAccount->active) {
return ['status' => 'activate'];
}
$activateRequest = new LoyaltyAccountActivateRequest();
$activateRequest = new LoyaltyAccountActivateRequest();
$activateRequest->loyaltyId = $createResponse->loyaltyAccount->id;
$activateResponse = $client->activateLoyaltyAccount($activateRequest);
$activateResponse = $client->activateLoyaltyAccount($activateRequest);
if (isset($activateResponse->verification)) {
return ['status' => 'smsVerification'];
}
}
return [
'status' => 'error',
'errorMsg' => 'Ошибка запроса',
];
}
/**
* @param string $code
* @return array
*/
public function sendVerificationCodeAction(string $code): array
{
$code = trim($code);
$lengthCode = strlen($code);
return ['newStatus' => $newStatus];
if (empty($code) && $lengthCode > self::MIN_CODE_LENGTH && $lengthCode < self::MAX_CODE_LENGTH) {
return [
'status' => 'error',
'errorMsg' => 'Код не введен',
];
}
$smsVerification = new SmsVerificationConfirmRequest();
$smsVerification->verification = new SmsVerificationConfirm();
$smsVerification->verification->code = $code;
/** @var \Intaro\RetailCrm\Component\ApiClient\ClientAdapter $client */
$client = ClientFactory::createClientAdapter();
$verificationResult = $client->sendVerificationCode($smsVerification);
if ($verificationResult === null) {
return [
'status' => 'error',
'errorMsg' => 'ОШибка запроса на подтверждение',
];
}
if ($verificationResult->success === false) {
$errMsg = $verificationResult->errorMsg ?? '';
return [
'status' => 'error',
'errorMsg' => 'Ошибка. ' . $errMsg,
];
}
if ($verificationResult->success === true
&& isset($verificationResult->verification->verifiedAt)
&& !empty($verificationResult->verification->verifiedAt)) {
return [ 'status' => 'complete'];
}
return [
'status' => 'error',
'errorMsg' => 'Ошибка.',
];
}
}

View file

@ -40,16 +40,6 @@ class SerializedCreateLoyaltyAccount
*/
public $cardNumber;
/**
* ID участия
*
* @var integer $loyaltyId
*
* @Mapping\Type("integer")
* @Mapping\SerializedName("loyaltyId")
*/
public $loyaltyId;
/**
* ID клиента
*

View file

@ -27,7 +27,7 @@ class SmsVerificationConfirm extends AbstractApiModel
* @Mapping\Type("string")
* @Mapping\SerializedName("code")
*/
protected $code;
public $code;
/**
* Идентификатор проверки кода
@ -37,21 +37,7 @@ class SmsVerificationConfirm extends AbstractApiModel
* @Mapping\Type("string")
* @Mapping\SerializedName("checkId")
*/
protected $checkId;
public $checkId;
/**
* @param string $code
*/
public function setCode(string $code): void
{
$this->code = $code;
}
/**
* @param string $checkId
*/
public function setCheckId(string $checkId): void
{
$this->checkId = $checkId;
}
}