# 7、微信商家转账到零钱V3接口

# vkPay.transfer

注意

需要申请开通微信支付的【商家转账到零钱】接口,如下图所示

无框架下的云函数代码示例(该写法同时也适用于任何框架)

# 单笔模式

const vkPay = require("vk-uni-pay");

let transferRes = await vkPay.transfer({
  //real_name: "真实姓名", // 真实姓名 大于2000元的转账需要填写真实姓名
  amount: 1, // 100=1元(单位分)
  title: "转账",
  pay_type: "wxpay",
  openid: "oJEy94iPPehudfKiHmdmaJqNOVD8",
  remark: "转账备注",
  out_biz_no: "test" + new Date().getTime(), // 转账单号(请自己控制全局唯一)
  version: 3, // 固定3,代表使用v3版本
});
if (transferRes.code === 0) {
  // 转账成功后的逻辑

} else {
  // 转账失败后的逻辑

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 请求参数

参数 说明 类型 默认值 可选值
real_name 【特殊选填】对方真实姓名(转账大于2000元时必填) String - -
amount 【必填】转账金额 100=1元(单位分),金额最低0.1元,也就是 amount >= 10 Number - -
title 【必填】转账标题 String - -
pay_type 【必填】固定 wxpay String - wxpay
remark 【必填】转账备注 String - -
out_biz_no 【必填】转账单号 String - -
openid 【必填】微信专用 - 用户的openid,需要与配置中的appid对应或与appid参数对应 String - -
appid 【选填】手动传appid,不填则自动从配置中获取 String - -
platform 【选填】若传了platform,且没传appid,则appid从指定的platform中获取 String - -
pid 【选填】多商户模式下的自定义商户id(等于vk-pay-config表的_id) 查看vk-pay-config表 (opens new window) String - -

# 批量模式

const vkPay = require("vk-uni-pay");
let out_biz_no = "test" + new Date().getTime();
let transfer_detail_list = [{
    out_detail_no: out_biz_no + "1", // 该用户的转账子单号
    transfer_amount: 50, // 该用户的转账金额 单位为分 100 = 1元
    transfer_remark: "关羽的报销单", // 该用户的转账备注
    openid: "xxxxxxxx", // 该用户的openid
    //user_name: "关羽",
  },
  {
    out_detail_no: out_biz_no + "2",  // 该用户的转账子单号
    transfer_amount: 50, // 该用户的转账金额 单位为分 100 = 1元
    transfer_remark: "张飞的报销单", // 该用户的转账备注
    openid: "xxxxxxxx", // 该用户的openid
    //user_name: "张飞",
  }
]
let transferRes = await vkPay.transfer({
  out_biz_no, // 转账单号(请自己控制全局唯一)
  batch_name: "2022年8月员工报销单", // 本次批量转账的名称
  batch_remark: "2022年8月员工报销单", // 本次批量转账的备注
  total_amount: 100, // 本次批量转账共转金额 单位为分 100 = 1元
  total_num: transfer_detail_list.length, // 本次批量转账共几笔
  transfer_detail_list, // 本次批量转账详情
  pay_type: "wxpay", // 固定 wxpay
  version: 3, // 固定3,代表使用v3版本
});

if (transferRes.code === 0) {
  // 转账成功后的逻辑

} else {
  // 转账失败后的逻辑

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

# 请求参数

参数 说明 类型 默认值 可选值
appid 手动传appid,不填则自动从配置中获取 String - -
out_biz_no 转账单号 String - -
batch_name 本次批量转账的名称 String - -
batch_remark 本次批量转账的备注 String - -
total_amount 本次批量转账共转金额 单位为分 100 = 1元 Number - -
total_num 本次批量转账共几笔 Number - -
transfer_detail_list 本次批量转账详情 Array - -
pay_type 固定wxpay String - -
version 固定3,代表使用v3版本 Number - -
pid 多商户模式下的自定义商户id(等于vk-pay-config表的_id) 查看vk-pay-config表 (opens new window) String - -

# 注意事项

  • 新注册的微信商户号,转账接口的申请需要入驻满90天,且连续正常交易30天(刷单不算)

特别注意

微信转账接口配置

{
  "wxpay":{
    ...其他配置
    // 微信 - 转账到零钱 v3版本
    "transfer": {
      "appId": "",
      "mchId": "",
      "v3Key": "", // api v3密钥
      "appCertPath": path.join(__dirname, 'wxpay/apiclient_cert.pem'), // 商家应用证书
      "appPrivateKeyPath": path.join(__dirname, 'wxpay/apiclient_key.pem'), // 商家私钥证书
      "wxpayPublicCertSn": "", // 微信支付公钥证书的序列号
      "wxpayPublicCertContent": "", // 微信支付公钥内容
    },
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 参数的获取方式

  • 1、appId 微信appId:去微信后台查看。

  • 2、mchId 微信支付商户id:去微信支付后台查看。

  • 3、v3Key api v3的密钥:去微信支付后台查看。

  • 4、appCertPath 商家应用证书(apiclient_cert.pem)的路径

  • 5、appPrivateKeyPath 商家私钥证书(apiclient_key.pem)的路径

先把1-5的参数先填完,然后运行 vk-uni-pay 示例项目,将项目根目录 使用帮助/7、vk-pay云函数示例代码/service/pay/getWxpayPublicCert.js 文件复制到 uniCloud/cloudfunctions/vk-pay/service/pay/ 目录中,然后启动项目,点击【获取微信支付v3平台证书】按钮,在浏览器控制台可看到证书信息。

  • 6、wxpayPublicCertSn 微信支付公钥证书的序列号(运行插件示例项目后获取)

  • 7、wxpayPublicCertContent 微信支付公钥内容(运行插件示例项目后获取)

wxpayPublicCertContent 参数的值(需保持一行)(下方有小技巧)

秘钥文件内容转换为一行小技巧,高手可忽略

  1. 打开谷歌浏览器,打开任意页面,再按F12
  2. 找到Console选项卡,这里可以执行简单的js
  3. -----BEGIN PRIVATE KEY....不管换行不换行,都是字符串 一定要用这个反单引号(就是键盘Tab上面那个键)框住apiclient_key.pem内的内容,按一下回车,自动把换行转化为\n

你也可以直接访问下面的链接快速转换并复制证书内容

传送门 - 证书转换成一行 (opens new window)

# 设置IP白名单

微信转账需要设置IP白名单,前往 微信支付后台 (opens new window) - 上方菜单产品中心 - 找到商家转账到零钱 - 设置

# 腾讯云空间

前往unicloud控制台,打开转账对应的云函数详情,开启固定IP即可。

# 阿里云空间

直接把下面的ip都加到微信支付后台 (opens new window)即可。

代理服务器IP列表

47.92.132.2
47.92.152.34
47.92.87.58
47.92.207.183
8.142.185.204
1
2
3
4
5

# 支付宝云空间

直接把下面的ip都加到微信支付后台 (opens new window)即可。

固定出口IP列表

47.97.38.108
112.124.10.115
1
2

注意:上面的IP是云端运行时的IP,若是本地运行云函数,则需要把自己电脑的外网IP加进去

注意:

  • 1、只支持微信支付V3版本,不支持微信支付V2版本
  • 2、转账前请保证微信支付商户号内有足够的余额(有些分运营账户和基本账户的,请充值到运营账户中,支出款项都由运营账户出资,下单收款都收到基本账户。)