|
Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.
|
Изменения (35)
просмотр истории страницы... |
еще пример создания ХП для работы из PHP для связи с платежными системами. *Code:* |
{code} |
Create PROCEDURE PAY_USR_ACT ( |
ACT VARCHAR(32) CHARACTER SET WIN1251, PAY_ID INTEGER, USER_ID_IN INTEGER, CONTRACT_NUMBER VARCHAR(32) CHARACTER SET WIN1251, SUMMA NUMERIC(15,2), MD5SUM VARCHAR(32) CHARACTER SET WIN1251, PAY_OPERATOR VARCHAR(32) CHARACTER SET WIN1251, COMMENT_IN VARCHAR(64) CHARACTER SET WIN1251) |
ACT VARCHAR(32) CHARACTER SET WIN1251, PAY_ID INTEGER, USER_ID_IN INTEGER, CONTRACT_NUMBER VARCHAR(32) CHARACTER SET WIN1251, SUMMA NUMERIC(15,2), MD5SUM VARCHAR(32) CHARACTER SET WIN1251, PAY_OPERATOR VARCHAR(32) CHARACTER SET WIN1251, COMMENT_IN VARCHAR(64) CHARACTER SET WIN1251) |
RETURNS ( |
RES INTEGER, MSG VARCHAR(256) CHARACTER SET WIN1251, COMMENT VARCHAR(1024) CHARACTER SET WIN1251, USER_NAME VARCHAR(128) CHARACTER SET WIN1251, USER_LOGIN VARCHAR(32) CHARACTER SET WIN1251) |
RES INTEGER, MSG VARCHAR(256) CHARACTER SET WIN1251, COMMENT VARCHAR(1024) CHARACTER SET WIN1251, USER_NAME VARCHAR(128) CHARACTER SET WIN1251, USER_LOGIN VARCHAR(32) CHARACTER SET WIN1251) |
AS DECLARE VARIABLE USER_ID INTEGER; |
... |
COMMENT=''; select vpn_const.const_value |
from vpn_const |
from vpn_const |
where vpn_const.const_id = 1 |
into :money; |
into :money; |
if (USER_ID_IN=0) then USER_ID_IN=NULL; if (CONTRACT_NUMBER='') then CONTRACT_NUMBER=null; if (CONTRACT_NUMBER is null and USER_ID is null) then |
begin RES=251; MSG='Error: key field is null'; end |
begin RES=251; MSG='Error: key field is null'; end |
if (PAY_OPERATOR is null or PAY_OPERATOR='') then |
begin RES=251; MSG='Error: pay_operator is null'; end |
begin RES=251; MSG='Error: pay_operator is null'; end |
if (PAY_ID is null or PAY_ID=0 and upper(act)='PAY') then |
begin RES=251; MSG='Error: pay_ID is null'; end |
begin RES=251; MSG='Error: pay_ID is null'; end |
|
|
if ((upper(act)='PAY' or upper(act)='CHECK') and RES=-1) then begin |
user_login=null; USER_NAME=null; user_id=null; nuser=0; |
user_login=null; USER_NAME=null; user_id=null; nuser=0; |
for select id, login, identify from users |
where (:user_id_IN is null or id=:user_id_IN) and (CONTRACT_NUMBER=:CONTRACT_NUMBER or :CONTRACT_NUMBER is null) into user_id, user_login, user_name do begin nuser=nuser+1; end while(1=1) do begin if (nuser=0) then begin RES=1; MSG='Error: User not found'; COMMENT=''; break; end if (nuser>1) then begin RES=2; MSG='Error: Double user found'; COMMENT=''; break; end |
where (:user_id_IN is null or id=:user_id_IN) and (CONTRACT_NUMBER=:CONTRACT_NUMBER or :CONTRACT_NUMBER is null) into user_id, user_login, user_name do begin nuser=nuser+1; end while(1=1) do begin if (nuser=0) then begin RES=1; MSG='Error: User not found'; COMMENT=''; break; end if (nuser>1) then begin RES=2; MSG='Error: Double user found'; COMMENT=''; break; end |
\--Îñíîâíîé àëãîðèòì îïëàòû |
if (exists(select * from finance_operations where operator_name=:PAY_OPERATOR and operator_pay_id=:pay_id )) then begin RES=3; MSG='Error: PAY ID already exists'; COMMENT=''; break; end if (upper(act)='CHECK') then begin RES=0; MSG='Allow'; break; end SUM_VALUE=summa*money; |
if (exists(select * from finance_operations where operator_name=:PAY_OPERATOR and operator_pay_id=:pay_id )) then begin RES=3; MSG='Error: PAY ID already exists'; COMMENT=''; break; end if (upper(act)='CHECK') then begin RES=0; MSG='Allow'; break; end SUM_VALUE=summa*money; |
select NUMBER from CLN_FIN_OPER_PREPARE(2,:USER_ID) into :number; |
msg1=comment_in; |
msg1=comment_in; |
if (msg1 is null or msg1='') then |
begin msg1=PAY_OPERATOR; end new_id=null; execute procedure gln_fin_add_debet(:user_id,'now',:SUM_VALUE,:msg1,:user_id,:number) returning_values :new_id; if (new_id is null) then begin RES=4; MSG='Error: cant create operation debet'; break; end update FINANCE_OPERATIONS set operator_name=:PAY_OPERATOR, operator_pay_id=:pay_id where FINANCE_OPERATIONS.op_id=:new_id; RES=0; MSG='ACCEPTED'; break; end |
begin msg1=PAY_OPERATOR; end new_id=null; execute procedure gln_fin_add_debet(:user_id,'now',:SUM_VALUE,:msg1,:user_id,:number) returning_values :new_id; if (new_id is null) then begin RES=4; MSG='Error: cant create operation debet'; break; end update FINANCE_OPERATIONS set operator_name=:PAY_OPERATOR, operator_pay_id=:pay_id where FINANCE_OPERATIONS.op_id=:new_id; RES=0; MSG='ACCEPTED'; break; end |
end |
INSERT INTO PAY_LOG ( |
ID, PAY_ID_IN, USER_ID_IN, CONTRACT_NUMBER_IN, SUMMA_IN, MD5SUM_IN, RES_OUT, MSG_OUT, COMMENT_OUT, USER_ID_OUT, USER_NAME_OUT, USER_LOGIN_OUT, ACT_IN, DATE_CREATE, PAY_OPERATOR) VALUES ( null, :PAY_ID, :USER_ID_IN, :CONTRACT_NUMBER, :SUMMA, :MD5SUM, :RES, :MSG, :COMMENT, :USER_ID, :USER_NAME, :USER_LOGIN, :ACT, 'now', :PAY_OPERATOR); |
ID, PAY_ID_IN, USER_ID_IN, CONTRACT_NUMBER_IN, SUMMA_IN, MD5SUM_IN, RES_OUT, MSG_OUT, COMMENT_OUT, USER_ID_OUT, USER_NAME_OUT, USER_LOGIN_OUT, ACT_IN, DATE_CREATE, PAY_OPERATOR) VALUES ( null, :PAY_ID, :USER_ID_IN, :CONTRACT_NUMBER, :SUMMA, :MD5SUM, :RES, :MSG, :COMMENT, :USER_ID, :USER_NAME, :USER_LOGIN, :ACT, 'now', :PAY_OPERATOR); |
suspend; exit; end |
---- {code} |
Уточнения по работе процедур и применимости спрашивать по ICQ 164592853 или по телефону или по почте [sergey@ideco-software.ru|mailto:sergey@ideco-software.ru] |