Обновление PayControl с версии 3 на версию 5
Содержание
Введение
Резервное копирование
Перед обновлением необходимо выполнить резервное копирование БД PCS и PCIS Internal.
Java
Для работы обновленных модулей PC требуется JDK 11.
Изменение названий серверов
В версии 5 изменены названия серверов:
- PC Server (PCS) — без изменений;
- PC Interaction Internal — PC Pusher (PCP);
- PC Interaction External — PC External (PCE).
Обновление
Для PCIS версии ниже 3.7
Если версия PCS имеет версию 3.6, а серверы PCIS имеют версию ниже 3.7, то необходимо сначала произвести обновление до 3.7. Инструкция по обновлению доступна по ссылке.
Обновление компонентов серверов
Для обновления нужно остановить сервис Wildfly и заменить файл приложения сервера <WF_PATH>\standalone\deployments\ на новый:
- на PCS - файл PayControl-services-module-<VERSION>.ear заменить на файл pc-server-<VERSION>.ear
- на PCIS Internal(PC Pusher после обновления) - файл PayControl-interaction-module-<VERSION>.ear заменить на файл pc-pusher-<VERSION>.war
- на PCIS External(PC External после обновления) - файл PayControl-interaction-rest-<VERSION>.war заменить на файл pc-external-<VERSION>.war
Настройка подключения к БД
В файле <WF_HOME>/standalone/configuration/standalone.xml нужно найти и заменить:
- PayControlDS на PCServerDS
- PayControlISDS на PCPusherDS
Корректировка (смена) адресов компонентов серверов PC
Изменение адреса PCS для подключения с PCE
На сервере PCE необходимо заменить часть строки с адресом сервера PCS (host и port заменить на реальные значения). Для этого:
- на Linux в файле <WF_PATH>/bin/standalone.conf нужно заменить на строку
JAVA_OPTS="$JAVA_OPTS -Dpcservice.endpoint=http://<host>:<port>/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru"
JAVA_OPTS="$JAVA_OPTS -Dpc_url=http://<host>:<port>/pc-api/ -Dpc_locale=ru"
- на Windows в файле <WF_PATH>/bin/standalone.conf.bat нужно заменить выше метки :JAVA_OPTS_SET на строку
set "JAVA_OPTS=%JAVA_OPTS% -Dpcservice.endpoint=http://<host>:<port>/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru"
set "JAVA_OPTS=%JAVA_OPTS% -Dpc_url=http://<host>:<port>/pc-api/ -Dpc_locale=ru"
Изменение адреса PCP для подключения с PCS
Для изменения адреса сервера PCP, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS:
update pc_system set pc_is_internal_url = 'http[s]://<IP или DNS-имя>[:PORT]/pc-pusher-api/' where systemid='<SYSTEMID>';
Изменение адреса для внешних подключений (PCE) с мобильных устройств
Для изменения внешнего адреса сервера PC, по которому связываются мобильное приложение с сервером PC, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PCS:
update pc_system set pc_is_external_url = 'http[s]://<IP или DNS-имя>[:PORT]/pc-client-api/' where systemid='<SYSTEMID>';
Для работы старых ключей, обращающихся по эндпоинту /PayControl-interaction-rest/
нужно установить проксирование на эндпоинт /pc-client-api/
, любым удобным способом.
Пример для nginx:
location /PayControl-interaction-rest/ {
proxy_pass http://o-example.loc:8080/pc-client-api/;
}
Изменения в БД
Для обеспечения должного функционирования системы PC, в некоторые таблицы необходимо внести изменения, выполнив запросы:
Postgres
Правки структуры таблиц БД PCS
alter table pc_delayedkeyinfo alter column is_deleted set not null;
alter table pc_delayedkeyinfo alter column is_deleted set default 0;
alter table pc_delayedkeyinfo drop column type;
alter table pc_delayedkeyinfo add column renew_challenge varchar(255);
alter table pc_device alter column is_deleted set not null;
alter table pc_device alter column is_deleted set default 0;
alter table pc_device add column app_id varchar(255);
alter table pc_event alter column is_deleted set not null;
alter table pc_event alter column is_deleted set default 0;
alter table pc_event alter column requester_ip type varchar(64);
alter table pc_event add column event_data text;
alter table pc_event drop column eventposturl;
alter table pc_keyinfo alter column is_deleted set not null;
alter table pc_keyinfo alter column is_deleted set default 0;
alter table pc_keyinfo drop column type;
alter table pc_keyinfo drop column key_container_id;
alter table pc_keyinfo add column external_approve_data_id varchar(255);
alter table pc_publickey alter column is_deleted set not null;
alter table pc_publickey alter column is_deleted set default 0;
alter table pc_publickey add column autosign_public_key bytea;
alter table pc_system alter column is_deleted set not null;
alter table pc_system alter column is_deleted set default 0;
alter table pc_system add column callback_url varchar(255);
alter table pc_system_params alter column is_deleted set not null;
alter table pc_system_params alter column is_deleted set default 0;
alter table pc_system_params alter column license type varchar(4096);
alter table pc_system_params add column qr_url_scheme varchar(24);
alter table pc_transaction alter column is_deleted set not null;
alter table pc_transaction alter column is_deleted set default 0;
alter table pc_transaction add column autosign_enabled int2;
alter table pc_transaction add column ext_pulp bytea;
alter table pc_transaction add column extended_check int2;
alter table pc_transaction add column render_type int4;
alter table pc_transaction add column scoring_settings varchar(1023);
alter table pc_transaction add column transaction_type int4;
alter table pc_user alter column is_deleted set not null;
alter table pc_user alter column is_deleted set default 0;
alter table pc_user add column blocked int2;
alter table pc_confirm_attempt add column scoring_results varchar(512);
alter table pc_confirm_attempt add column scoring_settings varchar(512);
Oracle
Перед выполнением правок в БД PCS перезапустите Wildfly минимум два раза.
Должны создаться таблицы PC_CERTIFICATE, PC_CMS_SIGNATURE и PC_ONLINE_CREDENTIALS.
Когда эти таблицы появятся в БД, можно выполнять правки.
Правки структуры таблиц БД PCS
alter table pc_delayedkeyinfo modify (is_deleted NOT NULL);
alter table pc_delayedkeyinfo modify (is_deleted default 0);
alter table pc_delayedkeyinfo drop column type;
alter table pc_device modify (is_deleted not NULL);
alter table pc_device modify (is_deleted default 0);
alter table pc_event modify (is_deleted not NULL);
alter table pc_event modify (is_deleted default 0);
alter table pc_event modify (requester_ip varchar(64));
alter table pc_event drop column eventposturl;
alter table pc_event add (event_data clob);
alter table pc_keyinfo modify (is_deleted not NULL);
alter table pc_keyinfo modify (is_deleted default 0);
alter table pc_keyinfo drop column type;
alter table pc_keyinfo drop column key_container_id;
alter table pc_publickey modify (is_deleted not NULL);
alter table pc_publickey modify (is_deleted default 0);
alter table pc_system modify (is_deleted not NULL);
alter table pc_system modify (is_deleted default 0);
alter table pc_system add (callback_url varchar(255));
alter table pc_system_params modify (is_deleted not NULL);
alter table pc_system_params modify (is_deleted default 0);
alter table pc_system_params add (qr_url_scheme varchar(24));
alter table pc_user add (user_name varchar(255));
alter table pc_user add (blocked NUMBER(5,0));
alter table pc_system_params add (license_1 clob);
update pc_system_params set license_1 = license;
alter table pc_system_params drop column license;
alter table pc_system_params rename column license_1 to license;
alter table pc_transaction modify (is_deleted not NULL);
alter table pc_transaction modify (is_deleted default 0);
alter table pc_transaction add (operationid varchar(36));
alter table pc_user modify (is_deleted not NULL);
alter table pc_user modify (is_deleted default 0);
alter table pc_keyinfo add (external_approve_data_id varchar(255));
alter table pc_confirm_attempt add (data_hash_1 blob);
update pc_confirm_attempt set data_hash_1 = data_hash;
alter table pc_confirm_attempt drop column data_hash;
alter table pc_confirm_attempt rename column data_hash_1 to data_hash;
alter table pc_delayedkeyinfo add (key_content_1 blob);
update pc_delayedkeyinfo set key_content_1 = key_content;
alter table pc_delayedkeyinfo drop column key_content;
alter table pc_delayedkeyinfo rename column key_content_1 to key_content;
alter table pc_keyinfo add (key_content_1 blob);
update pc_keyinfo set key_content_1 = key_content;
alter table pc_keyinfo drop column key_content;
alter table pc_keyinfo rename column key_content_1 to key_content;
alter table pc_publickey add (public_key_1 blob);
update pc_publickey set public_key_1 = public_key;
alter table pc_publickey drop column public_key;
alter table pc_publickey rename column public_key_1 to public_key;
alter table pc_transaction add (data_hash_1 blob);
update pc_transaction set data_hash_1 = data_hash;
alter table pc_transaction drop column data_hash;
alter table pc_transaction rename column data_hash_1 to data_hash;
ALTER TABLE PC_TRANSACTION ADD (DATA_TR_TEXT clob);
ALTER TABLE PC_CONFIRM_ATTEMPT ADD (SCORING_RESULTS varchar(512));
ALTER TABLE PC_CONFIRM_ATTEMPT ADD (SCORING_SETTINGS varchar(512));
alter table PC_SYS_PROPERTY modify (SETTING_VALUE varchar(1023));
alter table PC_DELAYEDKEYINFO add (RENEW_CHALLENGE varchar(255));
ALTER TABLE PC_TRANSACTION ADD (EXT_PULP blob);
ALTER TABLE PC_TRANSACTION ADD (EXTENDED_CHECK NUMBER(5,0));
ALTER TABLE PC_TRANSACTION ADD (RENDER_TYPE NUMBER(10,0));
ALTER TABLE PC_TRANSACTION ADD (SCORING_SETTINGS varchar(1023));
ALTER TABLE PC_TRANSACTION ADD (SNIPPED_TEXT varchar(1023));
ALTER TABLE PC_TRANSACTION ADD (TRANSACTION_TYPE NUMBER(10,0));
ALTER TABLE PC_TRANSACTION ADD (SNIPPET_HASH blob);
ALTER TABLE PC_TRANSACTION ADD (AUTOSIGN_ENABLED NUMBER(5,0));
ALTER TABLE PC_DEVICE ADD (APP_ID varchar(255));
ALTER TABLE PC_PUBLICKEY ADD (AUTOSIGN_PUBLIC_KEY blob);
alter table PC_KEYINFO drop column GOST_IMIT_KEY;
alter table PC_KEYINFO add (GOST_IMIT_KEY blob);
## PCSB в запросах нужно заменить на имя вашего TABLESPACE
CREATE SEQUENCE PCSB.PC_EXTAUTH_SEQ INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999999999999999999999999999 NOCYCLE CACHE 20 NOORDER;
CREATE SEQUENCE PCSB.PC_USERS_LICENSE_SEQ INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999999999999999999999999999 NOCYCLE CACHE 20 NOORDER;
CREATE TABLE "PCSB"."PC_EXTAUTH"
( "EXTAUTHID" NUMBER(19,0) NOT NULL ENABLE,
"CREATED_AT" TIMESTAMP (6),
"IS_DELETED" NUMBER(5,0) DEFAULT 0 NOT NULL ENABLE,
"UPDATED_AT" TIMESTAMP (6),
"AUTH_TEMPLATE" VARCHAR2(2048 CHAR),
"EVENTID" NUMBER(19,0),
"USERID" VARCHAR2(64 CHAR),
"AUTH_FAIL_COUNT" NUMBER(*,0),
PRIMARY KEY ("EXTAUTHID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
TABLESPACE "PCSB" ENABLE,
CONSTRAINT "PC_EXTAUTH_EVENTID_FK" FOREIGN KEY ("EVENTID")
REFERENCES "PCSB"."PC_EVENT" ("EVENTID") ENABLE,
CONSTRAINT "PC_EXTAUTH_USERID_FK" FOREIGN KEY ("USERID")
REFERENCES "PCSB"."PC_USER" ("USERID") ENABLE
) SEGMENT CREATION DEFERRED
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
TABLESPACE "PCSB" ;
CREATE TABLE "PCSB"."PC_USERS_LICENSING"
( "USERS_LICENSE_ID" NUMBER(19,0) NOT NULL ENABLE,
"CREATED_AT" TIMESTAMP (6),
"IS_DELETED" NUMBER(5,0) DEFAULT 0 NOT NULL ENABLE,
"UPDATED_AT" TIMESTAMP (6),
"LICENSED_AT" TIMESTAMP (6),
"LICENSED_TILL" TIMESTAMP (6),
"LICENSED_UID" VARCHAR2(255 CHAR),
"PC_SIGNATURE" VARCHAR2(255 CHAR),
"USERID" VARCHAR2(64 CHAR),
PRIMARY KEY ("USERS_LICENSE_ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
TABLESPACE "PCSB" ENABLE,
CONSTRAINT "PC_USER_LICENSING_USERID_FK" FOREIGN KEY ("USERID")
REFERENCES "PCSB"."PC_USER" ("USERID") ENABLE
) SEGMENT CREATION DEFERRED
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
TABLESPACE "PCSB" ;
Правки для корректной отправки пушей
update pc_device set app_id ='org.example.app' where device_push_id not like '%####%' and app_id is null and type=1;
!!!Запрос выше для Android при обновлении с 3.6-3.7. Вместо org.example.app нужно вписать app_id вашего приложения из БД PCIS Internal:
select appid from pc_split_pusher_credentials where os='Android';
update pc_device set app_id ='org.example.app' where device_push_id not like '%####%' and app_id is null and type=2;
!!!Запрос выше для iOS при обновлении с 3.6-3.7. Вместо org.example.app нужно вписать app_id вашего приложения из БД PCIS Internal:
select appid from pc_split_pusher_credentials where os='iOS';
update pc_device set app_id = split_part(device_push_id,'####',2) where app_id is NULL;
update pc_device set device_push_id = split_part(device_push_id,'####',1) where app_id is not NULL;
!!!Для выполнения запросов со split_part на Oracle нужно сначала выполнить запрос ниже:
create or replace function split_part(pString varchar2, pDelimiter varchar2, pPartNumber integer) return varchar2 deterministic is
vStart number;
vEnd number;
begin
if pPartNumber <> 0 and pDelimiter is not null then
vStart := instr(pDelimiter||pString||pDelimiter, pDelimiter, sign(pPartNumber), abs(pPartNumber));
vEnd := instr(pDelimiter||pString||pDelimiter, pDelimiter, sign(pPartNumber), abs(pPartNumber) + 1);
end if;
return case
when pDelimiter is null and abs(pPartNumber) = 1 then pString
when pPartNumber > 0 then substr(pString, vStart, vEnd - vStart - length(pDelimiter))
when pPartNumber < 0 then substr(pString, vEnd, vStart - vEnd - length(pDelimiter))
else null
end;
end;
/
Запрос на регистрацию и лицензия
Получение нового запроса и лицензии
Для получения нового запроса на регистрацию и лицензии обратитесь в компанию Сэйфтек.
Замена запроса в БД
В приведённых ниже запросах необходимо:
- заменить
%SYSTEMID%
на реальное значение systemid зарегистрированное для Вашей прикладной системы. Обратите внимание, что знаки процента нужно удалить; - заменить
%REGISTERREQUEST%
на реальные данные запроса, созданного для Вашей прикладной системы. Обратите внимание, что знаки процента нужно удалить;- пример нужных данных запроса
eyJyZXF1ZXN0Ijp7InFyVVJMU2NoZW1lIjoiIiwiYmlsbGluZ1R5cGUiOjIsImludGVyYWN0aW9uRXh0ZXJuYWxVUkwiOiJodHRwczovL3BheWNvbnRyb2wuZXhhbXBsZS5jb20vcGMtY2xpZW50LWFwaS8iLCJpbnRlcmFjd----m1VRERpZndVU3VOS3BoYmV4emsifQ==
- пример нужных данных запроса
update pc_system_params set register_request='%REGISTERREQUEST%' where systemid='%SYSTEMID%';
Лицензия
Установите лицензию одним из приведённых в руководстве администратора PC способов.
Завершение обновления
После выполнения вышеизложенных пунктов нужно запустить wildfly.
Доступ к сервисам
Адреса конечных точек по умолчанию:
- PC Server - http://<host>:8080/pc-api/
- PC Pusher - http://<host>:8080/pc-pusher-api/
- PC External - http://<host>:8080/pc-client-api/
Health Check
Адреса конечных точек health check:
- PC Server - http://<host>:8080/pc-api/health_check
- PC Pusher - http://<host>:8080/pc-pusher-api/health_check
- PC External - http://<host>:8080/pc-client-api/health_check
Откат обновления в случае сбоя
Остановите Wildfly.
Восстановите БД PCS и PCIS Internal из бэкапа.
При возникновении проблем при обновлении необходимо удалить новый файл модуля сервера и заменить его старым файлом.
При замене файлов необходимо проверить, что в директории deployments отсутствуют файлы с расширением undeployed.
PCS. Настройка подключения с PC External
На сервере PCIS\PC External необходимо заменить часть строки с адресом сервера PCS (host и port заменить на реальные значения). Для этого:
- на Linux в файле <WF_PATH>/bin/standalone.conf нужно заменить на строку
JAVA_OPTS="$JAVA_OPTS -Dpc_url=http://<host>:<port>/pc-api/ -Dpc_locale=ru"
JAVA_OPTS="$JAVA_OPTS -Dpcservice.endpoint=http://<host>:<port>/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru"
- на Windows в файле <WF_PATH>/bin/standalone.conf.bat нужно заменить выше метки :JAVA_OPTS_SET на строку
set "JAVA_OPTS=%JAVA_OPTS% -Dpc_url=http://<host>:<port>/pc-api/ -Dpc_locale=ru"
set "JAVA_OPTS=%JAVA_OPTS% -Dpcservice.endpoint=http://<host>:<port>/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru"