From 84a9fb5c780cfa1315980311d61076c63e8eb24d Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 8 Jun 2026 08:43:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=20H5=20=E5=85=AC?= =?UTF-8?q?=E4=BC=97=E5=8F=B7=E5=BE=AE=E4=BF=A1=E5=95=86=E5=AE=B6=E8=BD=AC?= =?UTF-8?q?=E8=B4=A6=E7=A1=AE=E8=AE=A4=E6=94=B6=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/commission/withdraw.vue | 2 +- sheep/libs/sdk-h5-weixin.js | 49 +++++++++++++++++++ .../provider/wechat/officialAccount.js | 26 ++++++++++ 3 files changed, 76 insertions(+), 1 deletion(-) diff --git a/pages/commission/withdraw.vue b/pages/commission/withdraw.vue index 320c7c27..32ebeefd 100644 --- a/pages/commission/withdraw.vue +++ b/pages/commission/withdraw.vue @@ -229,7 +229,7 @@ } let openid; if (state.accountInfo.type === '5') { - openid = await sheep.$platform.useProvider('wechat').getOpenid(); + openid = await sheep.$platform.useProvider('wechat').getOpenid(true); // 如果获取不到 openid,微信无法发起支付,此时需要引导 if (!openid) { goBindWeixin(); diff --git a/sheep/libs/sdk-h5-weixin.js b/sheep/libs/sdk-h5-weixin.js index 255b72be..27c253b9 100644 --- a/sheep/libs/sdk-h5-weixin.js +++ b/sheep/libs/sdk-h5-weixin.js @@ -9,6 +9,7 @@ import $helper from '@/sheep/helper'; import AuthUtil from '@/sheep/api/member/auth'; let configSuccess = false; +let configAppId = ''; // JSSDK 初始化所使用的公众号 appId,确认收款时需要 export default { // 判断是否在微信中 @@ -47,9 +48,11 @@ export default { 'updateAppMessageShareData', 'updateTimelineShareData', 'scanQRCode', + // 'requestMerchantTransfer', // TODO @使用者:如果需要微信商家转账功能,请打开该注释; ], // TODO 芋艿:后续可以设置更多权限; openTagList: data.openTagList, }); + configAppId = data.appId; } else { console.log('请求 JSSDK 配置失败,错误码:', code); } @@ -195,4 +198,50 @@ export default { }); }); }, + + // 商家转账,用户确认收款(H5 / 公众号) + // 可见 https://pay.weixin.qq.com/doc/v3/merchant/4012716430 文档 + requestMerchantTransfer(data, callback) { + const invoke = () => { + // WeixinJSBridge 内置对象,仅在微信客户端中有效 + if (typeof WeixinJSBridge === 'undefined') { + callback.fail && callback.fail({ errMsg: '请在微信客户端中打开页面后再确认收款' }); + return; + } + WeixinJSBridge.invoke( + 'requestMerchantTransfer', + { + mchId: data.mchId, + appId: data.appId || configAppId, + package: data.package, + }, + function (res) { + if (res.err_msg === 'requestMerchantTransfer:ok') { + callback.success && callback.success(res); + } else if (res.err_msg === 'requestMerchantTransfer:cancel') { + callback.cancel && callback.cancel(res); + } else { + callback.fail && callback.fail(res); + } + }, + ); + }; + this.isReady(() => { + // 校验微信客户端是否支持 requestMerchantTransfer + jweixin.checkJsApi({ + jsApiList: ['requestMerchantTransfer'], + success: function (res) { + if (res.checkResult && res.checkResult['requestMerchantTransfer']) { + invoke(); + } else { + callback.fail && callback.fail({ errMsg: '你的微信版本过低,请更新至最新版本' }); + } + }, + fail: function () { + // checkJsApi 失败时,兜底直接尝试调用 + invoke(); + }, + }); + }); + }, }; diff --git a/sheep/platform/provider/wechat/officialAccount.js b/sheep/platform/provider/wechat/officialAccount.js index 18adbe0a..66f7e595 100644 --- a/sheep/platform/provider/wechat/officialAccount.js +++ b/sheep/platform/provider/wechat/officialAccount.js @@ -2,6 +2,7 @@ import $wxsdk from '@/sheep/libs/sdk-h5-weixin'; import { getRootUrl } from '@/sheep/helper'; import AuthUtil from '@/sheep/api/member/auth'; import SocialApi from '@/sheep/api/member/social'; +import sheep from '@/sheep'; const socialType = 31; // 社交类型 - 微信公众号 @@ -94,6 +95,30 @@ async function getInfo() { return data; } +// 商家转账用户确认模式下,拉起页面请求用户确认收款 Transfer +// 入参与小程序保持一致:(mchId, packageInfo, successCallback, failCallback) +function requestMerchantTransfer(mchId, packageInfo, successCallback, failCallback) { + $wxsdk.requestMerchantTransfer( + { + mchId, + package: packageInfo, + }, + { + success: (res) => { + successCallback && successCallback({ result: 'success', ...res }); + }, + cancel: (res) => { + sheep.$helper.toast('确认收款已取消'); + failCallback && failCallback({ result: 'cancel', errMsg: '确认收款已取消', ...res }); + }, + fail: (res) => { + sheep.$helper.toast(res.errMsg || '确认收款失败'); + failCallback && failCallback({ result: 'fail', ...res }); + }, + }, + ); +} + export default { load, login, @@ -101,5 +126,6 @@ export default { unbind, getInfo, getOpenid, + requestMerchantTransfer, jsWxSdk: $wxsdk, };