partner-kospinjasa.js
3.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
var winston = require('winston');
var soap = require('soap');
var crypto = require('crypto');
var strftime = require('strftime');
var max_retry = 10;
var sleep_before_retry = 5000;
var config;
var callbackReport;
var aaa;
var logger;
var options;
function start(_config, _callbackReport, options) {
config = _config;
callbackReport = _callbackReport
if (options && options.aaa) {
aaa = options.aaa;
}
if (options && options.logger) {
logger = options.logger;
} else {
logger = new winston.Logger({
transports: [
new (winston.transports.Console)()
]
});
}
}
function topupRequest(task, retry) {
if (retry === undefined) {
retry = max_retry;
}
var remoteProduct = task.remoteProduct.split(',');
var params = {
userName: config.h2h_out.userid,
productCode: remoteProduct[0] ,
terminal: 'terminal0',
transactionType: '50',
billNumber: createBillNumber(task.destination),
amount: remoteProduct[1],
bit61: createBillNumber(task.destination),
reff: task.requestId,
timeStamp: strftime('%d-%m-%Y %H:%M:%S', new Date())
}
var signature = createSignature(params, config.h2h_out.password);
params.signature = signature;
topupRequestSoap(task, params, retry);
}
function topupRequestSoap(task, params, retry) {
soap.createClient(config.h2h_out.partner, function(err, soapClient) {
logger.info('Requesting to service', {url: config.h2h_out.partner, params: params});
soapClient.billpayment({ inputCheck: params }, function(err, result) {
logger.info('Got response', {lastRequest: soapClient.lastRequest});
if (err) {
logger.warn('Error requesting service', {err: err});
callbackReport(task.requestId, '68', 'something wrong');
return;
}
var responseMessageToST24 = result.outputParameter.resultCode.$value + ' - ' + result.outputParameter.resultDesc.$value;
logger.info('Got result: ' + responseMessageToST24, {result: result});
callbackReport(task.requestId, '68', responseMessageToST24);
});
});
}
function createSignature(params, password) {
var passwordHash = crypto.createHash('sha256').update(password).digest().toString('hex');
var plain =
params.userName
+ passwordHash
+ params.productCode
+ params.terminal
+ params.transactionType
+ params.billNumber
+ params.amount
+ params.reff
+ params.timeStamp;
var result = crypto.createHash('sha1').update(plain).digest().toString('hex');
if (logger) {
logger.verbose('Calculating signature', {plain: plain, result: result, params: params, password: password});
}
return result;
}
function createBillNumber(destination) {
return ("0000000000000" + destination).slice(-13);
}
exports.start = start;
exports.topupRequest = topupRequest;
exports.createSignature = createSignature;
exports.createBillNumber = createBillNumber;