更新记录
1(2024-10-17) 下载此版本
自己弄几天摸索的,分享给大家
平台兼容性
阿里云 | 腾讯云 | 支付宝云 |
---|---|---|
√ | × | × |
云函数类插件通用教程
使用云函数类插件的前提是:使用HBuilderX 2.9+
零钱通提现 需要用材料 必须是公司营业执照,已经在微信商户开通零钱通 产品
第一步打开项目
第二步 根据微信商户填写信息
openid 是小程序登录后获取的 openid
第三步 apiclient_cert.pem,apiclient_key.pem 一定弄成自己的
第四步 在微信商户 零钱通 配置 阿里云 IP,
如果用阿里云 就用阿里云,不用阿里云
第无步 配置免额度 (为了提现时候不用审核了)
代码演示
'use strict';
const db = uniCloud.database()
// 云函数入口文件
let mchid = '' //微信商户号
// 证书序列号
let num = '';
//小程序appid
let appid='';
//v3的密钥
let api_key='';
const fs = require('fs') // 文件读取模块
const path = require('path'); // 引入内置的path模块
const crypto = require('crypto');
exports.main = async (event, context) => {
let out_batch_no="TD"+new Date().getTime();
//提现参数
let moneyVal=0.1;
let time=new Date().toLocaleTimeString();
let param = {
appid,
out_batch_no, //商家批次单号
batch_name: time + "商品分销提现",
batch_remark: time + "商品分销提现",
total_amount: Number(moneyVal) * 100, // 转账金额
total_num: 1,
transfer_scene_id: "1001",
transfer_detail_list: [
{
out_detail_no:out_batch_no,
transfer_amount: Number(moneyVal) * 100, // 转账金额
transfer_remark: time + "商品分销提现",
openid:'',
},
],
};
const body = JSON.stringify(param); //请求体数据,如果有的话
// 读取证书
const cert = fs.readFileSync(path.resolve(__dirname, 'cert/apiclient_cert.pem'))
const prikey = fs.readFileSync(path.resolve(__dirname, 'cert/apiclient_key.pem'))
let chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
let maxPos = chars.length;
let character = '';
for (let i = 0; i < 32; i++) {
character += chars.charAt(Math.floor(Math.random() * maxPos))
}
// 获取签名
const timestamp = Math.floor(Date.now() / 1000);
const nonceStr = character; // 替换成随机字符串
const method = 'POST'; // 请求方法
const path2 = '/v3/transfer/batches'; // 请求路径
const serialNo = num; // 商户证书序列号
// 构建待签名字符串
const message = `${method}\n${path2}\n${timestamp}\n${nonceStr}\n${body}\n`;
// 使用商户私钥进行签名
const sign = crypto
.createSign('sha256')
.update(message)
.sign(prikey, 'base64');
// 创建 Authorization 头部
const authorization =
`WECHATPAY2-SHA256-RSA2048 mchid="${mchid}",serial_no="${serialNo}",nonce_str="${nonceStr}",timestamp="${timestamp}",signature="${sign}"`;
const headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
'user-agent': encodeURIComponent('商品分销提现'),
'Wechatpay-Serial': num,
"Authorization": authorization
};
let data = {
cert_sn: cert,
mch_id: mchid,
api_key// v3密钥
};
const batchesRes = await uniCloud.httpProxyForEip.post('https://api.mch.weixin.qq.com/v3/transfer/batches',body,headers);
console.log(batchesRes);
return batchesRes;
};
注意 如果运行报错 看看是否需要安装 crypto 模块,参数是否错误
微信商户零钱通
https://pay.weixin.qq.com/docs/merchant/products/batch-transfer-to-balance/apilist.html
阿里云代理服务IP配置,已经发送请求方法
https://doc.dcloud.net.cn/uniCloud/cf-functions.html#aliyun-eip