Nodejs实现微信分账的示例代码

yizhihongxing

让我来为你详细讲解 Node.js 实现微信分账的示例代码攻略。

一、前置准备

在开始编写代码之前,你需要先完成一些前置准备工作:

  1. 需要在微信支付商户平台中开通分账功能,具体操作方法可参考官方文档。

  2. 下载安装 Node.js 环境。

  3. 创建一个新的 Node.js 项目,安装 wechatpay-axios-pluginxml2js 模块,在项目根目录下执行以下命令:

shell
npm install wechatpay-axios-plugin xml2js --save

二、分账 API 使用流程

我们先来简要介绍一下分账 API 的使用流程:

  1. 请求授权接口,获取接口调用凭证。

  2. 发起分账请求,调用“请求分账 API”。

  3. 查询分账结果,调用“查询分账结果 API”。

下面我们就分别来详细说明这三个步骤。

三、请求授权接口

const axios = require('axios').default;

const config = {
  mchid: 'YOUR_MCH_ID',
  secret: 'YOUR_MCH_SECRET',
};

async function getAuthCode() {
  const url = 'https://api.mch.weixin.qq.com/v3/applyment4sub/sub_merchants/changeloginid';
  const data = {
    login_id: 'YOUR_SUB_MCH_ID',
  };
  const nonceStr = 'Wm3WZYTPz0wzccnW';
  const timestamp = (new Date().getTime() / 1000).toFixed(0);
  const message = {
    method: 'POST',
    url: url.replace(/https:\/\/[\w/.]+/, ''),
    nonce_str: nonceStr,
    timestamp: timestamp,
    body: JSON.stringify(data),
  };
  const signature = genSignature(message, config.secret);
  const headers = {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'Authorization': `WECHATPAY2-SHA256-RSA2048 mchid="${config.mchid}",serial_no="${serialNo}",timestamp="${timestamp}",nonce_str="${nonceStr}",signature="${signature}"`,
  };
  const resp = await axios.post(url, data, { headers });
  return resp.data.authorization_code;
}

这段代码演示了如何请求授权接口,获取接口调用凭证 authorization_code。其中,需要传入商户号和子商户号,以及生成签名的密钥等参数。

四、发起分账请求

const axios = require('axios').default;
const { parseStringPromise } = require('xml2js');

const config = {
  mchid: 'YOUR_MCH_ID',
  secret: 'YOUR_MCH_SECRET',
};

async function profitSharing(req) {
  const url = 'https://api.mch.weixin.qq.com/secapi/pay/profitsharing';
  const amount = req.amount;
  const receiverList = req.receiverList;
  const data = {
    transaction_id: req.transactionId,
    out_order_no: req.outOrderNo,
    receivers: receiverList.map(receiver => ({
      type: 'MERCHANT_ID',
      account: receiver.account,
      name: receiver.name,
      amount: Math.floor(receiver.amount * 100),
      description: receiver.description,
    })),
  };
  const nonceStr = 'Wm3WZYTPz0wzccnW';
  const timestamp = (new Date().getTime() / 1000).toFixed(0);
  const message = {
    method: 'POST',
    url: url.replace(/https:\/\/[\w/.]+/, ''),
    nonce_str: nonceStr,
    timestamp: timestamp,
    body: JSON.stringify(data),
  };
  const serialNo = await getSerialNo();
  const signature = genSignature(message, config.secret);
  const headers = {
    'Content-Type': 'application/xml',
    'Accept': 'application/xml',
    'Authorization': `WECHATPAY2-SHA256-RSA2048 mchid="${config.mchid}",serial_no="${serialNo}",timestamp="${timestamp}",nonce_str="${nonceStr}",signature="${signature}"`,
  };
  const resp = await axios.post(url, data, { headers });
  const resData = await parseStringPromise(resp.data, { explicitArray: false });
  return {
    code: resData.xml.return_code,
    message: resData.xml.return_msg,
    data: resData.xml,
  };
}

这段代码演示了如何发起分账请求,其中需要传入分账金额、分账接收方列表、接口调用凭证等参数,并对参数进行处理,最后生成签名并发送请求。请求结果返回之后,将返回码和返回消息封装在一个对象中返回。

五、查询分账结果

const axios = require('axios').default;
const { parseStringPromise } = require('xml2js');

const config = {
  mchid: 'YOUR_MCH_ID',
  secret: 'YOUR_MCH_SECRET',
};

async function queryProfitSharing(req) {
  const url = 'https://api.mch.weixin.qq.com/pay/profitsharingquery';
  const data = {
    transaction_id: req.transactionId,
    out_order_no: req.outOrderNo,
  };
  const nonceStr = 'Wm3WZYTPz0wzccnW';
  const timestamp = (new Date().getTime() / 1000).toFixed(0);
  const message = {
    method: 'GET',
    url: url.replace(/https:\/\/[\w/.]+/, ''),
    nonce_str: nonceStr,
    timestamp: timestamp,
    query: data,
  };
  const serialNo = await getSerialNo();
  const signature = genSignature(message, config.secret);
  const headers = {
    'Content-Type': 'application/xml',
    'Accept': 'application/xml',
    'Authorization': `WECHATPAY2-SHA256-RSA2048 mchid="${config.mchid}",serial_no="${serialNo}",timestamp="${timestamp}",nonce_str="${nonceStr}",signature="${signature}"`,
  };
  const resp = await axios.get(url, { params: data, headers });
  const resData = await parseStringPromise(resp.data, { explicitArray: false });
  return {
    code: resData.xml.return_code,
    message: resData.xml.return_msg,
    data: resData.xml,
  };
}

这段代码演示了如何查询分账结果,其中需要传入分账订单号、商户订单号等参数,并生成签名并发送请求。请求结果返回之后,将返回码和返回消息封装在一个对象中返回。

六、示例说明

下面我们来举两个例子说明如何使用上述代码实现微信分账:

1. 发起分账请求

const receiverList = [
  {
    account: 'YOUR_SUB_MCH_ID',
    name: '微信支付分配的商户号',
    amount: 100,
    description: '分账测试1',
  },
  {
    account: 'ANOTHER_SUB_MCH_ID',
    name: '微信支付分配的另一个商户号',
    amount: 50,
    description: '分账测试2',
  },
];

const req = {
  transactionId: 'YOUR_TRANSACTION_ID', // 微信订单号
  outOrderNo: 'YOUR_OUT_ORDER_NO', // 商户分账单号
  amount: 150, // 分账总金额
  receiverList, // 分账接收方列表
};

const res = await profitSharing(req);
console.log(res);

以上代码将请求发起并接收返回结果。

2. 查询分账结果

const req = {
  transactionId: 'YOUR_TRANSACTION_ID', // 微信订单号
  outOrderNo: 'YOUR_OUT_ORDER_NO', // 商户分账单号
};

const res = await queryProfitSharing(req);
console.log(res);

以上代码将请求发起并接收返回结果。

以上是 Node.js 实现微信分账的示例代码的完整攻略。如果你有问题,欢迎在评论区留言。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Nodejs实现微信分账的示例代码 - Python技术站

(1)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • 搭建基于express框架运行环境的方法步骤

    下面是搭建基于express框架运行环境的详细攻略步骤: 环境准备 确保已安装node.js和npm包管理器,并且版本符合express框架的要求。 安装express框架,使用npm安装 npm install -g express-generator。 创建express应用 创建应用,使用 express [应用名称] 命令创建一个基本的express…

    node js 2023年6月8日
    00
  • Nodejs学习item【入门手上】

    Node.js学习Item【入门手册】 这是一份Node.js入门手册,旨在为初学者提供指导和帮助。本手册将介绍Node.js基本概念、安装、使用、等内容。 一、Node.js是什么? Node.js是一个基于Chrome V8 JavaScript引擎的软件平台,用于构建快速的、可扩展的网络应用程序。它采用事件驱动、非阻塞I/O模型,使其变得轻量且高效。 …

    node js 2023年6月8日
    00
  • nodejs 图解express+supervisor+ejs的用法(推荐)

    下面来详细讲解“nodejs 图解express+supervisor+ejs的用法(推荐)”的完整攻略。 什么是Express、Supervisor、EJS Express Express是一个node.js的web应用框架,它提供了一系列的功能,可以帮助我们快速搭建Web应用或者API。 Supervisor Supervisor是在开发过程中监控nod…

    node js 2023年6月8日
    00
  • Babel 入门教程学习笔记

    Babel 入门教程学习笔记 什么是 Babel Babel 是一个广泛使用的 JavaScript 编译器,它能将 ECMAScript 2015+ 代码转换为向后兼容的 JavaScript 代码。这意味着,我们可以使用最新的 JavaScript 语言特性开发项目,同时也可以保证代码在现有的浏览器和环境中执行正确。 安装 Babel 安装 Babel …

    node js 2023年6月8日
    00
  • JavaScript控制台的更多功能

    当使用JavaScript编写代码时,开发人员通常会使用控制台来测试和调试代码。除了基本的日志输出和调试器之外,JavaScript控制台还提供了许多其他有用的功能。下面是一些JavaScript控制台的高级功能,包括如何使用控制台进行网络检查、时间测量和代码分析等。 使用控制台检查网络 通过控制台,我们可以使用fetch命令或XMLHttpRequest对…

    node js 2023年6月8日
    00
  • [将免费进行到底]在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客

    下面是将免费进行到底在Amazon的一年免费服务器上安装Node.JS、NPM和OurJS博客的详细攻略。 确定Amazon实例类型 首先,我们需要在Amazon AWS上选择一种合适的实例类型。根据实际需求,我们可以选择不同的实例类型。此处我们选择性价比较高的t2.micro实例。选择该实例类型的原因在于其拥有1GB内存和1 vCPU的计算能力,并且可以免…

    node js 2023年6月8日
    00
  • Docker安装、创建镜像、加载并运行NodeJS程序的详细过程

    Docker是一种轻量级的虚拟化技术,通过将应用程序和依赖项打包在一个独立的容器中,使得应用程序可以在不同的环境中运行,而不需要担心环境的不一致性。在NodeJS开发中,使用Docker可以方便地管理应用程序的依赖,以及在本地和云端之间进行部署。 以下是Docker安装、创建镜像、加载并运行NodeJS程序的详细过程。 安装Docker Docker可以在官…

    node js 2023年6月8日
    00
  • Windows Server 2012 R2 Standard搭建ASP.NET Core环境图文教程

    下面是本文的详细讲解。 Windows Server 2012 R2 Standard搭建ASP.NET Core环境图文教程 安装.NET Framework 首先,我们需要安装.NET Framework。打开服务器管理器,进入“角色”->“添加角色或功能”,在弹窗中选择“角色服务”,找到“.NET Framework 4.5 Features”,…

    node js 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部