Commit 5a947e4006be36b51e8d5373e45066f7982ce0fc
1 parent
1f837fd31a
Exists in
master
siap coba dapat result
Showing 2 changed files with 51 additions and 6 deletions Inline Diff
package.json
1 | { | 1 | { |
2 | "name": "sate24-to-kospinjasa", | 2 | "name": "sate24-to-kospinjasa", |
3 | "version": "1.0.0", | 3 | "version": "1.0.0", |
4 | "description": "ST24 to Kospin JASA", | 4 | "description": "ST24 to Kospin JASA", |
5 | "main": "index.js", | 5 | "main": "index.js", |
6 | "scripts": { | 6 | "scripts": { |
7 | "test": "mocha" | 7 | "test": "mocha" |
8 | }, | 8 | }, |
9 | "repository": { | 9 | "repository": { |
10 | "type": "git", | 10 | "type": "git", |
11 | "url": "git@gitlab.kodesumber.com:reload97/sate24-to-kospinjasa.git" | 11 | "url": "git@gitlab.kodesumber.com:reload97/sate24-to-kospinjasa.git" |
12 | }, | 12 | }, |
13 | "keywords": [ | 13 | "keywords": [ |
14 | "st24", | 14 | "st24", |
15 | "reload97", | 15 | "reload97", |
16 | "r97", | 16 | "r97", |
17 | "ppob", | 17 | "ppob", |
18 | "kospinjasa" | 18 | "kospinjasa" |
19 | ], | 19 | ], |
20 | "author": "Adhidarma Hadiwinoto <me@adhisimon.org>", | 20 | "author": "Adhidarma Hadiwinoto <me@adhisimon.org>", |
21 | "license": "ISC", | 21 | "license": "ISC", |
22 | "dependencies": { | 22 | "dependencies": { |
23 | "ini": "^1.3.4", | 23 | "ini": "^1.3.4", |
24 | "sate24": "git+http://gitlab.kodesumber.com/reload97/node-sate24.git", | 24 | "sate24": "git+http://gitlab.kodesumber.com/reload97/node-sate24.git", |
25 | "sate24-expresso": "git+http://gitlab.kodesumber.com/reload97/sate24-expresso.git", | 25 | "sate24-expresso": "git+http://gitlab.kodesumber.com/reload97/sate24-expresso.git", |
26 | "soap": "^0.15.0", | 26 | "soap": "^0.15.0", |
27 | "winston": "^2.2.0" | 27 | "winston": "^2.2.0" |
28 | }, | ||
29 | "devDependencies": { | ||
30 | "mocha": "^2.4.5", | ||
31 | "should": "^8.3.2" | ||
28 | } | 32 | } |
29 | } | 33 | } |
30 | 34 |
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'); | ||
4 | var strftime = require('strftime'); | ||
3 | 5 | ||
4 | var max_retry = 10; | 6 | var max_retry = 10; |
5 | var sleep_before_retry = 5000; | 7 | var sleep_before_retry = 5000; |
6 | 8 | ||
7 | var config; | 9 | var config; |
8 | var callbackReport; | 10 | var callbackReport; |
9 | var aaa; | 11 | var aaa; |
10 | var logger; | 12 | var logger; |
11 | var options; | 13 | var options; |
12 | 14 | ||
13 | function start(_config, _callbackReport, options) { | 15 | function start(_config, _callbackReport, options) { |
14 | config = _config; | 16 | config = _config; |
15 | callbackReport = _callbackReport | 17 | callbackReport = _callbackReport |
16 | 18 | ||
17 | if (options && options.aaa) { | 19 | if (options && options.aaa) { |
18 | aaa = options.aaa; | 20 | aaa = options.aaa; |
19 | } | 21 | } |
20 | 22 | ||
21 | if (options && options.logger) { | 23 | if (options && options.logger) { |
22 | logger = options.logger; | 24 | logger = options.logger; |
23 | } else { | 25 | } else { |
24 | logger = new winston.Logger({ | 26 | logger = new winston.Logger({ |
25 | transports: [ | 27 | transports: [ |
26 | new (winston.transports.Console)() | 28 | new (winston.transports.Console)() |
27 | ] | 29 | ] |
28 | }); | 30 | }); |
29 | } | 31 | } |
30 | } | 32 | } |
31 | 33 | ||
32 | function topupRequest(task, retry) { | 34 | function topupRequest(task, retry) { |
33 | if (retry === undefined) { | 35 | if (retry === undefined) { |
34 | retry = max_retry; | 36 | retry = max_retry; |
35 | } | 37 | } |
36 | 38 | ||
39 | var remoteProduct = task.remoteProduct.split(','); | ||
40 | |||
37 | soap.createClient(url, function(err, client) { | 41 | soap.createClient(url, function(err, client) { |
38 | client.MyFunction(args, function(err, result) { | 42 | var args = { |
39 | console.log(result); | 43 | userName: config.h2h_out.userid, |
44 | productCode: remoteProduct[0] , | ||
45 | terminal: 'terminal0', | ||
46 | transactionType: '50', | ||
47 | billNumber: createBillNumber(task.destination), | ||
48 | amount: remoteProduct[1], | ||
49 | bit61: createBillNumber(task.destination), | ||
50 | reff: task.requestId, | ||
51 | timeStamp: strftime('%d-%m-%Y %H:%M:%S', new Date()); | ||
52 | } | ||
53 | |||
54 | client.billpayment(args, function(err, result) { | ||
55 | if (err) { | ||
56 | logger.warn('Error requesting service', {err: err}); | ||
57 | callbackReport(task.requestId, '68', 'something wrong'); | ||
58 | return; | ||
59 | } | ||
60 | |||
61 | logger.info('Got result', {result: result}); | ||
62 | callbackReport(task.requestId, '68', 'got result'); | ||
40 | }); | 63 | }); |
41 | }); | 64 | }); |
42 | } | 65 | } |
43 | 66 | ||
44 | function createSoapClient(url, callback) { | 67 | function createSignature(args, password) { |
45 | soap.createClient(url, function(err, client) { | 68 | var passwordHash = crypto.createHash('sha256').update(password).digest().toString('hex'); |
46 | callback(err, client); | 69 | |
47 | }); | 70 | var result = crypto.createHash('sha1').update( |
71 | args.userName | ||
72 | + passwordHash | ||
73 | + args.productCode | ||
74 | + args.terminal | ||
75 | + args.transactionType | ||
76 | + args.billNumber | ||
77 | + args.amount | ||
78 | + args.ref | ||
79 | + args.timestamp | ||
80 | ).digest().toString('hex'); | ||
81 | |||
82 | return result; | ||
83 | } | ||
84 | |||
85 | function createBillNumber(destination) { | ||
86 | return ("0000000000000" + destination).slice(-13); | ||
48 | } | 87 | } |
49 | 88 | ||
50 | exports.start = start; | 89 | exports.start = start; |
51 | exports.topupRequest = topupRequest; | 90 | exports.topupRequest = topupRequest; |
91 | exports.createSignature = createSignature; | ||
92 | exports.createBillNumber = createBillNumber; | ||
52 | 93 |