JS中签名组串QueryString生成

Posted 第三眼的思绪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS中签名组串QueryString生成相关的知识,希望对你有一定的参考价值。

/**
 * @param data json字符串字节流
 * @desc 用于生成签名拼接字符串QueryString。
 *      1.按ASCII码从小到大排序,空键/值和空字符串不参与组串
 *      2.统一使用UTF8进行编码签名,防止编码方式或特殊字符不兼容问题
 *      3.签名原始串中,字段名和字段值都采用原始值,即不进行URL Encode
 *      4.注意整形、浮点型数据参与签名方式(如:浮点数3.10体现为3.1、0.0体现为0)
 *      5.内嵌JSON或ARRAY解析拼接需转字符串且按紧凑方式,即内嵌各K/V或值之间不应有空格或换行符等等
 *      6.内部值中嵌套对象中空值或空字符串不做任何处理(即保留)
 *      7.内部值中的嵌套对象键值属性保持原有顺序,不做特殊排序处理
 */
function buildSignQueryString(params) 
	var keys = Object.keys(params).sort()
  var queryString = "";
  keys.forEach((key,index) => 
    var val = params[key];
    if (key == undefined || key ==null || key.length == 0 || val == undefined || val==null || val.length == 0) 
      return
    
    if (queryString.length > 0) 
      queryString += "&"
    
    queryString += key + "="
    switch(typeof(val)) 
        case "object": queryString += JSON.stringify(val,(k,v)=>typeof v==='undefined'?null:v);break;
        default: queryString += val;break;
    
  )
  return queryString;

验证JS参数对象

var params = 
	"d":"中华人民共和国",
	"b":2.12345678,
	"a":1,
	"e":[
		1,
		2.12345678,
		true,
		"中华人民共和国",
		
			"e4":"中化人民共和国",
			"e2":2.12345678,
			"e3":true,
			"e1":1,
			"e5":[],
			"e6":undefined
		,
		undefined
	],
	"c":true,
	"f":
		"f4":"中化人民共和国",
		"f2":2.12345678,
		"f3":true,
		"f1":1,
		"f6":undefined,
		"f5":
			"f5_1":1,
			"f5_2":2.12345678,
			"f5_3":true,
			"f5_5":[],
			"f5_6":undefined,
			"f5_4":"中化人民共和国"
		
	

以上是关于JS中签名组串QueryString生成的主要内容,如果未能解决你的问题,请参考以下文章

Golang签名组串QueryString生成

LQ0177 字母组串程序填空

aliyun oss js直传且使用服务器端生成签名

node.js的querystring模块

Node.js——querystring模块

node.js关于querystring