最近公司小程序项目都转到 云开发了,现在需要 做给用户发红包功能, 不说废话直接上代码
需要配置 node 环境, 需要 安装 ip 和 tenpay 模块
############ envName 根据自己的开发环境 配置
############ fileID 根据自己的存储位置配置
const cloud = require('wx-server-sdk')
const config = {
appid: '小程序appid', //小程序Appid
envName: '云开发环境ID', // 小程序云开发环境ID 根据自己的环境配置
mch_appid: '商户appid',
mchid: '商户号',
partnerKey: '商户支付密钥',
pfx: '', //证书初始化
fileID: '云存储文件ID'
};
cloud.init({
env: config.envName
})
const ip = require('ip');
const tenpay = require('tenpay'); //支付核心模块
const db = cloud.database()
const _ = db.command
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
var openid = wxContext.OPENID
############金额是分########
var cash_money = 100 //提现金额
#############支付之前验证操作 忽略 可以根据自己需要进行验证 #############
#############下面首先获取证书文件########
const res = await cloud.downloadFile({
fileID: config.fileID,
})
config.pfx = res.fileContent
let pay = new tenpay(config, true)
var nonce_str = ''
arr = ['0','1','2','3', '4', '5', '6', '7', '8', '9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
#############产生随机字符串 #############
for (var i = 0; i < 32; i++) {
pos = Math.round(Math.random() * (arr.length - 1));
nonce_str += arr[pos];
}
#############产生商户单号 #############
var time = new Date()
var timestamp = 'TX' + time.getTime()
var partner_trade_no = timestamp + '' + Math.floor((Math.random() * 1000) + 1);
#############调用支付 #############
let result = await pay.transfers({
mch_appid: config.mch_appid,
mchid: config.mchid,
nonce_str: nonce_str,//唯一字符串
partner_trade_no: partner_trade_no,
openid: openid,
spbill_create_ip: ip.address(),//客户端ip
check_name: 'NO_CHECK',
amount: parseInt(cash_money),
desc: '提现红包',
});
#############对结果进行分析 #############
if (result.result_code == 'SUCCESS' && result.return_code =='SUCCESS') {
#############执行成功之后 减掉提现的金额 #############
let re = await db.collection('user').where({
_openid:openid
}).update({
data: {
money:_.inc(-cash_money)
}
});
#############添加提现 记录操作忽略 #############
return {
status:1,
msg:'提现成功'
}
}else{
return {
status:0,
msg:'提现失败'
}
}
}
温馨提示:企业付款功能, 需要小程序 进行认证之后 ,才可以操作,商户后台和小程序进行关联操作