Пример подписания ЭЦП SmartBridge¶
в env прописать
LD_LIBRARY_PATH=:/opt/kalkancrypt/:/opt/kalkancrypt/lib/engines
local http=require("pkg/http")
function setBody(id,s)
local a,ers,ern= SqlCall([[update k2_mj_xml_log set body=:s where id=:id]],
{
s = { input=true, output=false,value=s,clob = true },
id = { input=true, output=false,value=tostring(id)}
}
)
if ern ~=0 then error(ern) end
end
function makeRequest(serviceId,requestData,instance_id)
local crypto=require('pkg/crypto')
local ers,ern=crypto.LoadKey("/opt/k2/bank.pfx","12345678") --todo: to params
if ern ~=0 then
print(ers)
end
local session_id=UUID()
local requestMessageId,errText,errNum=DML("insert","k2_mj_xml_log",1,{instance_id = instance_id, session_id=session_id , io='O' })
local messageDate=EntityValueById("k2_mj_xml_log","created_at",requestMessageId)
messageDate= TimeParseFormat(messageDate,"2006-01-02 15:04:05 -0700 -07","2006-01-02T15:04:05")
local senderId='bank'
local password='*********'
local xmlReqIn=[[<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Header xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"/>
<soap:Body>
<io:SendMessage xmlns:io="http://bip.bee.kz/SyncChannel/v10/Types">
<request>
<requestInfo>
<messageId>]] .. HTMLEscapeString(requestMessageId) .. [[</messageId>
<serviceId>]] .. HTMLEscapeString(serviceId) .. [[</serviceId>
<messageDate>]] .. HTMLEscapeString(messageDate) .. [[</messageDate>
<sender>
<senderId>]] .. HTMLEscapeString(senderId) .. [[</senderId>
<password>]] .. HTMLEscapeString(password) .. [[</password>
</sender>
<sessionId>]] .. HTMLEscapeString(session_id) .. [[</sessionId>
</requestInfo>
<requestData> ]] .. requestData .. [[</requestData>
</request>
</io:SendMessage>
</soap:Body>
</soap:Envelope>]]
local xmlReq,ers,ern=crypto.SignXml( xmlReqIn ,"//request/requestData/data/*")
if ern ~=0 then return '',0,0,ers,ern end
setBody(requestMessageId,xmlReq)
local headers = array( { ["Content-type"] = " text/xml;charset=\"utf-8\"" } )
local mjUrl=GetParamValue("k2mj_url")
local row1=nil
local res=nil
row1,ers,ern=SqlQueryRow2('select * from(select id,body,nord from k2_mj_xml_log_mockup t where t.sta=1 order by nord) t where rownum=1')
if ern==0 then
res=row1.body
local xx,ers,ern= SqlCall([[update k2_mj_xml_log_mockup set sta=2 where id=:id ]],
{
id = { input=true, output=false,value=tostring(row1.id)}
}
)
else
res,ers,ern=http.post(mjUrl,xmlReq,headers)
if ern ~=0 then return '',0,0,ers,ern end
end
-- print("end k2_mj_xml_log_mockup")
local responseMessageId,errText,errNum=DML("insert","k2_mj_xml_log",1,{ instance_id = instance_id, session_id=session_id , io='I'})
--print("end k2_mj_xml_log_mockup777",responseMessageId)
setBody(responseMessageId,res)
--print("end k2_mj_xml_log_mockup888")
return res,requestMessageId,responseMessageId,'',0
end
return makeRequest