body为json字符串,格式如下 { "x1":"x1", "x2":"x2", "x3":"x3" } 需要在前执行脚本中获取body里面的参数和值。 采用的方法如下: var queryParams =runapi.getAllParam(); var x1=runapi.getParam("x1") ; var parmJson=runapi.getParamJson(); var x11=runapi.getParamJson("x1"); 以上方法均取不到参数和参数里面的值信息。
[star7th/showdoc]runAPi 获取body里面json字符串参数 异常,取不到参数值
回答
postman里面 这种方法是能取到body里面的json字符串的: var queryParams = eval("(" + pm.request.body.raw + ")"); for (var key in queryParams) { { }
实测 这段代码可以获取
var parmJson=runapi.getParamJson(); runapi.alert(parmJson)
如果获取不了,就是你填写的接口本身出错了
如果要取里面的参数,怎么写呢?
var parmJson=runapi.getParamJson(); runapi.alert(parmJson.x1) runapi.alert(parmJson.x2) runapi.alert(parmJson.x3)
parmJson就是一个对象,你循环遍历都可
是我的版本不对吗?3.0.7 parmJson都是空的,我放在全局的前执行脚本里面。
3.0.7版本实测没问题。感觉是你没对。要用post方式,选择json,然后输入合法的json 。如果不合法,就获取不到。
你可以把调试页截图我看下
怎么截图呢?这里好像发不了图片
我需要看清楚你这个接口是怎么调的,设置的参数是怎么填写的
直接截图后,在输入框 粘贴
再不行就截图保存本地,然后以附件的形式放上来
后面两个图片看不到。要等久一点,等它自动上传完毕了再提交。 我看了你的第一个图片,请先严格 用我 发出来的代码试一下 。不要用其他代码,因为可能是其他代码干扰。
很明显你截图的,跟你反馈给我的,不是一回事。你反馈给我的代码,我测试了是正常的。请给一个可重现例子给我。 你可以把你的项目映射到公网,也可以连接官网服务器 https://www.showdoc.com.cn/ 来新建一个项目给我看。 我都不想浪费时间了,你截图的代码跟你发的代码都不是一回事。
真的好浪费时间,贴代码都不贴完整的
而且你自己去测试一下好吗,你贴出来的代码都是可行的。不行的只是你截图的代码。
我不想一个片段一个片段看了。你直接退出登录,然后连接官网服务器,设置一个可重现例子给我看看吧 https://www.showdoc.com.cn/
是其它的影响呢
我不知道是不是其他影响。总之,如果无法提供可重现例子,请理解我不能帮忙。
谢谢,我在看下 是哪里影响呢
这个执行顺序有点奇怪,怎么是从下到上的呢?先是d3、d2、d1 var d1=functionA(); var d2=functionB(); var d3=functionC();
导致d1依赖d2、d3返回的参数有问题。
代码不放完整,我拒绝查看。谁知道你的真实代码是怎样的。
简单的问题,建议去问AI https://www.aiznx.com/#/detail/codeSnippetGen
你这样反馈是真的让我火大。就你上面贴出的代码,按不按顺序执行是取决于你里面的函数执行逻辑有没有异步操作。 我最后强调一次,如果不能贴完整代码或者提供可重现例子,不要再浪费我时间。
你都不贴出里面函数执行逻辑,让我看个什么。别再浪费时间和精力了。赶紧去问AI吧,这种简单脚本场景,AI很擅长的。
// 获取客户端时间戳 function getTimestamp() { return new Date().getTime(); }
// 获取客户端随机数 function getNonce() { function s4() { return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); } return (s4() + s4() + s4() + s4() + s4() + s4() + s4() + s4()); }
function getSign(timestamp, nonce) { var parmJson=runapi.getParamJson(); runapi.alert("==parmJson=="+parmJson+"==timestamp=="+timestamp+"==nonce=="+nonce);
var appkey1=parmJson.appkey; runapi.alert("==appkey1==="+appkey1); for(var key in parmJson) { var val=parmJson[key ]; runapi.alert("==val==="+val+"==key =="+key ); } return "xx"; }
var timestamp; var nonce ;
runapi.alert("===timestamp =="+timestamp+"==nonce==="+nonce); // 设置客户端签名 var sign = getSign(timestamp, nonce); runapi.alert("===sign=="+sign); runapi.setParam("api_sign", sign);
// 设置客户端时间戳 timestamp = getTimestamp(); runapi.alert("===timestamp =="+timestamp); runapi.setParam("api_timestamp", timestamp);
// 设置客户端随机数 nonce = getNonce(); runapi.alert("===nonce=="+nonce); runapi.setParam("api_nonce", nonce);
json字符串 { "api_nonce": "{{api_nonce}}", "api_sign": "{{api_sign}}", "api_timestamp": "{{api_timestamp}}", "appkey": "x1", "appSecret": "x2", "appAccount": "x3", "appPhone": "x3", "appName": "x3", "system_type": "core-mini-program", "tenant_app_code": "x3", "tenant_code": "x3" }
我用你的脚本来调式了下,屏蔽了一些无效的弹窗,只留下 runapi.alert(parmJson) ,是有值的,正常的。
// 获取客户端时间戳
function getTimestamp() {
return new Date().getTime();
}
// 获取客户端随机数
function getNonce() {
function s4() {
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
}
return (s4() + s4() + s4() + s4() + s4() + s4() + s4() + s4());
}
function getSign(timestamp, nonce) {
var parmJson = runapi.getParamJson();
// runapi.alert("==parmJson=="+parmJson+"==timestamp=="+timestamp+"==nonce=="+nonce);
var appkey1=parmJson.appkey;
// runapi.alert("==appkey1==="+appkey1);
runapi.alert(parmJson);
for(var key in parmJson)
{
var val=parmJson[key ];
// runapi.alert("==val==="+val+"==key =="+key );
}
return "xx";
}
var timestamp;
var nonce ;
// runapi.alert("===timestamp =="+timestamp+"==nonce==="+nonce);
// 设置客户端签名
var sign = getSign(timestamp, nonce);
// runapi.alert("===sign=="+sign);
runapi.setParam("api_sign", sign);
// 设置客户端时间戳
timestamp = getTimestamp();
// runapi.alert("===timestamp =="+timestamp);
runapi.setParam("api_timestamp", timestamp);
// 设置客户端随机数
nonce = getNonce();
// runapi.alert("===nonce=="+nonce);
runapi.setParam("api_nonce", nonce);
至于说弹窗的顺序,因为可能runapi.alert()是异步通知,所以顺序不一定是严格的顺序。不能作为函数执行顺序的参考。
业务上的的使用问题,你写的脚本可能哪里不太对。我不方便调试得太细。目前我能保证工具自身的正确性,暴露出的函数确实是能获取到参数的。对于非工具自身的问题,你多研究下。 如果发现是工具自身的问题,则可以再反馈。