记录下抖音小程序使用云函数实现支付功能

小程序是为了简洁开发而生的,我一个只会前端的开发抖音小程序在一般情况很有难度的,然后再使用抖音小程序支付时被难住了好久,官方提供的代码只有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)
						//出错,需要提示用户进行重新
					})

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来一定会来的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值