Commit 4dbb7a1285835ef2a455d6308fcd1bb86c9f08ef
1 parent
06b8be0176
Exists in
master
Add custom config.partner.price_rules and balance_rules
Showing 1 changed file with 13 additions and 2 deletions Inline Diff
lib/parse-result.js
1 | const MODULE_NAME = 'PARSE-RESULT'; | 1 | const MODULE_NAME = 'PARSE-RESULT'; |
2 | 2 | ||
3 | const config = require('komodo-sdk/config'); | 3 | const config = require('komodo-sdk/config'); |
4 | const logger = require('tektrans-logger'); | 4 | const logger = require('tektrans-logger'); |
5 | 5 | ||
6 | const getParamsMemberObj = require('./generic-xmlrpc/get-params-members-obj'); | 6 | const getParamsMemberObj = require('./generic-xmlrpc/get-params-members-obj'); |
7 | const parseXml = require('./parse-xml'); | 7 | const parseXml = require('./parse-xml'); |
8 | 8 | ||
9 | const report = require('./report'); | 9 | const report = require('./report'); |
10 | const translateRc = require('./translate-rc'); | 10 | const translateRc = require('./translate-rc'); |
11 | const messageExtractor = require('./message-extractor'); | 11 | const messageExtractor = require('./message-extractor'); |
12 | const patternRules = require('./pattern-rules'); | 12 | const patternRules = require('./pattern-rules'); |
13 | 13 | ||
14 | module.exports = (xid, trxIdFromCaller, xml, isCallback, remoteIp) => { | 14 | module.exports = (xid, trxIdFromCaller, xml, isCallback, remoteIp) => { |
15 | logger.verbose(`${MODULE_NAME} 58547863: Processing XML message`, { xid, isCallback }); | 15 | logger.verbose(`${MODULE_NAME} 58547863: Processing XML message`, { xid, isCallback }); |
16 | 16 | ||
17 | const responseType = isCallback ? 'CALLBACK' : 'DIRECT-RESPONSE'; | 17 | const responseType = isCallback ? 'CALLBACK' : 'DIRECT-RESPONSE'; |
18 | 18 | ||
19 | if (!trxIdFromCaller && !isCallback) { | 19 | if (!trxIdFromCaller && !isCallback) { |
20 | if (logger) logger.warn(`${MODULE_NAME} 8CAAD7C9: No trx id on non callback`, { xid }); | 20 | if (logger) logger.warn(`${MODULE_NAME} 8CAAD7C9: No trx id on non callback`, { xid }); |
21 | return; | 21 | return; |
22 | } | 22 | } |
23 | 23 | ||
24 | const obj = parseXml(xid, xml); | 24 | const obj = parseXml(xid, xml); |
25 | if (!obj) { | 25 | if (!obj) { |
26 | const e = new Error(`${MODULE_NAME} B46CAAD1: Invalid XML`); | 26 | const e = new Error(`${MODULE_NAME} B46CAAD1: Invalid XML`); |
27 | logger.warn(e.message, { xid }); | 27 | logger.warn(e.message, { xid }); |
28 | 28 | ||
29 | if (trxIdFromCaller) { | 29 | if (trxIdFromCaller) { |
30 | report(xid, { | 30 | report(xid, { |
31 | trx_id: trxIdFromCaller.toString(), | 31 | trx_id: trxIdFromCaller.toString(), |
32 | rc: '68', | 32 | rc: '68', |
33 | message: { | 33 | message: { |
34 | xid, | 34 | xid, |
35 | responseType, | 35 | responseType, |
36 | 'GW-ERROR': { | 36 | 'GW-ERROR': { |
37 | message: e.message, | 37 | message: e.message, |
38 | responseFromPartner: xml, | 38 | responseFromPartner: xml, |
39 | }, | 39 | }, |
40 | }, | 40 | }, |
41 | }); | 41 | }); |
42 | } | 42 | } |
43 | 43 | ||
44 | return; | 44 | return; |
45 | } | 45 | } |
46 | 46 | ||
47 | const params = getParamsMemberObj(obj, false); | 47 | const params = getParamsMemberObj(obj, false); |
48 | 48 | ||
49 | if (!params) { | 49 | if (!params) { |
50 | const e = new Error(`${MODULE_NAME} A7B7EB30: Can not get params from message`); | 50 | const e = new Error(`${MODULE_NAME} A7B7EB30: Can not get params from message`); |
51 | logger.warn(e.message, { xid }); | 51 | logger.warn(e.message, { xid }); |
52 | 52 | ||
53 | if (trxIdFromCaller) { | 53 | if (trxIdFromCaller) { |
54 | report(xid, { | 54 | report(xid, { |
55 | trx_id: trxIdFromCaller.toString(), | 55 | trx_id: trxIdFromCaller.toString(), |
56 | rc: '68', | 56 | rc: '68', |
57 | message: { | 57 | message: { |
58 | xid, | 58 | xid, |
59 | responseType, | 59 | responseType, |
60 | 'GW-ERROR': { | 60 | 'GW-ERROR': { |
61 | message: e.message, | 61 | message: e.message, |
62 | responseFromPartner: obj, | 62 | responseFromPartner: obj, |
63 | }, | 63 | }, |
64 | }, | 64 | }, |
65 | }); | 65 | }); |
66 | } | 66 | } |
67 | } | 67 | } |
68 | 68 | ||
69 | logger.verbose(`${MODULE_NAME} 3D5400C1: Params extracted from response`, { xid, params }); | 69 | logger.verbose(`${MODULE_NAME} 3D5400C1: Params extracted from response`, { xid, params }); |
70 | 70 | ||
71 | const requestIdField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.requestId) || 'REQUESTID'; | 71 | const requestIdField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.requestId) || 'REQUESTID'; |
72 | const requestIdFromResponse = params[requestIdField]; | 72 | const requestIdFromResponse = params[requestIdField]; |
73 | 73 | ||
74 | const responseCodeField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.responseCode) || 'RESPONSECODE'; | 74 | const responseCodeField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.responseCode) || 'RESPONSECODE'; |
75 | const responseCodeFromResponse = params[responseCodeField]; | 75 | const responseCodeFromResponse = params[responseCodeField]; |
76 | 76 | ||
77 | const messageField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.message) || 'MESSAGE'; | 77 | const messageField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.message) || 'MESSAGE'; |
78 | const messageFromResponse = params[messageField]; | 78 | const messageFromResponse = params[messageField]; |
79 | 79 | ||
80 | const snField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.sn) || 'SN'; | 80 | const snField = (config.partner.xmlrpc_field && config.partner.xmlrpc_field.sn) || 'SN'; |
81 | const snFromResponse = params[snField]; | 81 | const snFromResponse = params[snField]; |
82 | 82 | ||
83 | const trxId = trxIdFromCaller || requestIdFromResponse; | 83 | const trxId = trxIdFromCaller || requestIdFromResponse; |
84 | if (!trxId) { | 84 | if (!trxId) { |
85 | logger.warn(`${MODULE_NAME} 534E684A: Unknown trxId`, { xid }); | 85 | logger.warn(`${MODULE_NAME} 534E684A: Unknown trxId`, { xid }); |
86 | return; | 86 | return; |
87 | } | 87 | } |
88 | 88 | ||
89 | const rc = responseCodeFromResponse | 89 | const rc = responseCodeFromResponse |
90 | ? translateRc(xid, responseCodeFromResponse) || '40' | 90 | ? translateRc(xid, responseCodeFromResponse) || '40' |
91 | : '68'; | 91 | : '68'; |
92 | 92 | ||
93 | const sn = ( | 93 | const sn = ( |
94 | rc === '00' && ( | 94 | rc === '00' && ( |
95 | snFromResponse | 95 | snFromResponse |
96 | || messageExtractor(patternRules.sn, messageFromResponse) | 96 | || messageExtractor(patternRules.sn, messageFromResponse) |
97 | ) | 97 | ) |
98 | ) || null; | 98 | ) || null; |
99 | 99 | ||
100 | const amount = Number(messageExtractor(patternRules.price, messageFromResponse) || '') || null; | 100 | const amount = Number( |
101 | const balance = Number(messageExtractor(patternRules.balance, messageFromResponse) || '') || null; | 101 | messageExtractor( |
102 | config.partner.price_rules || patternRules.price, | ||
103 | messageFromResponse, | ||
104 | ) || '', | ||
105 | ) || null; | ||
106 | |||
107 | const balance = Number( | ||
108 | messageExtractor( | ||
109 | config.partner.balance_rules || patternRules.balance, | ||
110 | messageFromResponse, | ||
111 | ) || '', | ||
112 | ) || null; | ||
102 | 113 | ||
103 | report(xid, { | 114 | report(xid, { |
104 | trx_id: trxId.toString(), | 115 | trx_id: trxId.toString(), |
105 | rc, | 116 | rc, |
106 | sn, | 117 | sn, |
107 | amount, | 118 | amount, |
108 | balance, | 119 | balance, |
109 | message: { | 120 | message: { |
110 | xid, | 121 | xid, |
111 | ip: remoteIp || null, | 122 | ip: remoteIp || null, |
112 | responseType: isCallback ? 'CALLBACK' : 'DIRECT-RESPONSE', | 123 | responseType: isCallback ? 'CALLBACK' : 'DIRECT-RESPONSE', |
113 | message: params, | 124 | message: params, |
114 | }, | 125 | }, |
115 | }); | 126 | }); |
116 | }; | 127 | }; |
117 | 128 |