const express = require('express') const app = express() const configPartnerList = require('./config_partner.json'); const PartnerManager = require('./req_partner_manager'); let moment = require('moment') let unirest = require('unirest') let request = require('request') let cors = require('cors') let toXML = require('jstoxml'); // var mongoose = require('mongoose'); // mongoose.connect('mongodb://10.1.2.146:27018/test'); // var MongoClient = require('mongodb').MongoClient; // var dburl = "mongodb://10.1.2.144:27018/test"; // MongoClient.connect(dburl, function(err, db) { // if (err) { // throw err; // } // console.log('db connected'); // db.close(); // }); const port = 3002 app.use(cors()) app.use((req, res, next) => { console.log('incomming url: ',req.originalUrl) next() }) app.use(express.urlencoded()); app.use(express.json()); app.post('/apiRequest', (req, res) => { console.log(req.params.apiRequest) console.log(req.originalUrl); console.log(req.url) let partnerCode = req.body.partnerCode let configPartner = null; if (Array.isArray(configPartnerList.partner)) { for (let partner of configPartnerList.partner) { if (partnerCode == partner.partnerCode) { configPartner = partner; break; } } } if (configPartner) { let reqPartner = new PartnerManager(req.body, configPartner); let apiRequest = reqPartner.requestApi() if (apiRequest instanceof Error) { //handle error res.send(JSON.parse(apiRequest.message)) } else { res.send(apiRequest) } } else { res.send('unknown partner') } }) app.post('/ktc/point/transferPoint', (req, res) => { console.log('/ktc/point/transferPoint', req.body) console.log('/ktc/point/transferPoint', req.headers) let response = { aaa: "test", pushRefId1: 'WsxK21', resultData: [ { pointId1: 'ser' }, { pointId1: 'ser1' } ] } res.set('xx', 'test') // res.status(200).json(response) }) app.post('/mockOneSiamMoblieServiceSoap', (req, res) => { console.log(req.body) console.log(req.headers) res.status(200).send('123$value$value$value') }) app.get('/get', (req, res) => { console.log('get', req.body) console.log('get', req.headers) let response = { pushRefId: '', resultData: [ { pointId1: 'ser' }, { pointId1: 'ser1' } ] } // res.status(200).json(response) }); app.get('/test', async (req, res) => { console.log('test', req.body) console.log('test', req.headers) try { let response = await doRequestFormData('http://test.us-payment.picovr.com/AISPayNotify',{ accept: 'application/json'}, { app_id: '24e09f8038dbf1204c09090d56c872c0', body: 'PICO-COINS12000', buyer_pay_fee: 'Paid by user', device_id: '90c73518a762a2d1a339d7f', fee_type: 'THB', mch_id: 'company_id', nonce_str: 'SpXrgaKf4fagyF9a', notify_type: 'PAY', open_id: 'ZLsdZaanhHDAUkDDgRX6QfpxAj0CSx6x7BLgUt4LlpM=', out_trade_no: '202004081609523', pay_time: 1587527937951, pay_type: 'AIS', receipt_fee: '0.00', subject: 'Purchased 12000 coins.', terminal_type: 'IOS', timestamp: 1587527937951, total_fee: '0.00', trade_no: '50609152601900018023', trade_type: 'Download', signature: '83387eaf92018538d5f8fd7f3a6ecd0a' }) res.send(response) } catch (e) { //if doRequestFormData has error //reject, timeout, other error console.log('doRequestFormData', e) res.send('error') } }); function doRequestFormData(url, headers, data) { console.log(url, headers, data) return new Promise(function (resolve, reject) { request.post({ url: url, headers: headers, timeout: 2000, formData: data }, function (error, res, body) { if (!error && res.statusCode == 200) { resolve(body); } else { reject(error); } }); }); } // app.post('/api/v1/mpay/billingonbehalf/reserveAndChargeVolume.json', (req, res) => { // console.log(req.body) // console.log(req.headers) // let response = { // "reserveAndChargeVolumeResponse": { // "result": "SUCCESS", // "resultDescription": "60713000154960518477", // "endUserIdentifier": "66873381009", // "networkType": "prepaid" // } // } // res.status(200).json(response) // }); app.post('/api/v1/mpay/billingonbehalf/reserveAndChargeVolume.json', function (req, res) { // res.send({ // // reserveAndChargeVolumeResponse : { // result: "SUCCESS", // resultDescription: "60713000154960518477", // endUserIdentifier: "66873381009", // networkType: "prepaid" // // } // }) }) // app.post('/api/v1/mpay/billingonbehalf/partialRefundVolume.json', (req, res) => { // console.log(req.body) // console.log(req.headers) // let response = { // "refundVolumeV2Response": { // "result": "SUCCESS", // "resultDescription": "60713000154960518477", // "endUserIdentifier": "66873381009", // "networkType": "prepaid" // } // } // res.status(200).json(response) // }); app.post('/api/v1/mpay/billingonbehalf/queryChargeTransaction.json', (req, res) => { console.log(req.body) console.log(req.headers) let response = { "result": "SUCCESS", "resultDescription": "201805231904005310944" } res.status(200).json(response) }); app.post('/api/v1/mpay/billingonbehalf/queryRefundTransaction.json', (req, res) => { console.log(req.body) console.log(req.headers) let response = { "result": "SUCCESS", "resultDescription": "201805231904005310944" } res.status(200).json(response) }); // app.use(multiparty({ uploadDir: "./img"})); app.post('/api/shop-cdns/upload', (req, res) => { var azure = require('azure-storage') var multiparty = require('multiparty') process.env.AZURE_STORAGE_ACCOUNT = 'shareallspw' process.env.AZURE_STORAGE_ACCESS_KEY = 'TIWwkqyvlyTySRzSelOJij2jaZbKIZ/fLUST0q9TPZGNI1dQVVn1/bU4/FnEJnUpvW1fqtWYI2HmGJeD/Oo4eA==' var blobService = azure.createBlobService(); var form = new multiparty.Form(); form.on('part', function (part) { if (!part.filename) return; var size = part.byteCount; var path = 'point' var name = moment().valueOf() + '.' + part.filename.split('.')[1]; var container = 'spw-cdn'; blobService.createBlockBlobFromStream(container, path + '/' + name, part, size, function (error, result, response) { if (error) { console.log(error) // error handling res.status(500).send('Error uploading file'); } console.log('result', result) console.log('response', response) // res.send('File uploaded successfully'); let responseMessage = { name: part.filename, type: part.headers['content-type'], size: part.byteCount, container: '/' + path, imageUrl: 'https://shareallspw.azureedge.net/' + path + '/' + name, thumbnails: 'test1', thumbnails43: 'test2', } console.log(responseMessage) res.send(responseMessage) }); }); form.parse(req); }); var multipart = require('connect-multiparty'); const { sortedUniq, result, reject } = require('lodash'); var multipartMiddleware = multipart({ uploadDir: './img' }); app.post('/api/shop-cdns/upload2', multipartMiddleware, async (req, res) => { console.log(req.body, req.files); var size = req.files.file.size; var name = moment().valueOf() + '.' + req.files.file.name.split('.')[1]; var path = 'point' var container = 'spw-cdn'; // console.log(req.files.file.path) var blobService = azure.createBlobService(); blobService.createBlockBlobFromLocalFile(container, path + '/' + name, req.files.file.path, (error, result, response) => { console.log(result) console.log(response) console.log(error) console.log({ name: name, type: req.files.file.type, size: size, container: '/' + path, imageUrl: 'https://shareallspw.azureedge.net/' + path + '/' + name, thumbnails: 'test1', thumbnails43: 'test2', }) res.send({ name: name, type: req.files.file.type, size: size, container: '/' + path, imageUrl: 'https://shareallspw.azureedge.net/' + path + '/' + name, thumbnails: 'test1', thumbnails43: 'test2', }) }) }); app.get('/scf/v2/partnerSpecificPrivateId/:privateId.json', require('./scf').decryptPrivateId); app.post('/api/v1/gsso/sendOneTimePW.json', require('./gsso').sendOneTimePassword); app.post('/api/v1/gsso/confirmOneTimePassword.json', require('./gsso').confirmOneTimePassword); app.get('/ssb/profile/network/subscriber/:userId/type/:userType', require('./ssb').getProfileType); app.post('/ssb/profile/historyPackage', require('./ssb').queryHistoryPackage); app.post('/ssb/profile/currentPackage', require('./ssb').queryCurrentPackage); app.post('/ssb/package/apply', require('./ssb').applyPack); app.post('/ssb/package/subscriber', require('./ssb').deletePackage); // app.post('/ssb/transform', require('./ssb').createNewRegistration); app.post('/v1.0/ais/users', require('./vcom').userRegisterAndRegisterDevice); app.post('/verifyReceipt', require('./apple').verifyReceipt); // app.post('/api/v1/package/packagepayment', require('./nafa').packagePayment); // app.post('/api/v1/package/cancelPackage', require('./nafa').cancelPackage); // app.get('/api/v1/customer', require('./d01').getCustomer); app.post('/api/v1/customer', require('./d01').postCustomer); app.put('/api/v1/customer', require('./d01').putCustomer); app.delete('/api/v1/customer', require('./d01').deleteCustomer); app.get('/api/v1/memberlink', require('./d01').getMemberLink); app.post('/api/v1/memberlink', require('./d01').postMemberLink); app.put('/api/v1/memberlink', require('./d01').putMemberLink); app.delete('/api/v1/memberlink', require('./d01').deleteMemberLink); app.get('/api/v1/address', require('./d01').getAddress); app.post('/api/v1/address', require('./d01').postAddress); app.put('/api/v1/address', require('./d01').putAddress); app.delete('/api/v1/address', require('./d01').deleteAddress); app.get('/api/v1/mastermember', require('./d01').getMasterMember); app.post('/api/v1/mastermember', require('./d01').postMasterMember); app.put('/api/v1/mastermember', require('./d01').putMasterMember); app.delete('/api/v1/mastermember', require('./d01').deleteMasterMember); app.get('/api/v1/gender', require('./d01').getGender); app.post('/api/v1/gender', require('./d01').postGender); app.put('/api/v1/gender', require('./d01').putGender); app.delete('/api/v1/gender', require('./d01').deleteGender); app.get('/api/v1/address_type', require('./d01').getAddressType); app.post('/api/v1/address_type', require('./d01').postAddressType); app.put('/api/v1/address_type', require('./d01').putAddressType); app.delete('/api/v1/address_type', require('./d01').deleteAddressType); app.post('/auth/v3.1/oauth/token', require('./admd').oauthToken); app.post('/auth/v3.1/logout', require('./admd').logout); app.post('/validate/token', require('./admd').validateToken); app.post('/point/v1/deleteCustomer', require('./micro_point').deleteCustomer); app.post('/privilege/v1/history/delete', require('./privilege').deleteCustomer); app.post('/v1/MVP/enq/getMobileOfferInventory/', require('./true').getMobileOfferInventory); app.post('/v1/get_AccountStatusHistoryList/', require('./true').getAccountStatusHistoryList); app.post('/MGContractInfo/MGContractInfo/getContractHistoryList', require('./true').getContractHistoryList); app.post('/v1/get_ProductInfo/', require('./true').getProductInfo); app.post('/api/v1/LG-API/notifySubscription', require('./lg').notifySubscription); app.post('/goapi/profile/assetDetail', require('./ccbs').assetDetail); app.post('/goapi/profile/churnscore/offerlist', require('./ccbs').churnScoreOfferList); app.get('/goapi/profile/external/customer/usageInfo/:type/:number', require('./ccbs').usageInfo); app.post('/v1/OSBCOM/BillingProfileInfo/UsageProfileInfoREST/getAccumulationUOMGroupList/', require('./ccbs').accumulationUOMGroupList); app.post('/CCBSCommonInfo/MGCommonInfo/getPrimaryKeyListWithoutResourceType', require('./ccbs').getPrimaryKeyListWithoutResourceType); app.post('/v1/get_bundle_profile_list/', require('./ccbs').getBundleProfileList); app.post('/v1/CCCSOA/OrganizationInfoWS/OrganizationInfoSI/getAgreementBundleUsageInfo', require('./cccsoa').getAgreementBundleUsageInfo); app.post('/CRMIAsset/getAssetComponentList', require('./crmasset').getAssetComponentList); app.post('/MGOfferInfo/MGOfferInfo/getAllDiscountList', require('./int').getAllDiscountList); app.post('/MGOfferInfo/MGOfferInfo/getFuturePromotionList', require('./int').getFuturePromotionList); app.post('/MGOfferInfo/NativeOfferInfo/getCurrentCUGList', require('./int').getCurrentCUGList); app.post('/MGOfferInfo/NativeOfferInfo/getCurrentFriendFamilyList', require('./int').getCurrentFriendFamilyList); app.post('/MGOfferInfo/NativeOfferInfo/getCurrentSpendingLimitList', require('./int').getCurrentSpendingLimitList); app.post('/MGOfferInfo/NativeOfferInfo/getCurrentCreditLimitAtSubList', require('./int').getCurrentCreditLimitAtSubList); app.post('/MGOfferInfo/NativeOfferInfo/getCurrentSplitChargeInfo', require('./int').getCurrentSplitChargeInfo); app.post('/v1/get_BillImage/', require('./int').getBillImage); app.post('/v1/OSB/get_AdjustmentSummaryAmount/', require('./int').getAdjustmentSummaryAmount); app.post('/v1/OSB/get_AdjustmentHistoryList/', require('./int').getAdjustmentHistoryList); app.post('/GatheringBillingInfo/GatheringBillingInfo/getTDSList', require('./int').getTdsList); app.post('/v1/get_FinalChargeInfo/', require('./int').getFinalChargeInfo); //postpay app.get('/v1/get_PayChannelInfo/:ban', require('./int').getPayChannel); app.get('/MGCCBSInvoiceInfo/MGCCBSInvoiceInfo/getAllCCBSInvoiceList/:ban/:pageSize/:pageNo', require('./intx').getAllCCBSInvoiceList); app.get('/FinancialTransaction/MGPaymentInfo/getPaymentList/:ban/:pageSize/:pageNo', require('./intx').getPaymentList); app.post('/MGContractInfo/MGContractInfo/getCurrentContractList', require('./intx').getCurrentContractList); app.post('/MGCustomerInfo/MGCustomerInfo/getAccountInfo', require('./intx').getAccountInfo); app.get('/v1/get_BillingAddress/:accountId/:pageNo', require('./postpay_true').getBillingAddress); //postpay app.post('/v1/get_AccountCustomerInfo/', require('./postpay_true').getAccountCustomerInfo); //postpay app.get('/v1/get_LastInvoiceList/:accountId/:pageSize', require('./postpay_true').getLastInvoiceList); //postpay app.post('/v1/OSB/get_LastDocumentList/', require('./postpay_true').getLastDocumentList); //postpay app.post('/v1/get_CreditLimitInfo/', require('./postpay_true').getCreditLimitInfo); //postpay app.get('/MGBillingInfo/MGBillingInfo/getBillMediaInfo/:accountId/', require('./postpay_true').getBillMediaInfo); //postpay app.post('/MGProductInfo/MGProductHistoryInfo/getProductHistoryList', require('./postpay_true').getProductHistoryList); //postpay app.get('/v1/get_PaymentList/:accountId/:pageSize/:pageNumber/', require('./postpay_true').getPaymentList); //postpay app.get('/v1/get_BillingAddress/:ban', require('./postpay_true').getBillingAddress); //postpay app.post('/MCS/enquiry/subscriptioninfo/', require('./postpay_true').getDCBStatus); //postpay app.post('/AggregateBillingInfo/MGBalanceInfo/getBalanceList', require('./postpay_true').getBalanceList); //postpay app.post('/APIConnector/services/EnterpriseIntegration', express.text({type:"*/*"}), require('./postpay_true').sumCollectionAmount); //postpay app.post('/SBMWSREALCCP3G15/DoServiceFromXML', express.text({type:"*/*"}), require('./sbm').getCheckBalance_SBMWSREALCCP); app.post('/SBMWSREAL3G15/DoServiceFromXML', express.text({type:"*/*"}), require('./sbm').getCheckBalance_SBMWSREAL); app.post('/SBMWSDataIRPos/DoServiceFromXML', express.text({type:"*/*"}), require('./sbm').getCheckBalanceIR); app.post('/CCPGW_ServiceWeb/Services/QueryUserProfile', express.text({type:"*/*"}), require('./ccp').userProfile); app.post('/CCPGW_ServiceWeb/Services/QryBalanceList', express.text({type:"*/*"}), require('./ccp').balance); app.post('/CCPGW_ServiceWeb/Services/QueryCDR', express.text({type:"*/*"}), require('./ccp').queryCDR); app.get('/api/callback', require('./line').callback); app.post('/sendSMS', require('./sms').sendSMS); app.get('/api/random/leader', function (req, res) { const months = ["เกมส์", "โน๊ต setup", "โน๊ต วัศรุต", "แบงค์", "มอส", "ปิ๊ค", "เต้นพอไม่ต้องตื่น", "เปา", "นัท", "kik", "new", "ann","na", "boky", "eve", "miki", "pla", "sugar"]; // const months = [ "ann"]; let object={} for(var i=0; i<100; i++) { const random = Math.floor(Math.random() * months.length); // console.log(random, months[random]); if(object[months[random]]) { object[months[random]] = object[months[random]] + 1; } else { object[months[random]] = 1 } } console.log(object); res.send(object); }) app.get('/api/parallel/request', async function (req, res) { let dataList = ['001','002','003','004','005','006','007','008','009','010','011','012','013','014','015','016','017','018','019','020'] let response = await completelyReq(dataList) console.log('response to client', response) res.send(response) }) var parallelLimit = require('run-parallel-limit') async function completelyReq(dataList) { let limit = 10 let length = dataList.length > limit ? limit : dataList.length; let tempList = [] for(let i=0; i { reqFunc(dataList[i], ) }); // dataList.shift(); } return new Promise( resolve => { parallelLimit(tempList, 10, function (err, results) { if(err) {console.log(err); reject(err)}; console.log(results) resolve(results) }) }) // return await Promise.all(tempList); } function reqFunc(arg, cb) { // console.log(tempList) console.log('send req ', arg, new Date()) unirest .post('http://mockbin.com/request') .headers({'Accept': 'application/json', 'Content-Type': 'application/json'}) .send({ "parameter": 23, "foo": "bar", "seq": arg }) .then((response) => { // console.log(response.body.postData.text) // let delay = Math.floor(Math.random()*10000) console.log('recieve response ' , response.body.postData.text, new Date()) cb(null, response.body.postData.text) // setTimeout(function () { // cb(null, response.body.postData.text) // }, 100) }) } // function check(data, dataList, tempList) { // return new Promise(async (resolve, reject) => { // // console.log('tempList.length', tempList.length) // if(tempList.length == 20) { // // let allResponse = await Promise.all(tempList); // // console.log(allResponse) // resolve(tempList) // } else { // console.log(tempList) // tempList.push(reqFunc(dataList[0], dataList, tempList)) // dataList.shift(); // } // }) // } app.get('/linenoti', require('./line').lineNoti) var queue = require('queue') var q = queue({ results: [] }) app.get('/q1/:timeout', (req, res, next) => { q.push(function(cb) { setTimeout(function () { console.log('super slow job finished at', new Date()) cb(null, 'one ' + req.params.timeout) }, req.params.timeout) }) q.push(function(cb) { setTimeout(function () { console.log('second slow job finished at', new Date()) cb(null, 'one ' + req.params.timeout) }, req.params.timeout) }) q.start(function (err) { if (err) throw err console.log('all done:', q.results) }) res.send('ok1') }) app.get('/q2', (req, res, next) => { q.push(function(cb) { setTimeout(function () { console.log('slow job finished at', new Date()) cb(null, 'two') }, 5000) }) res.send('ok2') }) app.get('/q3', (req, res, next) => { q.push(function(cb) { setTimeout(function () { console.log('fastest job finished at', new Date()) cb(null, 'three') }, 1000) }) res.send('ok3') }) q.on('success', function (result, job) { console.log('job finished processing:', job) console.log('The result is:', result) }) // const snooze = ms => new Promise(resolve => setTimeout(resolve, ms)); // async function whileLoop() { // let i = 0 // while(i < 10) { // i = 0 // while (true) { // if (i < 10) { // // throw 'data exit' // i++ // await snooze(100) // console.log('continue', i) // continue; // } else { // await snooze(100) // console.log('while break', i) // break; // } // } // } // } // whileLoop() app.listen(port, () => console.log('app listening on port ' + port + '!')) //test