小程序是为了简洁开发而生的,我一个只会前端的开发抖音小程序在一般情况很有难度的,然后再使用抖音小程序支付时被难住了好久,官方提供的代码只有java和go,而我对这两个语言也完全不会,作为只会前段的我,借用chatgpt搞出来了可以运行在前端的代码,最终可以通过云函数获得sign,不用再写后端代码
1、本地获得代码:(虽然sign官方要求不能本地获取,但是先用来练手,云函数和这个代码一样)
const crypto = require('crypto');
const querystring = require('querystring');
// 支付密钥值
const salt = '你的salt';
getSign(paramsMap) {
let paramsArr = [];
for (let k in paramsMap) {
if (k === "other_settle_params") {
continue;
}
let value = String(paramsMap[k]).trim();
if (value.startsWith("\"") && value.endsWith("\"") && value.length > 1) {
value = value.substring(1, value.length - 1);
}
value = value.trim();
if (value === "" || value === "null") {
continue;
}
switch (k) {
// app_id, thirdparty_id, sign 字段用于标识身份,不参与签名
case "app_id":
case "thirdparty_id":
case "sign":
break;
default:
paramsArr.push(value);
break;
}
}
paramsArr.push(salt);
paramsArr.sort();
const hash = crypto.createHash('md5');
hash.update(paramsArr.join("&"));
return hash.digest('hex');
},
//传递参数
let params = {
"app_id": "你的appid",
"out_order_no": "out_order_no_3",
"total_amount": 10,
"subject": "测试商品",
"body": "测试商品",
"valid_time": 500
};
console.log(this.getSign(params))
2、云函数获得sign代码:
我使用的是unicloud云函数,用什么云函数都是一样的
'use strict';
const crypto = require('crypto');
const querystring = require('querystring');
// 支付密钥值
const salt = '填写你的';
exports.main = async (event, context) => {
let paramsMap=event.params;
let paramsArr = [];
for (let k in paramsMap) {
if (k === "other_settle_params") {
continue;
}
let value = String(paramsMap[k]).trim();
if (value.startsWith("\"") && value.endsWith("\"") && value.length > 1) {
value = value.substring(1, value.length - 1);
}
value = value.trim();
if (value === "" || value === "null") {
continue;
}
switch (k) {
// app_id, thirdparty_id, sign 字段用于标识身份,不参与签名
case "app_id":
case "thirdparty_id":
case "sign":
break;
default:
paramsArr.push(value);
break;
}
}
paramsArr.push(salt);
paramsArr.sort();
const hash = crypto.createHash('md5');
hash.update(paramsArr.join("&"));
return hash.digest('hex');
};
本地端:
let params = {
"app_id": "你的appid",
"out_order_no": "out_order_no_3",
"total_amount": 10,
"subject": "测试商品",
"body": "测试商品",
"valid_time": 500
};
//云函数的
var that = this
uniCloud.callFunction({
name: 'get_dy_sign',
data: {
params:params
}
})
.then(res => {
// console.log(res.result.sign)
console.log(res.result)
})
.catch(err => {
console.log(err)
//出错,需要提示用户进行重新
})