Commit 45725db9065bdce6f2cf520530bfb9e2b32e7bac

Authored by Adhidarma Hadiwinoto
1 parent 205f271b3d
Exists in master

using sate24/partner-im

Showing 4 changed files with 11 additions and 150 deletions Inline Diff

1 var YM = require('yahoomessenger'); 1 var YM = require('yahoomessenger');
2 2
3 var username; 3 var username;
4 var password; 4 var password;
5 5
6 var callbacks; 6 var callbacks;
7 7
8 function onReady() { 8 function onReady() {
9 logger.info('Going to login to YM as ' + username); 9 logger.info('Going to login to YM as ' + username);
10 YM.login(username, password); 10 YM.login(username, password);
11 } 11 }
12 12
13 function onLoginSuccessful(data) { 13 function onOnline(data) {
14 logger.info('YM login successful', {data: data}); 14 logger.info('YM login successful', {data: data});
15 if (callbacks.onLoginSuccessful) { 15 if (callbacks.onOnline) {
16 callbacks.onLoginSuccessful(); 16 callbacks.onOnline();
17 } 17 }
18 } 18 }
19 19
20 function onLoginError(data) { 20 function onLoginError(data) {
21 logger.warn('YM login error', {data: data}); 21 logger.warn('YM login error', {data: data});
22 } 22 }
23 23
24 function onFriendsList(data) { 24 function onFriendsList(data) {
25 logger.verbose('Got list of friendlist', {data: data}); 25 logger.verbose('Got list of friendlist', {data: data});
26 } 26 }
27 27
28 function onPM(data) { 28 function onPM(data) {
29 logger.verbose('Got a message', {data: data}) 29 logger.verbose('Got a message', {data: data})
30 if (callbacks.onPM) { 30 if (callbacks.onPM) {
31 callbacks.onPM(data.sender, data.message); 31 callbacks.onPM(data.sender, data.message);
32 } 32 }
33 } 33 }
34 34
35 function onPing(data) { 35 function onPing(data) {
36 logger.verbose('Got ping', {data: data}); 36 logger.verbose('Got ping', {data: data});
37 } 37 }
38 38
39 function init(_username, _password, _logger, _callbacks) { 39 function init(_username, _password, _logger, _callbacks) {
40 username = _username; 40 username = _username;
41 password = _password; 41 password = _password;
42 logger = _logger; 42 logger = _logger;
43 callbacks = _callbacks; 43 callbacks = _callbacks;
44 44
45 YM.on('ready', onReady); 45 YM.on('ready', onReady);
46 YM.on('loginSuccessful', onLoginSuccessful); 46 YM.on('loginSuccessful', onOnline);
47 YM.on('loginError', onLoginError); 47 YM.on('loginError', onLoginError);
48 YM.on('friendsList', onFriendsList); 48 YM.on('friendsList', onFriendsList);
49 YM.on('pm', onPM); 49 YM.on('pm', onPM);
50 YM.on('offlinePM', onPM); 50 YM.on('offlinePM', onPM);
51 51
52 /* 52 /*
53 setTimeout( 53 setTimeout(
54 YM.newInstance, 54 YM.newInstance,
55 3000 55 3000
56 ) 56 )
57 */ 57 */
58 YM.newInstance(); 58 YM.newInstance();
59 } 59 }
60 60
61 function sendMessage(destination, msg) { 61 function sendMessage(destination, msg) {
62 logger.verbose('Sending message', {from: username, destination: destination, msg: msg}); 62 logger.verbose('Sending message', {from: username, destination: destination, msg: msg});
63 YM.sendPM(destination, msg); 63 YM.sendPM(destination, msg);
64 } 64 }
65 65
66 exports.init = init; 66 exports.init = init;
67 exports.sendMessage = sendMessage; 67 exports.sendMessage = sendMessage;
68 68
1 var fs = require('fs'); 1 var fs = require('fs');
2 var ini = require('ini'); 2 var ini = require('ini');
3 var expresso = require('sate24-expresso'); 3 var expresso = require('sate24-expresso');
4 var partner = require('./partner-ym');
5 var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8')); 4 var config = ini.parse(fs.readFileSync(__dirname + '/config.ini', 'utf-8'));
6 5
7 process.chdir(__dirname); 6 process.chdir(__dirname);
8 7
9 var logger = require('sate24/logger.js').start(); 8 var logger = require('sate24/logger.js').start();
10 var HttpServer = require('sate24/httpserver.js'); 9 var HttpServer = require('sate24/httpserver.js');
11 var aaa = require('sate24/aaa.js'); 10 var aaa = require('sate24/aaa.js');
12 var partner = require('./partner-ym.js'); 11 var partner = require('sate24/partner-im.js');
12 var imAdaptor = require('./adaptor-ym');
13
13 14
14 var matrix = aaa.prepareMatrix(); 15 var matrix = aaa.prepareMatrix();
15 16
16 var options = { 17 var options = {
17 'aaa': aaa, 18 'aaa': aaa,
18 'logger': logger, 19 'logger': logger,
19 'config': config, 20 'config': config,
20 'matrix': matrix, 21 'matrix': matrix,
21 'partner': partner, 22 'partner': partner,
23 'imAdaptor': imAdaptor
22 } 24 }
23 25
24 var httpServer = HttpServer.start(config, options); 26 var httpServer = HttpServer.start(config, options);
25 27
26 aaa.pause(); 28 aaa.pause();
27 29
28 partner.start(options); 30 partner.start(options);
29 aaa.start(config, partner, options); 31 aaa.start(config, partner, options);
30 expresso.start(options); 32 expresso.start(options);
partner-ym.js
1 var im = require('sate24/im.js') File was deleted
2 var YM = require('yahoomessenger');
3 var imAdaptor = require('./adaptor-ym');
4
5 var config;
6 var aaa;
7 var logger;
8 var callbackReport;
9
10 function onLoginSuccessful() {
11 logger.info('Login successful, resuming aaa communication');
12 aaa.resume();
13 }
14
15 function onPM(from, msg) {
16
17 if (!im.isAllowedFrom(from)) {
18 logger.info('Ignoring message from unknown sender', {from: from, msg: msg});
19 return;
20 }
21
22 var remoteProduct = im.getRemoteProductFromMessage(msg);
23 var destination = im.getDestinationFromMessage(msg);
24
25 if (!remoteProduct && !destination) {
26 logger.warn('Missing remote product or destination', {remoteProduct: remoteProduct, destination: destination, msg: msg});
27 return;
28 }
29
30 logger.info('Got report from partner', {remoteProduct: remoteProduct, destination: destination, msg: msg});
31 im.getTask(remoteProduct, destination, function(err, task) {
32 if (err) {
33 logger.warn('Error getting relevant task');
34 return;
35 }
36
37 if (!task) {
38 logger.warn('Something wrong, undefined task without error')
39 return;
40 }
41
42 logger.verbose('Got relevant task', {task: task, msg: msg});
43 var rc = im.getRcFromMessage(msg);
44 if (rc == '00') {
45 var sn = im.getSnFromMessage(msg);
46 if (sn) {
47 msg = 'SN=' + sn + ';' + msg;
48 }
49 }
50
51 if (['00', '55', '68'].indexOf(rc) == -1) {
52 im.deleteTask(remoteProduct, destination);
53 }
54
55 if (rc != '68') {
56 im.cancelResendDelay(task);
57 }
58
59 callbackReport(task.requestId, rc, msg);
60 });
61 }
62
63 function start(options) {
64 if (options && options.config) {
65 config = options.config;
66 } else {
67 console.log('Unknown options.config');
68 process.exit('1');
69 }
70
71 if (options && options.aaa) {
72 aaa = options.aaa;
73 }
74
75 if (options && options.aaa && options.aaa.callbackReport) {
76 callbackReport = options.aaa.callbackReport;
77 } else {
78 console.log('Unknown options.aaa.callbackReport')
79 process.exit(2);
80 }
81
82 if (options && options.logger) {
83 logger = options.logger;
84 } else {
85 logger = new winston.Logger({
86 transports: [
87 new (winston.transports.Console)()
88 ]
89 });
90 }
91
92 var callbacks = {
93 onLoginSuccessful: onLoginSuccessful,
94 onPM: onPM,
95 }
96
97 im.init(options);
98 imAdaptor.init(config.h2h_out.ym_id, config.h2h_out.ym_password, logger, callbacks);
99 }
100
101 function onSameDayDupe(task, archivedTask) {
102 if (task.requestId == archivedTask.requestId) {
103 logger.info('Mengulang trx untuk advice', {task: task});
104 _topupRequest(task);
105 } else {
106 logger.info('Terdeteksi trx sama dalam satu hari yang sama', {task: task});
107 callbackReport(task.requestId, '55', 'Terdeteksi trx sama dalam satu hari yang sama');
108 }
109 }
110
111 function _topupRequest(task) {
112 var pattern = config.h2h_out.request_pattern;
113
114 var keywords = {
115 remoteProduct: task.remoteProduct,
116 destination: task.destination,
117 pin: config.h2h_out.pin
118 }
119
120 im.saveTask(task, function() {
121 im.registerResendDelay(task);
122
123 var msg = im.createMessage(pattern, keywords);
124 imAdaptor.sendMessage(config.h2h_out.partner, msg);
125 });
126
127 }
128
129 function topupRequest(task) {
130 if (!aaa.isTodayTrx(task)) {
131 logger.warn('Maaf, transaksi beda hari tidak dapat dilakukan');
132 callbackReport(task.requestId, '68', 'Maaf, transaksi beda hari tidak dapat dilakukan');
133 im.cancelResendDelay(task);
134 return;
135 }
136
137 im.checkForSameDayDuplicate(task, _topupRequest, onSameDayDupe, _topupRequest);
138 }
139
140 exports.start = start;
141 exports.topupRequest = topupRequest;
142 1 var im = require('sate24/im.js')
1 [globals] 1 [globals]
2 products=TST1 2 products=TST1
3 gateway_name=NEOYM1 3 gateway_name=NEOYM1
4 aaa_host=http://127.0.0.1:4250 4 aaa_host=http://127.0.0.1:4250
5 interval=1000 5 interval=1000
6 admin_port=17602 6 admin_port=17602
7 apikey=123497 7 apikey=123497
8 redis_host=localhost 8 redis_host=localhost
9 redis_port=6379 9 redis_port=6379
10 balance_regex=Saldo: Rp (\d+?)\. 10 balance_regex=Saldo: Rp (\d+?)\.
11 auto_resend_delay_secs=120 11 auto_resend_delay_secs=300
12 dump_stats_interval_secs=300 12 dump_stats_interval_secs=300
13 13
14 [h2h_out] 14 [h2h_out]
15 ym_id=myymid 15 im_username=myymid
16 ym_password=mypassword 16 im_password=mypassword
17 partner=partnerymid 17 partner=partnerymid
18 allow_response_from=partnerymid 18 allow_response_from=partnerymid
19 pin=1234 19 pin=1234
20 request_pattern=[remoteProduct].[destination].[pin] 20 request_pattern=[remoteProduct].[destination].[pin]
21 21
22 [expresso] 22 [expresso]
23 listen_port=19602 23 listen_port=19602
24 password=0d6848d79e04dafc91d6d461a765d0558124081c60bdb23b79e2affaa3c452f8 24 password=0d6848d79e04dafc91d6d461a765d0558124081c60bdb23b79e2affaa3c452f8
25 session_name=something.connect.sid 25 session_name=something.connect.sid
26 26
27 [products] 27 [products]
28 TST1=SS5 28 TST1=SS5
29 29