cgserver 7.10.2113 → 7.12.2113
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/src/Framework/AI/AiObject.ts +0 -12
- package/src/Framework/AI/Astar.ts +0 -157
- package/src/Framework/AI/BehaviorAI.ts +0 -382
- package/src/Framework/AI/Entity.ts +0 -37
- package/src/Framework/AI/Point.ts +0 -84
- package/src/Framework/AI/TriggerMgr.ts +0 -280
- package/src/Framework/Config/Config.ts +0 -61
- package/src/Framework/Config/FrameworkConfig.ts +0 -286
- package/src/Framework/Config/IServerConfig.ts +0 -28
- package/src/Framework/Config/_error_.ts +0 -32
- package/src/Framework/Core/Core.ts +0 -810
- package/src/Framework/Core/Timer.ts +0 -147
- package/src/Framework/Database/Decorator/AutoIncrement.ts +0 -9
- package/src/Framework/Database/Decorator/DBCache.ts +0 -74
- package/src/Framework/Database/Decorator/NotNull.ts +0 -9
- package/src/Framework/Database/Decorator/PrimaryKey.ts +0 -9
- package/src/Framework/Database/Decorator/Property.ts +0 -64
- package/src/Framework/Database/Decorator/Table.ts +0 -13
- package/src/Framework/Database/Decorator/Type.ts +0 -21
- package/src/Framework/Database/MSSqlManager.ts +0 -52
- package/src/Framework/Database/MongoBaseService.ts +0 -136
- package/src/Framework/Database/MongoManager.ts +0 -501
- package/src/Framework/Database/MysqlBaseService.ts +0 -345
- package/src/Framework/Database/MysqlManager.ts +0 -212
- package/src/Framework/Database/RedisManager.ts +0 -544
- package/src/Framework/Logic/CacheTool.ts +0 -85
- package/src/Framework/Logic/EventTool.ts +0 -31
- package/src/Framework/Logic/HttpTool.ts +0 -82
- package/src/Framework/Logic/Log.ts +0 -171
- package/src/Framework/Logic/SyncQueueTool.ts +0 -51
- package/src/Framework/Service/AccountService.ts +0 -508
- package/src/Framework/Service/MongoAccountService.ts +0 -456
- package/src/Framework/Service/MongoCacheService.ts +0 -48
- package/src/Framework/Service/MongoUserService.ts +0 -103
- package/src/Framework/Service/UserService.ts +0 -168
- package/src/Framework/Service/ini.ts +0 -33
- package/src/Framework/SocketServer/IClientWebSocket.ts +0 -50
- package/src/Framework/SocketServer/IRpc.ts +0 -12
- package/src/Framework/SocketServer/IRpcClientWebSocket.ts +0 -75
- package/src/Framework/SocketServer/IRpcServerWebSocket.ts +0 -76
- package/src/Framework/SocketServer/IServerWebSocket.ts +0 -88
- package/src/Framework/SocketServer/ISocketServer.ts +0 -243
- package/src/Framework/SocketServer/IWebSocket.ts +0 -243
- package/src/Framework/SocketServer/ProtoFilter/GoogleProtoFilter.ts +0 -68
- package/src/Framework/SocketServer/ProtoFilter/IProtoFilter.ts +0 -11
- package/src/Framework/SocketServer/ProtoFilter/JsonProtoFilter.ts +0 -34
- package/src/Framework/SocketServer/ProtoFilter/ProtoFactory.ts +0 -34
- package/src/Framework/ThirdParty/AlipayTool.ts +0 -224
- package/src/Framework/ThirdParty/Alisms.ts +0 -53
- package/src/Framework/ThirdParty/AppleTool.ts +0 -252
- package/src/Framework/ThirdParty/CgMq.ts +0 -153
- package/src/Framework/ThirdParty/EmailTool.ts +0 -37
- package/src/Framework/ThirdParty/OpenSocial.ts +0 -36
- package/src/Framework/ThirdParty/QQTool.ts +0 -124
- package/src/Framework/ThirdParty/QiniuTool.ts +0 -23
- package/src/Framework/ThirdParty/Rpc.ts +0 -75
- package/src/Framework/ThirdParty/WechatOATool.ts +0 -61
- package/src/Framework/ThirdParty/WechatTool.ts +0 -80
- package/src/Framework/WebServer/Controller/BaseController.ts +0 -140
- package/src/Framework/WebServer/Controller/BaseUserController.ts +0 -209
- package/src/Framework/WebServer/Controller/MongoBaseUserController.ts +0 -209
- package/src/Framework/WebServer/Decorator/AdminValidate.ts +0 -19
- package/src/Framework/WebServer/Decorator/AuthorityValidate.ts +0 -25
- package/src/Framework/WebServer/Decorator/CreatorValidate.ts +0 -19
- package/src/Framework/WebServer/Decorator/JsonAdminValidate.ts +0 -16
- package/src/Framework/WebServer/Decorator/JsonAuthorityValidate.d.ts +0 -2
- package/src/Framework/WebServer/Decorator/JsonAuthorityValidate.ts +0 -23
- package/src/Framework/WebServer/Decorator/JsonCreatorValidate.ts +0 -19
- package/src/Framework/WebServer/Decorator/SyncCall.ts +0 -20
- package/src/Framework/WebServer/Decorator/SyncCallServer.ts +0 -45
- package/src/Framework/WebServer/Engine/ControllerManager.ts +0 -134
- package/src/Framework/WebServer/Engine/Engine.ts +0 -186
- package/src/Framework/WebServer/Engine/RazorJs.ts +0 -720
- package/src/Framework/WebServer/Engine/Request.ts +0 -267
- package/src/Framework/WebServer/Engine/Response.ts +0 -123
- package/src/Framework/WebServer/IWebServer.ts +0 -61
- package/src/Framework/cgserver.ts +0 -112
- package/src/Framework/index.ts +0 -92
- package/src/test/test.ts +0 -12
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import * as nodeMailer from "nodemailer";
|
|
3
|
-
import { GServerCfg } from "../Config/IServerConfig";
|
|
4
|
-
import { GLog } from "../Logic/Log";
|
|
5
|
-
export let GEmailTool:EmailTool=null
|
|
6
|
-
class EmailTool
|
|
7
|
-
{
|
|
8
|
-
send(to:string,subject:string,html:string)
|
|
9
|
-
{
|
|
10
|
-
return new Promise((resolve,reject)=>
|
|
11
|
-
{
|
|
12
|
-
let transport = nodeMailer.createTransport({
|
|
13
|
-
host: GServerCfg.third_cfg.email.host,
|
|
14
|
-
port: GServerCfg.third_cfg.email.port,
|
|
15
|
-
secure: GServerCfg.third_cfg.email.secure,
|
|
16
|
-
auth:
|
|
17
|
-
{
|
|
18
|
-
user: GServerCfg.third_cfg.email.auth.user,
|
|
19
|
-
pass: GServerCfg.third_cfg.email.auth.pass
|
|
20
|
-
}
|
|
21
|
-
})
|
|
22
|
-
let mail =
|
|
23
|
-
{
|
|
24
|
-
from: GServerCfg.third_cfg.email.from,
|
|
25
|
-
to: to,
|
|
26
|
-
subject: subject,
|
|
27
|
-
html: html
|
|
28
|
-
}
|
|
29
|
-
transport.sendMail(mail,(_err,msg)=>
|
|
30
|
-
{
|
|
31
|
-
GLog.error(JSON.stringify(_err))
|
|
32
|
-
resolve(_err)
|
|
33
|
-
})
|
|
34
|
-
})
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
GEmailTool = new EmailTool()
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { GServerCfg } from "../Config/IServerConfig";
|
|
2
|
-
import { GHttpTool } from "../Logic/HttpTool";
|
|
3
|
-
|
|
4
|
-
export let GOpenSocial:OpenSocial=null
|
|
5
|
-
class OpenSocial
|
|
6
|
-
{
|
|
7
|
-
protected _getNewMsg():any
|
|
8
|
-
{
|
|
9
|
-
return {
|
|
10
|
-
app_id:GServerCfg.third_cfg.open_social.app_id,
|
|
11
|
-
app_secret:GServerCfg.third_cfg.open_social.app_secret
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
async getUser(unionid:string,openid:string)
|
|
15
|
-
{
|
|
16
|
-
let msg=
|
|
17
|
-
{
|
|
18
|
-
unionid:unionid,
|
|
19
|
-
openid:openid
|
|
20
|
-
}
|
|
21
|
-
let rs=await GHttpTool.post({url:GServerCfg.third_cfg.open_social.user_url,json:msg})
|
|
22
|
-
return rs.body
|
|
23
|
-
}
|
|
24
|
-
async updatePwd(unionid:string,openid:string,new_pwd:string)
|
|
25
|
-
{
|
|
26
|
-
let msg=
|
|
27
|
-
{
|
|
28
|
-
unionid:unionid,
|
|
29
|
-
openid:openid,
|
|
30
|
-
password:new_pwd
|
|
31
|
-
}
|
|
32
|
-
let jsonData = await GHttpTool.post({url:GServerCfg.third_cfg.open_social.update_pwd_url,json:msg})
|
|
33
|
-
return jsonData.body||jsonData.error
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
GOpenSocial = new OpenSocial()
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import * as _ from "underscore";
|
|
2
|
-
import * as URLEncode from "urlencode";
|
|
3
|
-
import { GServerCfg } from "../Config/IServerConfig";
|
|
4
|
-
import { GHttpTool } from "../Logic/HttpTool";
|
|
5
|
-
import { GLog } from "../Logic/Log";
|
|
6
|
-
|
|
7
|
-
export class QQUserInfo
|
|
8
|
-
{
|
|
9
|
-
ret=0
|
|
10
|
-
msg=""
|
|
11
|
-
is_lost=0
|
|
12
|
-
nickname=""
|
|
13
|
-
gender=""//"男"
|
|
14
|
-
province=""//"四川"
|
|
15
|
-
city=""//"成都"
|
|
16
|
-
year=""//"1988"
|
|
17
|
-
constellation=""
|
|
18
|
-
figureurl=""//http://qzapp.qlogo.cn/qzapp/101775753/B5EA2E2138715A07DE91B5BACBA0CCE5/30
|
|
19
|
-
figureurl_1=""//http://qzapp.qlogo.cn/qzapp/101775753/B5EA2E2138715A07DE91B5BACBA0CCE5/50
|
|
20
|
-
figureurl_2=""//http://qzapp.qlogo.cn/qzapp/101775753/B5EA2E2138715A07DE91B5BACBA0CCE5/100
|
|
21
|
-
figureurl_qq_1=""//http://thirdqq.qlogo.cn/g?b=oidb&k=jgOibQ4eLHDBT57oAib1DrOg&s=40&t=1556419177
|
|
22
|
-
figureurl_qq_2=""//http://thirdqq.qlogo.cn/g?b=oidb&k=jgOibQ4eLHDBT57oAib1DrOg&s=100&t=1556419177
|
|
23
|
-
figureurl_qq=""//http://thirdqq.qlogo.cn/g?b=oidb&k=jgOibQ4eLHDBT57oAib1DrOg&s=140&t=1556419177
|
|
24
|
-
figureurl_type=""//"1"
|
|
25
|
-
is_yellow_vip:""//"0"
|
|
26
|
-
vip=""//"0"
|
|
27
|
-
yellow_vip_level=""//"0"
|
|
28
|
-
level=""//"0"
|
|
29
|
-
is_yellow_year_vip=""//"0"
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export let GQQTool:QQTool=null
|
|
33
|
-
export class QQTool
|
|
34
|
-
{
|
|
35
|
-
/**
|
|
36
|
-
* 获取Authorization Code
|
|
37
|
-
* @param scope 可选 请求用户授权时向用户显示的可进行授权的列表。
|
|
38
|
-
可填写的值是API文档中列出的接口,以及一些动作型的授权(目前仅有:do_like),如果要填写多个接口名称,请用逗号隔开。
|
|
39
|
-
例如:scope=get_user_info,list_album,upload_pic,do_like
|
|
40
|
-
不传则默认请求对接口get_user_info进行授权。
|
|
41
|
-
建议控制授权项的数量,只传入必要的接口名称,因为授权项越多,用户越可能拒绝进行任何授权。
|
|
42
|
-
* @param display 仅PC网站接入时使用。
|
|
43
|
-
用于展示的样式。不传则默认展示为PC下的样式。
|
|
44
|
-
如果传入“mobile”,则展示为mobile端下的样式。
|
|
45
|
-
*/
|
|
46
|
-
getAuthCodeUrl(scope?:string,display?:string)
|
|
47
|
-
{
|
|
48
|
-
//必须 成功授权后的回调地址,必须是注册appid时填写的主域名下的地址,建议设置为网站首页或网站的用户中心
|
|
49
|
-
let redirect_uri = URLEncode.encode(GServerCfg.third_cfg.qq.redirect_uri)
|
|
50
|
-
//必须 申请QQ登录成功后,分配给应用的appid。
|
|
51
|
-
let client_id = GServerCfg.third_cfg.qq.app_id
|
|
52
|
-
//必须 授权类型,此值固定为“code”。
|
|
53
|
-
let response_type="code"
|
|
54
|
-
//必须 client端的状态值。用于第三方应用防止CSRF攻击,成功授权后回调时会原样带回。请务必严格按照流程检查用户与state参数状态的绑定。
|
|
55
|
-
let state=_.random(1000000,9999999)
|
|
56
|
-
//PC网站
|
|
57
|
-
let url="https://graph.qq.com/oauth2.0/authorize?redirect_uri="+redirect_uri+"&response_type="+response_type+"&state="+state+"&client_id="+client_id
|
|
58
|
-
if(scope)
|
|
59
|
-
{
|
|
60
|
-
url+="&scope="+scope
|
|
61
|
-
}
|
|
62
|
-
if(display)
|
|
63
|
-
{
|
|
64
|
-
url+="&display="+display
|
|
65
|
-
}
|
|
66
|
-
return url
|
|
67
|
-
}
|
|
68
|
-
async getAccessToken(auth_code:string):Promise<string>
|
|
69
|
-
{
|
|
70
|
-
if(!auth_code)
|
|
71
|
-
{
|
|
72
|
-
return null
|
|
73
|
-
}
|
|
74
|
-
//必须 授权类型,在本步骤中,此值为“authorization_code”。
|
|
75
|
-
let grant_type = "authorization_code"
|
|
76
|
-
//必须 申请QQ登录成功后,分配给应用的appid。
|
|
77
|
-
let client_id = GServerCfg.third_cfg.qq.app_id
|
|
78
|
-
//必须 申请QQ登录成功后,分配给网站的appkey。
|
|
79
|
-
let client_secret = GServerCfg.third_cfg.qq.app_key
|
|
80
|
-
//必须 成功授权后的回调地址,必须是注册appid时填写的主域名下的地址,建议设置为网站首页或网站的用户中心
|
|
81
|
-
let redirect_uri = URLEncode.encode(GServerCfg.third_cfg.qq.redirect_uri)
|
|
82
|
-
|
|
83
|
-
let url="https://graph.qq.com/oauth2.0/token?code="+auth_code+"&grant_type="+grant_type+"&client_id="+client_id+"&client_secret="+client_secret+"&redirect_uri="+redirect_uri
|
|
84
|
-
let rs = await GHttpTool.get(url)
|
|
85
|
-
if(rs.body&&rs.body.access_token)
|
|
86
|
-
{
|
|
87
|
-
return rs.body.access_token
|
|
88
|
-
}
|
|
89
|
-
else
|
|
90
|
-
{
|
|
91
|
-
GLog.error(rs.body)
|
|
92
|
-
}
|
|
93
|
-
return null
|
|
94
|
-
}
|
|
95
|
-
async getOpenId(access_token:string):Promise<string>
|
|
96
|
-
{
|
|
97
|
-
let url="https://graph.qq.com/oauth2.0/me?access_token="+access_token
|
|
98
|
-
let rs = await GHttpTool.get(url)
|
|
99
|
-
let body = rs.response?rs.response.body:null
|
|
100
|
-
if(body)
|
|
101
|
-
{
|
|
102
|
-
body=body.replace("callback( ","")
|
|
103
|
-
body=body.replace(" );\n","")
|
|
104
|
-
try{body=JSON.parse(body)}catch(e){}
|
|
105
|
-
if(!body.openid)
|
|
106
|
-
{
|
|
107
|
-
GLog.error(rs.response.body)
|
|
108
|
-
}
|
|
109
|
-
return body.openid
|
|
110
|
-
}
|
|
111
|
-
return null
|
|
112
|
-
}
|
|
113
|
-
async getUserInfo(access_token:string,openid:string):Promise<QQUserInfo>
|
|
114
|
-
{
|
|
115
|
-
let url = "https://graph.qq.com/user/get_user_info?access_token="+access_token+"&oauth_consumer_key="+GServerCfg.third_cfg.qq.app_id+"&openid="+openid
|
|
116
|
-
let rs = await GHttpTool.get(url)
|
|
117
|
-
if(rs.body)
|
|
118
|
-
{
|
|
119
|
-
return rs.body
|
|
120
|
-
}
|
|
121
|
-
return null
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
GQQTool=new QQTool()
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import * as qiniu from "qiniu";
|
|
2
|
-
import { GServerCfg } from "../Config/IServerConfig";
|
|
3
|
-
|
|
4
|
-
export let GQiniuTool:QiniuTool = null
|
|
5
|
-
class QiniuTool
|
|
6
|
-
{
|
|
7
|
-
get host()
|
|
8
|
-
{
|
|
9
|
-
return GServerCfg.third_cfg.qiniu.host
|
|
10
|
-
}
|
|
11
|
-
getUploadToken(filename)
|
|
12
|
-
{
|
|
13
|
-
let mac = new qiniu.auth.digest.Mac(GServerCfg.third_cfg.qiniu.accessKey, GServerCfg.third_cfg.qiniu.secretKey)
|
|
14
|
-
let options =
|
|
15
|
-
{
|
|
16
|
-
scope: GServerCfg.third_cfg.qiniu.bucket+":"+filename,
|
|
17
|
-
}
|
|
18
|
-
let putPolicy = new qiniu.rs.PutPolicy(options)
|
|
19
|
-
let uploadToken = putPolicy.uploadToken(mac)
|
|
20
|
-
return uploadToken
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
GQiniuTool = new QiniuTool()
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { core } from "../Core/Core"
|
|
2
|
-
import { GLog } from "../Logic/Log"
|
|
3
|
-
import { CgMq, CgMqConfig, CgMqRetMsg } from "./CgMq"
|
|
4
|
-
|
|
5
|
-
class Remote
|
|
6
|
-
{
|
|
7
|
-
protected _retmsg:CgMqRetMsg=null
|
|
8
|
-
get retMsg()
|
|
9
|
-
{
|
|
10
|
-
return this._retmsg
|
|
11
|
-
}
|
|
12
|
-
protected _cgmq:CgMq=null
|
|
13
|
-
get cgmq()
|
|
14
|
-
{
|
|
15
|
-
return this._cgmq
|
|
16
|
-
}
|
|
17
|
-
protected _to_identity=""
|
|
18
|
-
constructor(identity:string,cgmq:CgMq)
|
|
19
|
-
{
|
|
20
|
-
this._to_identity=identity
|
|
21
|
-
this._cgmq=cgmq
|
|
22
|
-
}
|
|
23
|
-
async call(func_name:string,...args):Promise<any|any[]>
|
|
24
|
-
{
|
|
25
|
-
this._retmsg = await this._cgmq.callRemote(this._to_identity,func_name,...args)
|
|
26
|
-
if(!this._retmsg.data)
|
|
27
|
-
{
|
|
28
|
-
return
|
|
29
|
-
}
|
|
30
|
-
let datas:any[]=this._retmsg.data
|
|
31
|
-
if(datas.length==1)
|
|
32
|
-
{
|
|
33
|
-
return datas[0]
|
|
34
|
-
}
|
|
35
|
-
return datas
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
export class RpcConfig extends CgMqConfig
|
|
39
|
-
{
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
export class Rpc
|
|
43
|
-
{
|
|
44
|
-
protected _cgmq:CgMq=null
|
|
45
|
-
get cgmq()
|
|
46
|
-
{
|
|
47
|
-
return this._cgmq
|
|
48
|
-
}
|
|
49
|
-
async init(cfg:RpcConfig)
|
|
50
|
-
{
|
|
51
|
-
this._cgmq=new CgMq()
|
|
52
|
-
let ret = await this._cgmq.init(cfg,this.onMsg.bind(this))
|
|
53
|
-
return ret
|
|
54
|
-
}
|
|
55
|
-
getRemote(identity:string)
|
|
56
|
-
{
|
|
57
|
-
return new Remote(identity,this._cgmq)
|
|
58
|
-
}
|
|
59
|
-
async onMsg(msg:CgMqRetMsg)
|
|
60
|
-
{
|
|
61
|
-
if(!msg||!msg.data||!msg.data.cmd)
|
|
62
|
-
{
|
|
63
|
-
return
|
|
64
|
-
}
|
|
65
|
-
let cmd:string = msg.data.cmd
|
|
66
|
-
let func = this[cmd]
|
|
67
|
-
if(!func)
|
|
68
|
-
{
|
|
69
|
-
GLog.error({des:"rpc no cmd",msg})
|
|
70
|
-
return
|
|
71
|
-
}
|
|
72
|
-
let data = await core.safeCall(func,this,...msg.data?.args,msg)
|
|
73
|
-
return data
|
|
74
|
-
}
|
|
75
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
//OA=offical account公众号
|
|
2
|
-
export class WechatOAMsg
|
|
3
|
-
{
|
|
4
|
-
// <xml>
|
|
5
|
-
// <ToUserName><![CDATA[toUser]]></ToUserName>
|
|
6
|
-
// <FromUserName><![CDATA[fromUser]]></FromUserName>
|
|
7
|
-
// <CreateTime>1348831860</CreateTime>
|
|
8
|
-
// <MsgType><![CDATA[text]]></MsgType>
|
|
9
|
-
// <Content><![CDATA[this is a test]]></Content>
|
|
10
|
-
// <MsgId>1234567890123456</MsgId>
|
|
11
|
-
// </xml>
|
|
12
|
-
toUserName=""
|
|
13
|
-
fromUserName=""//其实是一个userid
|
|
14
|
-
createTime=-1
|
|
15
|
-
msgType=""//text文本
|
|
16
|
-
content=""
|
|
17
|
-
msgId=-1//只有收到消息才会有
|
|
18
|
-
}
|
|
19
|
-
export let GWechatOATool:WechatOATool=null
|
|
20
|
-
export class WechatOATool
|
|
21
|
-
{
|
|
22
|
-
convertMsg(xmlStr:string)
|
|
23
|
-
{
|
|
24
|
-
if(!xmlStr)
|
|
25
|
-
{
|
|
26
|
-
return null
|
|
27
|
-
}
|
|
28
|
-
let msg = new WechatOAMsg()
|
|
29
|
-
let pre = "<ToUserName><![CDATA["
|
|
30
|
-
xmlStr=xmlStr.substr(xmlStr.indexOf(pre)+pre.length)
|
|
31
|
-
msg.toUserName=xmlStr.substr(0,xmlStr.indexOf("]"))
|
|
32
|
-
pre = "<FromUserName><![CDATA["
|
|
33
|
-
xmlStr=xmlStr.substr(xmlStr.indexOf(pre)+pre.length)
|
|
34
|
-
msg.fromUserName=xmlStr.substr(0,xmlStr.indexOf("]"))
|
|
35
|
-
pre = "<CreateTime>"
|
|
36
|
-
xmlStr=xmlStr.substr(xmlStr.indexOf(pre)+pre.length)
|
|
37
|
-
msg.createTime=parseInt(xmlStr.substr(0,xmlStr.indexOf("<")))
|
|
38
|
-
pre = "<MsgType><![CDATA["
|
|
39
|
-
xmlStr=xmlStr.substr(xmlStr.indexOf(pre)+pre.length)
|
|
40
|
-
msg.msgType=xmlStr.substr(0,xmlStr.indexOf("]"))
|
|
41
|
-
pre = "<Content><![CDATA["
|
|
42
|
-
xmlStr=xmlStr.substr(xmlStr.indexOf(pre)+pre.length)
|
|
43
|
-
msg.content=xmlStr.substr(0,xmlStr.indexOf("]"))
|
|
44
|
-
pre = "<MsgId>"
|
|
45
|
-
xmlStr=xmlStr.substr(xmlStr.indexOf(pre)+pre.length)
|
|
46
|
-
msg.msgId=parseInt(xmlStr.substr(0,xmlStr.indexOf("<")))
|
|
47
|
-
return msg
|
|
48
|
-
}
|
|
49
|
-
toReplyXmlStr(msg:WechatOAMsg)
|
|
50
|
-
{
|
|
51
|
-
let xmlStr="<xml>"
|
|
52
|
-
xmlStr+="<ToUserName><![CDATA["+msg.toUserName+"]]></ToUserName>"
|
|
53
|
-
xmlStr+="<FromUserName><![CDATA["+msg.fromUserName+"]]></FromUserName>"
|
|
54
|
-
xmlStr+="<CreateTime>"+msg.createTime+"</CreateTime>"
|
|
55
|
-
xmlStr+="<MsgType><![CDATA["+msg.msgType+"]]></MsgType>"
|
|
56
|
-
xmlStr+="<Content><![CDATA["+msg.content+"]]></Content>"
|
|
57
|
-
xmlStr+="</xml>"
|
|
58
|
-
return xmlStr
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
GWechatOATool=new WechatOATool()
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import * as _ from "underscore";
|
|
2
|
-
import * as URLEncode from "urlencode";
|
|
3
|
-
import { GServerCfg } from "../Config/IServerConfig";
|
|
4
|
-
import { GHttpTool } from "../Logic/HttpTool";
|
|
5
|
-
import { GLog } from "../Logic/Log";
|
|
6
|
-
|
|
7
|
-
export class WechatUserInfo
|
|
8
|
-
{
|
|
9
|
-
openid="OPENID"
|
|
10
|
-
nickname="NICKNAME"
|
|
11
|
-
sex=1
|
|
12
|
-
province="PROVINCE"
|
|
13
|
-
city="CITY"
|
|
14
|
-
country="COUNTRY"
|
|
15
|
-
headimgurl= "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0"
|
|
16
|
-
privilege=[
|
|
17
|
-
"PRIVILEGE1",
|
|
18
|
-
"PRIVILEGE2"
|
|
19
|
-
]
|
|
20
|
-
unionid="o6_bmasdasdsad6_2sgVt7hMZOPfL"
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export let GWechatTool:WechatTool=null
|
|
24
|
-
export class WechatTool
|
|
25
|
-
{
|
|
26
|
-
/**
|
|
27
|
-
* 获取获取code的url
|
|
28
|
-
*/
|
|
29
|
-
getAuthCodeUrl()
|
|
30
|
-
{
|
|
31
|
-
let appid="wx80f0f10fe1304e9d"
|
|
32
|
-
let url = "https://open.weixin.qq.com/connect/qrconnect?appid="+ GServerCfg.third_cfg.wechat.app_id
|
|
33
|
-
url+="&redirect_uri="+URLEncode.encode(GServerCfg.third_cfg.wechat.redirect_uri)
|
|
34
|
-
url+="&response_type=code&scope=snsapi_login"
|
|
35
|
-
//必须 client端的状态值。用于第三方应用防止CSRF攻击,成功授权后回调时会原样带回。请务必严格按照流程检查用户与state参数状态的绑定。
|
|
36
|
-
let state=_.random(1000000,9999999)
|
|
37
|
-
url+="&state="+state
|
|
38
|
-
return url
|
|
39
|
-
}
|
|
40
|
-
async getAccessInfo(auth_code:string):Promise<any>
|
|
41
|
-
{
|
|
42
|
-
if(!auth_code)
|
|
43
|
-
{
|
|
44
|
-
return null
|
|
45
|
-
}
|
|
46
|
-
let url="https://api.weixin.qq.com/sns/oauth2/access_token?appid="+GServerCfg.third_cfg.wechat.app_id+"&secret="+GServerCfg.third_cfg.wechat.app_key+"&code="+auth_code+"&grant_type=authorization_code"
|
|
47
|
-
let rs = await GHttpTool.get(url)
|
|
48
|
-
/*
|
|
49
|
-
{
|
|
50
|
-
"access_token":"ACCESS_TOKEN",
|
|
51
|
-
"expires_in":7200,
|
|
52
|
-
"refresh_token":"REFRESH_TOKEN",
|
|
53
|
-
"openid":"OPENID",
|
|
54
|
-
"scope":"SCOPE",
|
|
55
|
-
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
|
|
56
|
-
}
|
|
57
|
-
{"errcode":40029,"errmsg":"invalid code"}
|
|
58
|
-
*/
|
|
59
|
-
if(rs.body&&rs.body.access_token)
|
|
60
|
-
{
|
|
61
|
-
return rs.body
|
|
62
|
-
}
|
|
63
|
-
else
|
|
64
|
-
{
|
|
65
|
-
GLog.error(rs.body)
|
|
66
|
-
}
|
|
67
|
-
return null
|
|
68
|
-
}
|
|
69
|
-
async getUserInfo(access_token:string,openid:string):Promise<WechatUserInfo>
|
|
70
|
-
{
|
|
71
|
-
let url = "https://api.weixin.qq.com/sns/userinfo?access_token="+access_token+"&openid="+openid
|
|
72
|
-
let rs = await GHttpTool.get(url)
|
|
73
|
-
if(rs.body)
|
|
74
|
-
{
|
|
75
|
-
return rs.body
|
|
76
|
-
}
|
|
77
|
-
return null
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
GWechatTool=new WechatTool()
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
import { Engine } from './../Engine/Engine';
|
|
2
|
-
import { Request } from '../Engine/Request';
|
|
3
|
-
import { Response } from '../Engine/Response';
|
|
4
|
-
|
|
5
|
-
export class BaseController
|
|
6
|
-
{
|
|
7
|
-
protected _request:Request=null
|
|
8
|
-
get request()
|
|
9
|
-
{
|
|
10
|
-
return this._request
|
|
11
|
-
}
|
|
12
|
-
protected _response:Response=null
|
|
13
|
-
get response()
|
|
14
|
-
{
|
|
15
|
-
return this._response
|
|
16
|
-
}
|
|
17
|
-
//模块名称
|
|
18
|
-
protected _module:string=""
|
|
19
|
-
protected _ctr_name:string=""
|
|
20
|
-
get ctrName()
|
|
21
|
-
{
|
|
22
|
-
return this._ctr_name
|
|
23
|
-
}
|
|
24
|
-
protected _engine:Engine=null
|
|
25
|
-
get postData()
|
|
26
|
-
{
|
|
27
|
-
if(!this._request)
|
|
28
|
-
{
|
|
29
|
-
return <any>{}
|
|
30
|
-
}
|
|
31
|
-
return this._request.postData||<any>{}
|
|
32
|
-
}
|
|
33
|
-
get paramData()
|
|
34
|
-
{
|
|
35
|
-
if(!this._request)
|
|
36
|
-
{
|
|
37
|
-
return <any>{}
|
|
38
|
-
}
|
|
39
|
-
return this._request.params||<any>{}
|
|
40
|
-
}
|
|
41
|
-
constructor(req:Request, res:Response,engine:Engine)
|
|
42
|
-
{
|
|
43
|
-
this._engine = engine
|
|
44
|
-
this._request = req
|
|
45
|
-
this._response = res
|
|
46
|
-
//静态控制器,传过来全是空
|
|
47
|
-
if(this._request)
|
|
48
|
-
{
|
|
49
|
-
this._request.debugInfo()
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
async init()
|
|
53
|
-
{
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* 方便static ctr使用
|
|
58
|
-
* @param req
|
|
59
|
-
* @param res
|
|
60
|
-
* @param engine
|
|
61
|
-
*/
|
|
62
|
-
initStatic(req:Request, res:Response,engine:Engine)
|
|
63
|
-
{
|
|
64
|
-
this._engine = engine
|
|
65
|
-
this._request = req
|
|
66
|
-
this._response = res
|
|
67
|
-
this._request.debugInfo()
|
|
68
|
-
}
|
|
69
|
-
//填充每个页面需要的通用数据
|
|
70
|
-
protected _init_data(model?)
|
|
71
|
-
{
|
|
72
|
-
model = model||{}
|
|
73
|
-
model.webName = this._engine.cfg.web_name
|
|
74
|
-
return {model}
|
|
75
|
-
}
|
|
76
|
-
showJson(model?)
|
|
77
|
-
{
|
|
78
|
-
this._response.renderJson(model,this._request.headers.origin)
|
|
79
|
-
}
|
|
80
|
-
show(model?)
|
|
81
|
-
{
|
|
82
|
-
let html = this._engine.getRenderHtml(this._request, this._response, this._init_data(model))
|
|
83
|
-
this._response.renderHtml(html)
|
|
84
|
-
}
|
|
85
|
-
showText(text,noMeta?:boolean)
|
|
86
|
-
{
|
|
87
|
-
if(!noMeta)
|
|
88
|
-
{
|
|
89
|
-
text="<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />"+text
|
|
90
|
-
}
|
|
91
|
-
this._response.renderHtml(text)
|
|
92
|
-
}
|
|
93
|
-
redirect(module?:string,controller?:string, action?:string,params?)
|
|
94
|
-
{
|
|
95
|
-
module = module || this._module
|
|
96
|
-
controller = controller || this._ctr_name
|
|
97
|
-
let url = this.parseFullUrl(module,controller, action)
|
|
98
|
-
params=params||{}
|
|
99
|
-
let str_p=""
|
|
100
|
-
for(let key in params)
|
|
101
|
-
{
|
|
102
|
-
str_p+="&"+key+"="+params[key]
|
|
103
|
-
}
|
|
104
|
-
if(str_p.length>0)
|
|
105
|
-
{
|
|
106
|
-
str_p="?"+str_p.substring(1)
|
|
107
|
-
}
|
|
108
|
-
url+=str_p
|
|
109
|
-
this._response.redirect(url)
|
|
110
|
-
}
|
|
111
|
-
parseFullUrl(module:string,controller:string, action:string)
|
|
112
|
-
{
|
|
113
|
-
if (typeof action === "undefined" || !action)
|
|
114
|
-
{
|
|
115
|
-
action = "index"
|
|
116
|
-
if(this._engine.cfg.routs.defaults.action==action)
|
|
117
|
-
{
|
|
118
|
-
action=null
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
let url = ""
|
|
122
|
-
if(this._engine.cfg.routs.onlyModule)
|
|
123
|
-
{
|
|
124
|
-
url = this._request.root + "/" + controller
|
|
125
|
-
}
|
|
126
|
-
else
|
|
127
|
-
{
|
|
128
|
-
url = this._request.root + "/" + module+ "/" + controller
|
|
129
|
-
}
|
|
130
|
-
if(action)
|
|
131
|
-
{
|
|
132
|
-
url+="/"+action
|
|
133
|
-
}
|
|
134
|
-
return url
|
|
135
|
-
}
|
|
136
|
-
get remoteHost()
|
|
137
|
-
{
|
|
138
|
-
return this._request.remoteHost
|
|
139
|
-
}
|
|
140
|
-
}
|