在这里插入图片描述

{
	"info": {
		"_postman_id": "e2242e4c-69ba-4ce9-ad18-b052c1c24454",
		"name": "诺云放开接口",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
	},
	"item": [
		{
			"name": "/Third/Tools/checkSign",
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"exec": [
							"\r",
							"var appKey = \"<YOUR APP KEY>\";\r",
							"var appSecret = \"<YOUR APP SECRET>\";\r",
							"\r",
							"var md5 = calcMd5();\r",
							"var date = new Date().toGMTString();\r",
							"var timestamp =  new Date().getTime();\r",
							"var nonce = createUuid();\r",
							"var textToSign = \"\";\r",
							"var accept = \"*/*\";\r",
							"var contentType = \"\";\r",
							"\r",
							"console.log(\"request\" + JSON.stringify(request));\r",
							"if(request.headers[\"accept\"]){\r",
							"    accept = request.headers[\"accept\"];\r",
							"}\r",
							"if(request.headers[\"content-type\"]){\r",
							"    contentType = request.headers[\"content-type\"];\r",
							"}\r",
							"textToSign += request.method + \"\\n\";\r",
							"textToSign += accept + \"\\n\";\r",
							"textToSign += md5 + \"\\n\";\r",
							"textToSign += contentType + \"\\n\";\r",
							"textToSign += date + \"\\n\";\r",
							"var headers = headersToSign();\r",
							"var signatureHeaders;\r",
							"var sortedKeys = Array.from(headers.keys()).sort()\r",
							"for (var headerName of sortedKeys) {\r",
							"    textToSign += headerName + \":\" + headers.get(headerName) + \"\\n\";\r",
							"    signatureHeaders = signatureHeaders ? signatureHeaders + \",\" + headerName : headerName;\r",
							"}\r",
							"textToSign += urlToSign();\r",
							"console.log(\"textToSign\\n\" + textToSign);\r",
							"var hash = CryptoJS.HmacSHA256(textToSign, appSecret)\r",
							"console.log(\"hash:\" + hash)\r",
							"var signature = hash.toString(CryptoJS.enc.Base64)\r",
							"console.log(\"signature:\" + signature)\r",
							"pm.globals.set('AppKey', appKey);\r",
							"pm.globals.set('Md5', md5);\r",
							"pm.globals.set(\"Date\", date);\r",
							"pm.globals.set(\"Signature\", signature);\r",
							"pm.globals.set(\"SignatureHeaders\", signatureHeaders);\r",
							"pm.globals.set(\"Nonce\", nonce);\r",
							"pm.globals.set(\"Timestamp\", timestamp);\r",
							"\r",
							"function headersToSign() {\r",
							"    var headers = new Map();\r",
							"    for (var name in request.headers) {\r",
							"        //name = name.toLowerCase();\r",
							"        if (!name.startsWith('x-ca-')) {\r",
							"            continue;\r",
							"        } \r",
							"        if (name === \"x-ca-signature\" || name === \"x-ca-signature-headers\" || name == \"x-ca-key\" || name === 'x-ca-nonce' || name === 'x-ca-timestamp') {\r",
							"            continue;\r",
							"        }\r",
							"        var value = request.headers[name];\r",
							"        headers.set(name, value);\r",
							"    }\r",
							"    headers.set('x-ca-key', appKey);\r",
							"    headers.set('x-ca-nonce', nonce);\r",
							"    headers.set('x-ca-timestamp', timestamp)\r",
							"    return headers;\r",
							"}\r",
							"function urlToSign() {\r",
							"    var params = new Map();\r",
							"    var contentType = request.headers[\"content-type\"];\r",
							"    if (contentType && contentType.startsWith('application/x-www-form-urlencoded')) {\r",
							"       for(x in request.data){\r",
							"           params.set(x, request.data[x]);\r",
							"       }\r",
							"    }\r",
							"    var queryParam = pm.request.url.query.members;\r",
							"    console.log(\"request.url\" + JSON.stringify(pm.request.url))\r",
							"    for (let i in queryParam) {\r",
							"        params.set(queryParam[i].key, queryParam[i].value);\r",
							"    }\r",
							"    var sortedKeys = Array.from(params.keys())\r",
							"    sortedKeys.sort();\r",
							"    var url = \"\";\r",
							"    for(var k of pm.request.url.path){\r",
							"        url = url + \"/\" + k;\r",
							"    }\r",
							"    var qs;\r",
							"    for (var k of sortedKeys) {\r",
							"        var s = k + \"=\" + params.get(k);\r",
							"        qs = qs ? qs + \"&\" + s : s;\r",
							"        console.log(\"key=\" + k + \" value=\" + params.get(k));\r",
							"    }\r",
							"    return qs ? url + \"?\" + qs : url;\r",
							"}\r",
							"function calcMd5() {\r",
							"    var contentType = String(request.headers[\"content-type\"]);\r",
							"    console.log(\"data\" + JSON.stringify(request.data));\r",
							"    if (!JSON.stringify(request.data).startsWith('{}') && !contentType.startsWith('application/x-www-form-urlencoded')) {\r",
							"        var data = request.data;\r",
							"        var md5 = CryptoJS.MD5(data);\r",
							"        var md5String = md5.toString(CryptoJS.enc.Base64);\r",
							"        console.log(\"data:\" + data + \"\\nmd5:\" + md5String);\r",
							"        return md5String;\r",
							"    } else {\r",
							"        return \"\";\r",
							"    }\r",
							"}\r",
							"function createUuid() {\r",
							"    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r",
							"        var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\r",
							"        return v.toString(16);\r",
							"    });\r",
							"}"
						],
						"type": "text/javascript"
					}
				}
			],
			"protocolProfileBehavior": {
				"disabledSystemHeaders": {
					"accept": true
				}
			},
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Accept",
						"value": "application/json; charset=utf-8",
						"type": "text"
					},
					{
						"key": "Content-Type",
						"value": "application/x-www-form-urlencoded; charset=utf-8",
						"type": "text"
					},
					{
						"key": "Date",
						"value": "{{Date}}",
						"type": "text"
					},
					{
						"key": "Content-MD5",
						"value": "{{Md5}}",
						"type": "text"
					},
					{
						"key": "X-Ca-Nonce",
						"value": "{{Nonce}}",
						"type": "text"
					},
					{
						"key": "X-Ca-Key",
						"value": "{{AppKey}}",
						"type": "text"
					},
					{
						"key": "X-Ca-Signature",
						"value": "{{Signature}}",
						"type": "text"
					},
					{
						"key": "X-Ca-SignatureMethod",
						"value": "HmacSHA256",
						"type": "text"
					},
					{
						"key": "X-Ca-Signature-Headers",
						"value": "{{SignatureHeaders}}",
						"type": "text"
					},
					{
						"key": "X-Ca-Timestamp",
						"value": "{{Timestamp}}",
						"type": "text"
					}
				],
				"body": {
					"mode": "urlencoded",
					"urlencoded": [
						{
							"key": "username",
							"value": "xiaoming",
							"type": "text"
						},
						{
							"key": "password",
							"value": "123456789",
							"type": "text"
						}
					]
				},
				"url": {
					"raw": "https://gateway.nuoyunlive.com/Third/Tools/checkSign",
					"protocol": "https",
					"host": [
						"gateway",
						"nuoyunlive",
						"com"
					],
					"path": [
						"Third",
						"Tools",
						"checkSign"
					]
				}
			},
			"response": []
		}
	]
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


var appKey = "<YOUR APP KEY>";
var appSecret = "<YOUR APP SECRET>";

var md5 = calcMd5();
var date = new Date().toGMTString();
var timestamp =  new Date().getTime();
var nonce = createUuid();
var textToSign = "";
var accept = "*/*";
var contentType = "";

console.log("request" + JSON.stringify(request));
if(request.headers["accept"]){
    accept = request.headers["accept"];
}
if(request.headers["content-type"]){
    contentType = request.headers["content-type"];
}
textToSign += request.method + "\n";
textToSign += accept + "\n";
textToSign += md5 + "\n";
textToSign += contentType + "\n";
textToSign += date + "\n";
var headers = headersToSign();
var signatureHeaders;
var sortedKeys = Array.from(headers.keys()).sort()
for (var headerName of sortedKeys) {
    textToSign += headerName + ":" + headers.get(headerName) + "\n";
    signatureHeaders = signatureHeaders ? signatureHeaders + "," + headerName : headerName;
}
textToSign += urlToSign();
console.log("textToSign\n" + textToSign);
var hash = CryptoJS.HmacSHA256(textToSign, appSecret)
console.log("hash:" + hash)
var signature = hash.toString(CryptoJS.enc.Base64)
console.log("signature:" + signature)
pm.globals.set('AppKey', appKey);
pm.globals.set('Md5', md5);
pm.globals.set("Date", date);
pm.globals.set("Signature", signature);
pm.globals.set("SignatureHeaders", signatureHeaders);
pm.globals.set("Nonce", nonce);
pm.globals.set("Timestamp", timestamp);

function headersToSign() {
    var headers = new Map();
    for (var name in request.headers) {
        //name = name.toLowerCase();
        if (!name.startsWith('x-ca-')) {
            continue;
        } 
        if (name === "x-ca-signature" || name === "x-ca-signature-headers" || name == "x-ca-key" || name === 'x-ca-nonce' || name === 'x-ca-timestamp') {
            continue;
        }
        var value = request.headers[name];
        headers.set(name, value);
    }
    headers.set('x-ca-key', appKey);
    headers.set('x-ca-nonce', nonce);
    headers.set('x-ca-timestamp', timestamp)
    return headers;
}
function urlToSign() {
    var params = new Map();
    var contentType = request.headers["content-type"];
    if (contentType && contentType.startsWith('application/x-www-form-urlencoded')) {
       for(x in request.data){
           params.set(x, request.data[x]);
       }
    }
    var queryParam = pm.request.url.query.members;
    console.log("request.url" + JSON.stringify(pm.request.url))
    for (let i in queryParam) {
        params.set(queryParam[i].key, queryParam[i].value);
    }
    var sortedKeys = Array.from(params.keys())
    sortedKeys.sort();
    var url = "";
    for(var k of pm.request.url.path){
        url = url + "/" + k;
    }
    var qs;
    for (var k of sortedKeys) {
        var s = k + "=" + params.get(k);
        qs = qs ? qs + "&" + s : s;
        console.log("key=" + k + " value=" + params.get(k));
    }
    return qs ? url + "?" + qs : url;
}
function calcMd5() {
    var contentType = String(request.headers["content-type"]);
    console.log("data" + JSON.stringify(request.data));
    if (!JSON.stringify(request.data).startsWith('{}') && !contentType.startsWith('application/x-www-form-urlencoded')) {
        var data = request.data;
        var md5 = CryptoJS.MD5(data);
        var md5String = md5.toString(CryptoJS.enc.Base64);
        console.log("data:" + data + "\nmd5:" + md5String);
        return md5String;
    } else {
        return "";
    }
}
function createUuid() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
        var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
        return v.toString(16);
    });
}
GitHub 加速计划 / js / json
18
5
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:2 个月前 )
6be4e856 4 天前
663058e7 6 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐