微信商家转账功能为商户提供向用户微信零钱转账的服务,具有免费、安全、实时到账的特点。该功能已于2025年1月15日完成升级,新版取消了收款用户管理和商户出资确认功能。
官方提现功能实现链接和官方内容:https://pay.weixin.qq.com/doc/v3/merchant/4012711988
主要特点:
商户需按以下步骤开通权限:
在商户平台完成资金充值后,方可发起转账操作。(是一个单独的账户,需要自己先充值进去测试一下)
注:该功能暂时在微信开发工具上无法测试,只能通过真机测试。
微信商家转账功能的完整实现流程可分为以下几个步骤:
以下是对前端代码的逐部分解析:
const putPcsOrder = () => {
// 表单验证
if (!validateForm()) return;
// 准备转账参数
const params = {
memberId: memberStore.profile.id, // 用户ID
type: , // 转账类型
comment: "这是备注信息", // 转账备注(用户可见)
amount: withdrawAmount.value, // 转账金额
name: userName.value, // 收款人姓名(用于实名校验)
withdrawals: {
comment: "这是备注信息", // 商户系统内部备注
},
};
关键参数说明:
memberId
:商户系统内的用户唯一标识type
:区分不同类型的转账业务amount
:转账金额(单位:元)name
:当金额>2000元时必须提供,用于实名验证 // 调用后端API准备转账参数
putPcsOrderAPI(params)
.then((res) => {
// 获取微信支付参数
jsWApiParams({
packageParam: res.v,
})
后端处理逻辑:
package
.then((resjsWApiParams) => {
// 检查微信API可用性
if (wx.canIUse("requestMerchantTransfer")) {
// 调用微信转账API
wx.requestMerchantTransfer({
mchId: resjsWApiParams.mchId, // 微信商户号
appId: resjsWApiParams.appId, // 公众号/小程序APPID
package: resjsWApiParams.package, // 加密的转账数据包
success: (res) => {
// 处理成功情况
uni.navigateTo({
url: "/pages/main/index?index=4",
});
},
fail: (res) => {
console.log("转账失败:", res);
// 这里应添加失败处理逻辑
},
});
微信API参数说明:
mchId
:微信支付商户号appId
:发起转账的公众号/小程序IDpackage
:包含转账详情的加密数据包效果展示:
完整代码:
const putPcsOrder = () => {
putPcsOrderAPI({
memberId: memberStore.profile.id,
type: ,
comment: "这是备注信息",
amount: withdrawAmount.value,
name: userName.value,
withdrawals: {
comment: "这是备注信息",
},
})
.then((res) => {
console.log(res, "jsWApiParams");
jsWApiParams({
package: res.v,
packageParam: res.v,
}).then((resjsWApiParams) => {
console.log(resjsWApiParams, "resjsWApiParams");
if (wx.canIUse("requestMerchantTransfer")) {
wx.requestMerchantTransfer({
mchId: resjsWApiParams.mchId,
appId: resjsWApiParams.appId,
package: resjsWApiParams.package,
success: (res) => {
// res.err_msg将在页面展示成功后返回应用时返回ok,并不代表付款成功
console.log("success:", res);
uni.navigateTo({
url: "/pages/main/index?index=4",
success: () => {
console.log("跳转到支付成功页");
},
});
},
fail: (res) => {
console.log("fail:", res);
},
});
} else {
wx.showModal({
content: "你的微信版本过低,请更新至最新版本。",
showCancel: false,
});
}
});
})
.catch((err) => {
console.log(err);
});
};
} else {
// 微信版本过低处理
wx.showModal({
content: "你的微信版本过低,请更新至最新版本。",
showCancel: false,
});
}
});
})
.catch((err) => {
// API调用错误处理
console.log(err);
});
};
虽然前端代码中不直接体现,但后端需要完成以下关键操作:
// 伪代码示例
function generateTransferOrder(params) {
// 1. 验证用户信息
const user = validateUser(params.memberId);
// 2. 检查余额
if (user.balance < params.amount) {
throw new Error('余额不足');
}
// 3. 生成商户订单号
const outTradeNo = generateOutTradeNo();
// 4. 准备微信转账参数
const wechatParams = {
mchid: config.wechat.mchId,
appid: config.wechat.appId,
out_trade_no: outTradeNo,
amount: params.amount * , // 转为分
desc: params.comment,
...
};
// 5. 生成签名
wechatParams.sign = generateSign(wechatParams);
// 6. 返回加密后的package
return {
v: encryptPackage(wechatParams)
};
}
根据业务场景不同,转账实现有所差异:
// 需要额外传入场景信息
const params = {
...baseParams,
scene: 'MARKETING', // 营销场景
sceneInfo: {
activityName: '新用户注册奖励',
rewardDesc: '首次注册赠送'
}
};
const params = {
...baseParams,
scene: 'COMMISSION', // 佣金场景
sceneInfo: {
positionType: '销售代表',
rewardDesc: '2023年Q3销售提成'
},
userPerception: '劳务报酬' // 用户看到的收款原因
};
const params = {
...baseParams,
scene: 'COMPENSATION', // 赔付场景
sceneInfo: {
reason: '商品质量问题退款'
},
userPerception: '商家赔付'
};
通过以上详细实现方案,商户可以安全、稳定地集成微信商家转账功能,满足各种业务场景下的资金发放需求。