实现微信支付提现api接口教程

微信支付的提现功能,通常是通过调用 企业付款到零钱 API企业付款到银行卡 API 来实现的。以下是如何使用微信支付提现 API 的详细教程,包括其前置条件、接口调用以及注意事项。

1. 准备工作

1.1. 开通微信支付商户号

  1. 登录 微信支付商户平台
  2. 确保你的商户号已开通 企业付款到零钱企业付款到银行卡 功能。如果没有开通,可以联系微信支付客服申请开通。

1.2. 配置证书

  • 提现 API 调用需要使用商户的 API 证书 进行身份认证。
  • 登录微信支付商户后台,下载以下证书:
    • 商户证书(apiclient_cert.pem)
    • 私钥文件(apiclient_key.pem)
    • CA 证书(rootca.pem)

将这些文件保存在你的服务器上,用于发起 HTTPS 请求。

1.3. 获取 API 密钥

  • 在微信支付商户后台,设置并记住 API 密钥(一个 32 字符的字符串),用于生成签名。

2. 企业付款到零钱接口

2.1. 接口说明

  • URL:https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers
  • 功能:将商户号的资金提现到指定用户的微信零钱。

2.2. 参数说明

参数是否必填类型说明
mch_appidString商户账号对应的小程序或公众号的 AppID
mchidString商户号
nonce_strString随机字符串
signString签名
partner_trade_noString商户订单号(唯一)
openidString用户的 OpenID
check_nameString校验用户姓名选项(NO_CHECKFORCE_CHECK
amountInt转账金额(单位:分)
descString转账描述信息
spbill_create_ipString调用接口的服务器 IP

2.3. 调用示例

以下是基于 Node.js 的调用示例:

const fs = require('fs');
const https = require('https');
const crypto = require('crypto');
const { parseString } = require('xml2js');

function generateNonceStr() {
  return Math.random().toString(36).substr(2, 15);
}

function generateSign(params, key) {
  const stringA = Object.keys(params)
    .sort()
    .map((k) => `${k}=${params[k]}`)
    .join('&');
  const stringSignTemp = `${stringA}&key=${key}`;
  return crypto.createHash('md5').update(stringSignTemp, 'utf8').digest('hex').toUpperCase();
}

function postXml(url, xml, options) {
  return new Promise((resolve, reject) => {
    const req = https.request(url, options, (res) => {
      let data = '';
      res.on('data', (chunk) => (data += chunk));
      res.on('end', () => {
        parseString(data, { explicitArray: false }, (err, result) => {
          if (err) reject(err);
          resolve(result.xml);
        });
      });
    });
    req.on('error', (e) => reject(e));
    req.write(xml);
    req.end();
  });
}

// 配置参数
const url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
const mch_appid = 'YOUR_APPID';
const mchid = 'YOUR_MCHID';
const key = 'YOUR_API_KEY';
const certPath = '/path/to/apiclient_cert.pem';
const keyPath = '/path/to/apiclient_key.pem';

const params = {
  mch_appid,
  mchid,
  nonce_str: generateNonceStr(),
  partner_trade_no: `ORDER${Date.now()}`,
  openid: 'USER_OPENID',
  check_name: 'NO_CHECK',
  amount: 100, // 1元 = 100分
  desc: '提现测试',
  spbill_create_ip: 'SERVER_IP',
};

params.sign = generateSign(params, key);

// 构造 XML 数据
const xmlData = `
<xml>
  ${Object.keys(params)
    .map((key) => `<${key}>${params[key]}</${key}>`)
    .join('')}
</xml>`;

// HTTPS 请求配置
const options = {
  method: 'POST',
  key: fs.readFileSync(keyPath),
  cert: fs.readFileSync(certPath),
  ca: fs.readFileSync('/path/to/rootca.pem'),
  headers: {
    'Content-Type': 'text/xml',
  },
};

// 发起请求
postXml(url, xmlData, options)
  .then((response) => {
    console.log('微信返回数据:', response);
  })
  .catch((err) => {
    console.error('请求失败:', err);
  });

3. 企业付款到银行卡接口

3.1. 接口说明

  • URL:https://api.mch.weixin.qq.com/mmpaysptrans/pay_bank
  • 功能:将商户号的资金提现到指定用户的银行卡。

3.2. 参数补充

相比零钱接口,提现到银行卡需要提供以下额外信息:

  • 银行账号:加密后的银行卡号。
  • 开户人姓名:加密后的姓名。
  • 开户行编号:具体银行的编号(微信支付文档提供编号列表)。

3.3. RSA 加密银行卡信息

银行卡号和开户人姓名需要通过微信支付提供的 RSA 公钥加密后发送。

加密示例:

const crypto = require('crypto');
const fs = require('fs');

function encryptWithPublicKey(data, publicKeyPath) {
  const publicKey = fs.readFileSync(publicKeyPath, 'utf8');
  return crypto.publicEncrypt(publicKey, Buffer.from(data)).toString('base64');
}

// 示例
const encryptedAccount = encryptWithPublicKey('银行卡号', '/path/to/wechat_public_key.pem');

4. 注意事项

  1. 资金流转限制
    • 确保商户号余额充足,且提现金额不超过商户号可用余额。
  2. 提现手续费
    • 微信支付可能会收取一定比例的手续费,具体费率可以在商户后台查询。
  3. 敏感信息加密
    • 银行卡号和姓名等敏感信息需要加密处理,使用微信提供的公钥进行 RSA 加密。
  4. 重复请求
    • 微信支付可能会因网络问题重复发送结果通知。确保商户订单号(partner_trade_no)是唯一的,避免重复处理。
  5. 安全性
    • 确保 API 密钥和证书文件的安全,避免泄露。

通过调用微信支付的提现 API,可以实现资金从商户号提现到用户的零钱或银行卡。根据需求选择合适的提现方式,并按照文档规范实现调用逻辑。

发布者:myrgd,转载请注明出处:https://www.object-c.cn/4504

Like (0)
Previous 2024年11月24日 下午7:06
Next 2024年11月24日 下午7:35

相关推荐

  • 在使用 uni-app 开发小程序或移动端应用时 title image失效问题

    在使用 uni-app 开发小程序或移动端应用时,若发现 分享的标题(title) 和 图片(image) 配置无效,可能是由于配置错误、平台限制或代码逻辑问题。以下是排查和解决问题的详细指南: 1. 确保正确使用分享 API onShareAppMessage(自定义转发) 确保在 pages 的页面代码中正确使用了 onShareAppMessage 方…

    2024年11月25日
    00
  • Java 8 到 Java 17 的升级涉及一些关键变化

    JDK 8 升级到 JDK 17 指南Java 8 到 Java 17 的升级涉及一些关键变化,包括语言特性、API 更新和性能改进。以下是一些升级要点:语法和语言特性:记录类(Record Class):Java 14 引入了记录类,提供了一种简化创建不可变数据对象的方式。密封类(Sealed Classes):Java 15 引入了密封类,允许开发者限制…

    2024年11月27日
    00
  • 在使用 PHP 抓取 HTTPS 资源时,会遇到一些常见问题

    在使用 PHP 抓取 HTTPS 资源时,可能会遇到一些常见问题。这些问题通常与 SSL 配置、证书验证或 PHP 设置相关。以下是常见问题及其解决方法的汇总: 1. SSL 证书验证失败问题描述当使用 file_get_contents、cURL 等方法访问 HTTPS 资源时,可能会遇到类似以下错误: 解决方法更新 cacert.pem 文件下载最新的根…

    2024年12月2日
    00
  • pywebview 页面请求数据总是报错:TypeError: Cannot read properties of undefined (reading ‘api’)

    pywebview 中的 TypeError: Cannot read properties of undefined (reading ‘api’) 错误通常意味着 JavaScript 代码试图访问一个未定义的对象或属性(如 api)。这种问题通常出现在 Python 与前端 JavaScript 交互时,可能是由于以下原因:可能的原因及解决方法:Jav…

    2024年11月27日
    00
  • 微信小程序设计和实现一个校园音乐应用的方法

    基于微信小程序设计和实现一个校园音乐平台,主要包括以下几个方面的设计与功能实现: 1. 需求分析 1.1 功能需求 1.2 非功能需求 2. 技术架构设计 2.1 前端:微信小程序 2.2 后端 2.3 技术栈 3. 数据库设计 表结构示例: 4. 功能实现 4.1 用户登录与注册 4.2 音乐播放 4.3 歌单与榜单 4.4 评论功能 5. 部署与优化 5…

    2024年11月26日
    00
  • Android 解决 “Module was compiled with an incompatible version of Kotlin“

    “Module was compiled with an incompatible version of Kotlin” 错误通常出现在 Android 开发中,因为模块的 Kotlin 编译器版本与项目中的 Kotlin 编译器版本不匹配。以下是解决此问题的方法: 1. 检查 Kotlin 插件版本步骤:打开 Android Studio。点击顶部菜单的 …

    2024年11月26日
    00
  • 不同版本ffmpeg压缩比差距很大的问题(使用videotoolbox硬编码)

    不同版本的 FFmpeg 在使用 videotoolbox 硬件编码时,压缩比差距较大的问题,通常与以下几个因素相关:1. FFmpeg 硬件编码支持的变化:FFmpeg 集成了多种硬件加速技术(例如在 macOS 上使用 videotoolbox),而随着版本的更新,FFmpeg 可能对硬件编码进行了修复、改进或修改,这些变化可能会导致不同版本之间的压缩效…

    2024年11月27日
    00
  • 使用uni-app微信小程序生成邀请码邀请好友注册

    在 uni-app 中实现微信小程序的邀请功能,可以通过生成邀请码来邀请好友注册。这个过程通常包括生成唯一的邀请码、分享链接生成二维码,以及接收邀请并使用邀请码完成注册等步骤。下面详细介绍如何在 uni-app 中实现这个功能。 1. 设计邀请码生成规则 首先,需要设计邀请码的生成规则。一般来说,邀请码是一个随机生成的字符串或者是与用户ID相关联的字符串。为…

    2024年11月23日
    00
  • 微信小程序开发中使用 Tailwind CSS 提高开发效率和代码的可维护性

    Tailwind CSS 是一个利用原子化 CSS 类来构建用户界面的框架,在微信小程序开发中使用 Tailwind CSS 可以提高开发效率和代码的可维护性。以下是在微信小程序中使用 Tailwind CSS 进行原子 CSS 开发的具体步骤: 安装 Tailwind CSS 配置 Tailwind CSS 引入样式:在微信小程序的全局样式文件app.wx…

    2024年12月15日
    00
  • 微信小程序使用 map 组件实现拖动地图并获取当前地图中心的经纬度

    在微信小程序中,使用 map 组件可以轻松实现拖动地图并获取当前地图中心的经纬度。以下是实现步骤和代码示例: 实现思路 代码实现 1. 页面 WXML 添加 map 组件并设置属性。 2. 页面 WXSS 定义地图样式和中心点标记样式。 3. 页面 JS 初始化地图中心点的经纬度,并监听地图拖动。 4. 中心点图标 将一个中心标记图标放置在地图中间。可以在小…

    2024年11月25日
    00
  • 微信小程序错误提示 does not have a method “onShareTimeline”

    当在微信小程序中尝试实现分享到朋友圈功能时,如果你在控制台遇到 does not have a method “onShareTimeline” 错误,这通常是由于以下原因之一: 1. 检查基础库版本 onShareTimeline 是在小程序基础库 2.11.3 及以上版本支持的。如果当前开发者工具的基础库版本较低,会导致方法无法找到。 解决方法: 2. …

    2024年11月26日
    00
  • 在 Linux 系统上配置 Hadoop 环境,包括创建 hadoop 用户、更新 apt、安装 SSH 和配置 Java 环境

    以下是详细的步骤,用于在 Linux 系统上配置 Hadoop 环境,包括创建 hadoop 用户、更新 apt、安装 SSH 和配置 Java 环境。 1. 创建 Hadoop 用户创建一个名为 hadoop 的新用户: 根据提示设置密码和用户信息。 将 hadoop 用户添加到 sudo 组(可选): 切换到 hadoop 用户: 2. 更新 APT 包…

    2024年12月1日
    00
  • 多方面的优化包括启动时间、React Native 速度提升 550% 运行时性能以及渲染效率的提升

    React Native 速度提升 550% 可能涉及多方面的优化,包括启动时间、运行时性能以及渲染效率的提升。这通常是通过框架改进、代码优化和工程实践的结合来实现的。以下是实现 React Native 性能大幅提升的一些关键方法和策略: 1. 启动时间优化 1.1 减少 JS Bundle 大小 1.2 预加载资源 1.3 使用优化的原生模块 2. 渲染…

    2024年12月7日
    00
  • 在 uni-app 小程序中,使用 uni.getLocation 获取用户位置信息等

    在 uni-app 小程序 中,使用 uni.getLocation 获取用户位置后,可以通过 腾讯地图 API 将经纬度转化为详细的地址信息(如省、市、区、街道等)。以下是完整的操作流程: 1. 前置准备:开通腾讯地图 API 服务注册腾讯位置服务账号:登录 腾讯位置服务官网。创建项目并获取 Key:进入 控制台,创建新应用,选择 小程序。获取生成的 ke…

    2024年11月26日
    00
  • JavaScript 前端开发:从入门到精通的方法

    JavaScript 是前端开发的核心语言,它与 HTML 和 CSS 一起构成了 Web 开发的基础。要从入门到精通 JavaScript 前端开发,需要系统化的学习方法和实践。以下是详细的方法和步骤。 1. 理解 JavaScript 的基础 1.1 学习基础语法 1.2 理解函数 箭头函数: 1.3 掌握 DOM 操作 修改内容: 监听事件: 1.4 …

    2024年11月22日
    00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信