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