最近公司小程序項(xiàng)目都轉(zhuǎn)到 云開(kāi)發(fā)了,現(xiàn)在需要 做給用戶發(fā)紅包功能, 不說(shuō)廢話直接上代碼
需要配置 node 環(huán)境,? ?需要 安裝 ip 和 tenpay 模塊
############ envName 根據(jù)自己的開(kāi)發(fā)環(huán)境 配置
############? fileID? 根據(jù)自己的存儲(chǔ)位置配置
const cloud = require('wx-server-sdk')?
const config = {
? appid: '小程序appid',? ? ? ? ? ? ? ?//小程序Appid
? envName: '云開(kāi)發(fā)環(huán)境ID',? ? ? ?// 小程序云開(kāi)發(fā)環(huán)境ID 根據(jù)自己的環(huán)境配置
? mch_appid: '商戶appid',
? mchid: '商戶號(hào)',?
? partnerKey: '商戶支付密鑰',?
? pfx: '', //證書(shū)初始化
? fileID: '云存儲(chǔ)文件ID'
};
cloud.init({
? env: config.envName
})
const ip = require('ip');
const tenpay = require('tenpay'); //支付核心模塊
const db = cloud.database()
const _ = db.command
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
? const wxContext = cloud.getWXContext()
? var openid = wxContext.OPENID
? ############金額是分########
?var cash_money = 100? ?//提現(xiàn)金額
?#############支付之前驗(yàn)證操作 忽略 可以根據(jù)自己需要進(jìn)行驗(yàn)證?#############
?#############下面首先獲取證書(shū)文件########
?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'];
? ? ?#############產(chǎn)生隨機(jī)字符串?#############
? ? for (var i = 0; i < 32; i++) {
? ? ? pos = Math.round(Math.random() * (arr.length - 1));
? ? ? nonce_str += arr[pos];
? ? }
? ? ?#############產(chǎn)生商戶單號(hào)?#############
? ? var time = new Date()
? ? var timestamp = 'TX' + time.getTime()
? ? var partner_trade_no = timestamp + '' + Math.floor((Math.random() * 1000) + 1);
?#############調(diào)用支付?#############
? ? 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: '提現(xiàn)紅包',
? ? });
?#############對(duì)結(jié)果進(jìn)行分析?#############
? if (result.result_code == 'SUCCESS' && result.return_code =='SUCCESS') {
? ? ? ?#############執(zhí)行成功之后? 減掉提現(xiàn)的金額??#############
? ? ? let re = await db.collection('user').where({
? ? ????? ? _openid:openid
? ? ? }).update({
? ? ? ????? data: {
? ? ? ? ????????? money:_.inc(-cash_money)
? ? ????????? ? }
? ? ? });
?#############添加提現(xiàn)? 記錄操作忽略?#############
? ? ? return {
? ? ? ????? status:1,
? ? ? ? ????msg:'提現(xiàn)成功'
? ? ? }
? ? }else{
? ? ? ? ?return {
? ? ? ? ????????status:0,
? ? ? ????????? msg:'提現(xiàn)失敗'
? ? ? }
? ? }
}
溫馨提示:企業(yè)付款功能, 需要小程序 進(jìn)行認(rèn)證之后 ,才可以操作,商戶后臺(tái)和小程序進(jìn)行關(guān)聯(lián)操作?
? ? ? ? ? ? ? ? ? ? ? ??