var http = require('http'); var zlib = require('zlib'); var events = require('events'); var util = require('util'); var TalkingData = function() { this.emitter = new events.EventEmitter(this); } TalkingData.prototype.send = function( appID, // String, 是您在TalkingGame中创建游戏时获得的AppID,用来唯一标识您的游戏。 OS, // String, 玩家此次充值时所用的设备系统平台,只支持格式要求限定的字符串。(ios, android, h5) accountID, // String, 玩家的账户ID(与客户端调用SDK的setAccount需传入玩家的accountId类似。) orderID, // String, 订单ID,唯一标识一次交易。 currencyAmount, // Double, 充值金额; currencyType, // String, 充值货币类型(人民币CNY;美元USD;新台币TWD); virtualCurrencyAmount, // Double, 充值获得的虚拟币额度。 chargeTime, // Long, 玩家充值发生的时间。 paymentType, // String, 支付方式(如:支付宝、苹果iap、银联支付、爱贝支付聚合等)。 gameServer){ // String, 玩家充值的区服。 var options = { method: "POST", host: "api.talkinggame.com", port: 80, encoding : null, path: "/api/charge/"+appID, headers: { 'Accept-Encoding': 'gzip' } }; var data = { 'msgID': orderID, 'status': "success", 'OS': OS, 'accountID': accountID, 'orderID': orderID, 'currencyAmount': currencyAmount, 'currencyType': currencyType, 'virtualCurrencyAmount': virtualCurrencyAmount, 'chargeTime': chargeTime, 'paymentType': paymentType, 'gameServer': gameServer, 'iapID': null, 'partner': null, 'gameVersion': null, 'level': null, 'mission': null, } var emitter = this.emitter zlib.gzip(JSON.stringify([data]), function (err, buffer) { var req = http.request(options, function(res) { res.on('data', function (body) { // ... do stuff with returned data zlib.gunzip(body, function(err, dezipped) { if (err == null) { var str = dezipped.toString('utf-8'); console.log(str) var obj = JSON.parse(str) if (obj.code == 100) { emitter.emit('end', obj.dataStatus); return } // Make Error object. var code = obj.code if (code == 101) { err = new Error("TalkingData: 发送数据的IP未被允许(101)");} else if (code == 102) { err = new Error("TalkingData: 发送数据的IP未被允许(102)"); } else if (code == 103) { err = new Error("TalkingData: 数据不是json格式(103)"); } else if (code == 104) { err = new Error("TalkingData: 数据没有经过gzip压缩,解包失败(104)"); } else if (code == 105) { err = new Error("TalkingData: 服务器内部错误(105)"); } else if (code == 106) { err = new Error("TalkingData: 数据包中数量条数超过1000条限制(106)"); } else { err = new Error("TalkingData: 未知错误(" + obj.code + ")") } } // Error response emitter.emit('error', err) }); }); }).on('error', function(err){ // Request error emitter.emit('error', err) }); // send compressed data req.write(buffer); req.end(); }); return this } TalkingData.prototype.on = function(eventName, callback) { this.emitter.on(eventName, callback); return this } util.inherits(TalkingData, events.EventEmitter); //继承 module.exports = TalkingData