ASP 快速接口调试 API 文档

* 这只是一个 API 演示。应用示例 | CMS 演示 | 源码下载
Hello: 第一个接口测试
@form { }
[检视源码]
function() {
	if(!me().isLogin) return { err: "需要登录" };
	return { msg: "Hello " + me().nick };
}
TestLogin: 模拟登录
@form { nick }
[检视源码]
function() {
	var user = form();
	if(!user.nick) return { err: "请输入昵称" };
	me().bind(user);
	return { msg: user.nick + " 登录成功" };
}
Logoff: 注销登录状态
@form { }
[检视源码]
function() {
	me().lose();
	return { msg: "注销成功" };
}
JsonParse: 测试 JSON 解析
@form { json }
例如:{ "users": [ { "nick": "Guest" } ], "count": 1 }
[检视源码]
function() {
	var rs = { msg: "解析结果:" };
	rs.json = fromjson(form().json);
	return rs;
}
WriteMessage: 发表留言
@form { nick, msg }
@return { msg, data, newid }
此为写数据库演示,实际应用时请复制一次数据,以保证提交的字段名称合法。
[检视源码]
function() {
	if(!form().nick) return { err: "请输入您的昵称" };
	if(!form().msg) return { err: "请输入您的留言" };
	db().insert("message", form());
	return { newid: db().scalar("select @@identity"), data: form(), msg: "留言成功" };
}
MessageList: 留言分页显示
@form { [key], [size], [page] }
@return { rows, pager }
* key 为可选搜索关键字
[检视源码]
function() {
	var where = "1=1", par = new Array;
	var key = form("key");
	if(key) { where += " and charindex(?, msg)>0"; par.push(key); }
	var rows = db().table("message").where(where).
	page("id desc", form("limit") || 3, form("page"), par).
	query();
	return { rows: rows, pager: db().pager, cmd: db().lastSql };
}
DbTest: 更多数据库操作用法
@form { }
[检视源码]
function() {
	var cmd = new Array;	// 存储 SQL 命令执行记录
	// 创建测试表
	var tblName = "Test_" + Math.random().toString().slice(-4);
	db().create(tblName, [
	[ "id int", null, true ],	// 字段类型,默认值,是否主键+自动编号
	"nick nvarchar(32)", [ "addtime datetime", "getdate()" ]
	]);
	cmd.push(db().lastSql);
	// 插入两条数据
	db().insert(tblName, [ { nick: "Hello" }, { nick: "World" } ]);
	cmd.push(db().lastSql);
	// 查询所有数据[ query: 所有记录数组,fetch: 取第一行数据,scalar: 取第一行第一列值 ]
	var rows = db().query("select * from " + tblName + " where id>@id", { id: 0 });
	cmd.push(db().lastSql);
	// 更新 id=2 的数据
	db().update(tblName, { nick: "Test" }, { id: 2 });
	cmd.push(db().lastSql);
	// 删掉一条 id=1 的数据
	db().query("delete from " + tblName + " where id=?", [ 1 ]);
	cmd.push(db().lastSql);
	// 更高级一些的用法【假设需要根据某ID 统计数据,分页之后,再关联查询相关数据】
	var total = db().table(tblName).select("id, count(0) as cnt").groupby("id").where("id>@id").
	astable("a").page("cnt desc", 15, 1, { id: 0 }).astable("a").	// 统计需要先 astable 才能分页,分页后astable 确保只有15条数据需要关联其他表内容
	join(tblName + " b on b.id=a.id").select("b.*, a.cnt").query();	// page 方法里面传了参数(第四个参数)后,后面可以免参数(如果参数没有变动)
	cmd.push(db().lastSql);
	// 删除测试数据表
	db().query("drop table " + tblName);
	cmd.push(db().lastSql);
	return { rows: rows, cmd: cmd, total: { rows: total, pager: db().pager }, dur: new Date - sys.sTime };
}
Upload: 文件上传
@form { img }
* 文件上传需要 new FormData 格式的请求,不可直接通过本页面测试
[检视源码]
function() {
	var up = lib("/AspLib/lib/FyUpload.sct");
	up.Filter = "jpg|png|gif|jpeg";
	up.MaxSize = 5 * 1024 * 1024;	// 最高允许 5Mb
	Server.ScriptTimeout = 999;
	up.Charset = "UTF-8"; up.ReadForm(2e5);
	var file = up.Form("img");
	if(!file || !file.SourceName) return { err: "未上传文件" };
	up.SaveFile("Upload"); up.Dispose();
	if(file.Message) return { err: file.Message };
	return { path: "Upload/" + file.FileName };
}
FileOpera: 文件读写操作
@form { text }
[检视源码]
function() {
	var fileName = "test.txt";
	var file = lib("/AspLib/lib/File.sct");
	// file.charset = "GBK";	// 默认 UTF-8
	var str = form("text") || (file + "");
	file.writeText(fileName, str);
	return { msg: file.readText(fileName) };
}
CacheTest: JS对象缓存测试
@form { }
@return { counter, time }
每隔 7 秒自动更新一次缓存数据
使用 sys.ns 是为了避免不同项目之间的命名冲突
[检视源码]
function() {
	var rs = cc(sys.ns + "CacheTest", function() {
	var data = this.value || new Object;
	data.time = sys.sTime.getVarDate();
	data.counter = -~data.counter;
	return data;
	}, 7);
	return { counter: rs.counter, time: rs.time };
}
MD5: MD5 加密
@form { text }
[检视源码]
function() { return { result: md5(form("text") || "a"), text: form().text }; }
WxCashier: 微信收银台
@form { }
测试支付 1 分钱
支付和微信身份相关,故me().openid 必须存在
回调时使用wxauthpay(apiName)将XML解析为json
[检视源码]
function() {
	sys.mch.id = "123456789"; sys.mch.key = "1234567890abcdef1234567890abcdef";
	sys.mch.cert = "LOCAL_MACHINE\\MY\\某某科技有限公司";
	// 支付费用,回调参数,回调地址,支付内容
	return wxcashier(1, tojson({ id: 1 }), env("URL"), "收银台");
}
AesCbcTest: 测试AesCbc(解密微信步数)
@form { }
微信电话获取也可用到
[检视源码]
function() {
	var raw = "vI0+iGuh2wHWATjkxOBuJ3GLLUt5+rztg4V2IOittdWJ+lREdhRFBkgQd9C1EgpIyBKDbx2HoUBKAzbGg+/y2hHOLiMwD7zuHRoQUJeRf08Hinp92ueKdv8zKa/yMPB1t3aE+Cw78p4njOBvi7+XVv3E7t4p8OVpqmAMlE97cKP/VA20BQhAonFz3OuBXFCwC2wPFadmcYrSnsslxZ1EcMZjYOyu8fOukGbk/4n0OUnuQBJKjygiIM3d/jQE4f7FxOODYRbf2B/JETDVzod2M8Yi/VlDIBMz+dXcr9XB3emKZr+Om2YaWEE2EwxBajWQCHocboR3M2xHy4iQjLgd2RodhyMRgmkhbq+W1162jgLdEwc7/AQcYPurWmh/1swMkAPgRVQjLjjB9P6sZkn2+XXKBMJ2ab3xoJoix2a7JTkgtSMkQ5U1gjqAixtl3CM5xo6Ixnd+MAqHrqKXRUMsq2aW7YdkA8x8uP5l4dTpYYk1TRxPKZDxTHrHmKsw2cHwCvhoeTS07+7+8wJ3RVgCBNoDmJSpv/5sH3rT4YZkxPS1QkTbTVQ2EucDC37Kv6nwWEoPKBoiYz3rOWC4CdjWmORNhJEVVxVZ0Nx3XpnKb0el24RpFLpH3zlIapNxBXDZVubzehNT4kB+vE7SF4wF1c9pB8QCSih5dwLzZ+VysffBRjYE6y63G51CZQ3CaNj10F2FJEvrNhRkV4a4Ns/eZ1Sq60XONJvSGT0GOtUrKLuFQl/uZbjQcDhavdUwmRz0Gxhs0CstTksGvas/0b/IHptKJ9wZ+J0qjBwTAekJt6jxIm+rU9NHKB2MXRMXnRMfdd9TrzNxqT2U+UXa/dXeEvg454PRVJYCoQbK/vm6yMbkV+i3sKINQW90c+siqcSuYnnchxJ9NnjVOe4u0JRRw0HuwNbgL79hETRKNW0ESoJsMXm14e7KHd+ht3dV16KrMZ7/LK0HaVOGCaBQyL8wRcFkyvu8QYYM8jGptvhjDKygF4YcOzS6PPYmku74FxS5ehfEHiOXvoTRob8sU5esj7NDTqo9lY3Ma8Hj9jrSOpcs9Fup8uwM2gb0uxMR/o17l4ep/gpX608FC/eHdS4falhQjUcBmC5aibyfGF4OQkvgJWQRSHCJltQbvRrKDSeoWb9MhirvfoovV8GGpfludVrpQ3HniBGXPpRz2oi5bqK7OI52LLBkMGUZ/UIduX1XRKxwVRhdn3jnyTkxmH45/mixL2siSRfGsI/+tIdJi+yaCcCRQaF2s5wHZWb+m/RGDXcpuk3M3khrTS6Zfdfxi5jV8GoIgRZ3ouWOVw3C3yUaS9Cmo+abokCBPKtvVTPiDmock5FXuIOvB1y6Xo2ReVC0yixAjRThgCOeAWD7Ci9QsyigSnwH2Tl2XV7dhJNaq3iS30kQbzN42+v+jas4P9a4AP8xDIDCelZYoTBHYCpGrXrVL/pvwMHpSmzILpwivcbt2vXJGeiKl39qoBIRdE/swZ8+yGojU8ZXTJ9hQkJg7/R+sPO3rZKxE/mazzc1j79Rj/8ts+5j8qrcsTpZgwwabxyxby02s71pDuQ5/yAY2qtd5FBW1s3V14K+gcmk3abQsTO8YdgiiU2borEXK8KNOLwbuPsSAEr2W5bNr3M=";
	var sskey = "uRVm+1Qcod/Kij3cCUwG6w==", iv = "pZ5NNYGUdwpCWzsmUT/6vg==";
	var aes = lib("/AspLib/lib/AesCbc.sct");
	var walk = fromjson(aes.dec(raw, sskey, iv));
	delete walk.watermark; return walk;
}
WxShareJsApi: 微信 JS 分享签名
@form { url }
[检视源码]
function() { return wxjsapisign(form("url")); }
ParseImageTest: 图片宽高解析测试
@form { url }
[检视源码]
function() {
	var xhr = new ActiveXObject("MsXml2.ServerXmlHttp");
	xhr.open("GET", form("url"), true);
	xhr.send(); xhr.waitForResponse();
	var root = new ActiveXObject("htmlfile").createElement("xml").createElement("x");
	root.dataType = "bin.hex";
	root.nodeTypedValue = xhr.responseBody;
	var bin = root.text, arr = new Array;
	for(var i = 0; i < bin.length; i += 2) arr.push(parseInt(bin.substr(i, 2), 16));
	var img = cc().win.eval("(" + function(str) {
	var img = new Image, arr = new Uint8Array(JSON.parse(str));
	img.src = URL.createObjectURL(new Blob([arr])); return img;
	} + ")")("[" + arr + "]");
	return { src: img.src, width: img.width, height: img.height, size: arr.length, time: new Date - sys.sTime };
}
Sleep: Sleep 测试
@form { second }
second 不能超过5秒
[检视源码]
function() {
	var sec = Math.max(Math.min(~~form("second") || 1, 5), 1);
	var wsh = Server.CreateObject("WScript.Shell");
	wsh.Popup("Hello", sec);
	return { msg: "等待了" + sec + "秒" };
}
参数录入
执行
取消