实现微信支付提现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

相关推荐

  • 在微信公众号开发中获取 access_token 调用微信服务器端接口

    在微信公众号开发中,获取 access_token 是调用微信服务器端接口的第一步。access_token 是接口调用的凭据,可以通过微信公众号的接口调用。 以下是获取 access_token 的步骤和代码示例: 1. 获取 Access Token 的接口 调用微信服务器接口获取 access_token: 接口地址: 返回示例: access_tok…

    2024年12月3日
    00
  • 如何使用uni-app-qrcode插件生成二维码?

    以下是使用uni-app-qrcode插件生成二维码的详细步骤: 安装插件 或者使用yarn进行安装: 引入插件 使用插件生成二维码 上述代码中,首先定义了要编码到二维码中的内容content和生成二维码的配置选项options,然后通过this.$refs.qrcodeCanvas获取页面中的canvas元素,最后调用QRCode.make方法生成二维码。…

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

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

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

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

    2024年12月2日
    00
  • Unity 项目升级URP/HDRP渲染管线时如何解决材质丢失问题

    在 Unity 项目中升级到 URP(通用渲染管线) 或 HDRP(高清渲染管线) 后,材质丢失是一个常见问题。这通常是因为原来的材质或着色器不兼容新渲染管线,需要手动调整或重新配置。以下是详细的解决方法: 1. 理解渲染管线的变化 2. 自动转换材质(官方工具) Unity 提供了从 Built-in 渲染管线迁移到 URP 或 HDRP 的官方工具,可以…

    2024年11月25日
    00
  • uni-app 中的一个 API,uni.getLocation用于获取用户的地理位置信息

    uni.getLocation 是 uni-app 中的一个 API,用于获取用户的地理位置信息。它可以通过 GPS 或网络方式获取当前位置,并提供包括经纬度、速度、精度等信息。这个 API 在移动端(如安卓、iOS)和 H5 平台上均可使用。基本语法 参数说明type(可选):指定位置的坐标类型。支持 ‘wgs84’ 和 ‘gcj02’,默认值为 ‘wgs…

    2024年11月28日
    00
  • Jeewx-Api 1.3.1 发布:更简易的微信小程序开发 API 降低了开发成本

    Jeewx-Api 1.3.1 发布:更简易的微信小程序开发 API Jeewx-Api 是一款开源的微信开发 SDK,支持微信公众号、小程序、企业微信等全场景开发。1.3.1 版本针对小程序功能做了全面优化,为开发者提供了更简洁易用的 API,降低了开发成本。 1. 新版本亮点 支持微信小程序功能 更简洁的 API 支持企业微信与公众号 2. Jeewx-…

    2024年12月3日
    00
  • 微信小程序配置onShareTimeline分享到朋友圈的问题

    在微信小程序中使用 onShareTimeline 来实现分享到朋友圈的功能时,可能会遇到开发者工具中的功能灰色不可用或真机调试时无法分享的问题。下面是一些可能的原因和解决方法: 1. 检查小程序的分享功能是否已经启用 确保你在小程序的 app.json 或者页面的 json 配置文件中正确配置了分享功能。 在 app.json 或页面的 json 文件中添…

    2024年11月24日
    00
  • 使用 VS Code 管理 Git 仓库详细使用指南

    使用 VS Code 管理 Git 仓库,可以通过其直观的图形界面和终端功能完成常见的版本控制操作,如克隆、提交、分支管理等。以下是一个详细的使用指南,帮助你高效地使用 VS Code 和 Git。 1. 环境准备安装必要工具安装 Git:从 Git 官网 下载并安装。安装 VS Code:从 VS Code 官网 下载并安装。安装 Git 插件(可选):在…

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

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

    2024年11月23日
    00
  • 在 Android 中 Matrix 实现图像的缩放和裁剪将 Glide 图像从 fitCenter 转换为 centerCrop

    在 Android 中,Matrix 可以用来实现图像的缩放和裁剪逻辑。要将 Glide 图像从 fitCenter 转换为 centerCrop,需要通过 Matrix 计算变换逻辑。以下是使用 Kotlin 实现的方法:实现步骤计算目标变换矩阵:根据目标宽高比,判断是否需要横向或纵向裁剪。设置 Matrix:使用 Matrix 执行缩放和平移操作。应用到…

    2024年12月3日
    00
  • 在IOS中使用WebView内嵌H5页面,使用a标签点击跳转无效的问题

    在 iOS 中,使用 WebView 嵌入 H5 页面时,可能会遇到点击 <a> 标签跳转无效的问题。这个问题通常是由于 iOS WebView 的默认行为或配置导致的,特别是在使用 UIWebView 或 WKWebView 时。以下是几种解决方法,可以帮助解决这个问题。 1. 使用 WKWebView 替代 UIWebView 首先,确保你使…

    2024年11月23日
    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
  • 微信小程序Map地图使用详细教程,获取小程序定位,绑定地图点击事件

    在微信小程序中,地图功能可以通过 Map 组件来实现,结合定位和点击事件,可以实现丰富的地图交互功能。下面将详细讲解如何使用 Map 组件,包括获取小程序定位、绑定地图点击事件等功能。 1. 在小程序中使用 Map 地图 (1) 引入 Map 组件 在小程序页面的 .wxml 文件中,使用 <map> 组件来嵌入地图。该组件支持显示地图、定位、缩…

    2024年11月23日
    00
  • 搭建一个基于 Node.js 和 MySQL 的微信小程序

    搭建一个基于 Node.js 和 MySQL 的微信小程序后台可以帮助你管理数据、处理请求、存储用户信息等。下面是如何从头开始搭建一个基本的微信小程序后台系统的详细步骤。 1. 环境准备 确保你已经安装以下开发工具: 2. 创建 Node.js 项目 首先,创建一个新的 Node.js 项目: 2. 安装必要的依赖包: 使用以下命令安装这些依赖: 配置 My…

    2024年11月24日
    00

发表回复

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

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信