这里只涉及到node后端代码逻辑,前端只需要调用退款接口,传递订单号给后端。后端去根据订单号查询原订单信息
一、准备工作
1、商户证书配置
微信商户平台 → 账户中心 → API安全 → 下载以下文件:
API 证书(.p12 文件):用于退款接口双向认证
API 密钥(32位字符串):与支付功能共用
将证书文件(如 apiclient_cert.p12)保存到项目安全目录(如 certs/),切勿提交到代码仓库。
2、依赖安装
npm install axios xml2js fs https
二、退款接口核心实现
1.退款请求代码
// src/services/wechat-refund.js
const crypto = require('crypto');
const axios = require('axios');
const {
parseStringPromise } = require('xml2js');
const fs = require('fs');
const path = require('path');
const config = require('../config/wechat-config');
// 加载商户证书(需绝对路径)
const certPath = path.resolve(__dirname, '../certs/apiclient_cert.p12');
/**
* 微信支付退款
* @param {Object} refundData 退款参数
* @returns {Promise<Object>} 退款结果
*/
async function requestRefund(refundData) {
// 基本参数
const params = {
appid: config.appId,
mch_id: config.mchId,
nonce_str: Math.random().toString(36).substr(2, 15), // 随机字符串生成函数
out_trade_no: refundData.out_trade_no, // 原支付订单号
out_refund_no: `REFUND_${
Date.now