解决微信小程序原生云开发退款报错“特约子商户商户号未授权服务商的产品权限”的问题
1.小程序开发:将改造后的步骤条插件移植到自己的小程序2.小程序开发:完善步骤条的上滑、下拉刷新操作3.小程序开发:笔记详情显示图片以及可以富文本编辑4.小程序开发:修复了两个问题和页面改名5.聊聊微信小程序的流式(stream)响应请求6.小程序开发:接入腾讯云的人像动漫化api接口7.uniapp同步将本地图片转换为base64,支持微信、H5、APP8.小程序开发:app.vue检测更新时判断是否是朋友圈进入9.微信小程序开发:接入阿里云人像动漫化api接口10.小程序开发:定时删除上传的阿里云oss文件11.微信小程序开发:循环定时删除阿里云oss上传的文件12.微信小程序开发:页面分享卡片、风格选择、通道启用等可配置13.微信小程序开发:记一次提审失败的反馈重审14.微信小程序开发:精细化处理人像动漫化调用之前的人像修复增强15.微信小程序开发:调用人像动漫化接口前先限制并缩放图片尺寸16.微信小程序开发:上传网络图片到阿里云oss17.微信小程序开发:异步处理接入的生成式图像卡通化18.微信小程序:解决chooseImage:fail unknouwn scene报错19.uniapp 云开发省钱之调整函数执行内存大小20.聊聊微信小程序的隐私协议开发21.微信小程序使用微信云托管添加自定义域名并转发到pexels.com22.免费将人像转动漫,多种效果可选,分享下自己开发的微信小程序23.uniapp微信小程序使用瀑布流结合z-panging组件显示pexels的图片24.微信小程序-uniapp-切换tab时数据列表如何切换?25.我新上线的小程序功能:生日备注26.上线短视频去水印功能到小程序27.在小程序中开发音效盒子功能,公开源码28.uniapp获取元素高度不准确问题解决
29.解决微信小程序原生云开发退款报错“特约子商户商户号未授权服务商的产品权限”的问题
背景:微信小程序云开发支付没问题,退款时就会报这个错。
现象:

解决方法流程:
1、打开微信小程序开发者工具上面的云开发界面:

2、进入设置:

3、其他设置:

需要授权退款API权限,我这里已经授权了,未授权的话会有授权按钮,点击后会提示等待商户审核
4、我们来到微信支付商户后台:

授权后就可以使用退款的API了。
最后补一下退款的官方文档和我的传参:
文档:
https://developers.weixin.qq.com/minigame/dev/wxcloud/reference-sdk-api/open/pay/CloudPay.refund.html
参数最关键的是要记录下来商户订单号,这个商户订单号是在发起支付时我们自己生成的,在我们自己的系统内保持唯一即可。
我的参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | let cloud = cloudBase.getCloud(); let refund_fee_type = 1; // 金额单位为分 1就是退款1分钱 100就是退款1块钱 const refund_params = { functionName: 'mcloud' , // 这个函数名自己系统内的 envId: config.CLOUD_ID, // 环境id sub_mch_id: config.SUBMCH_ID, // 子商户id 下面有说明在哪获取 nonce_str: this .generateRandomString(), // 这里自己生成一个随机数就行,生成随机数的方法我下面也会提供 out_trade_no: order.out_trade_no, // 支付时自己系统生成的商户订单号,需要在支付的时候存到订单表里,然后退款时从订单表里取出这个字段 out_refund_no: this .generateRandomString(), // 商户退款单号,也是自己随机生成一个就行,用来查询退款情况用,比如退款成功还是失败 total_fee: refund_fee_type, // 订单金额 单位:分 refund_fee: refund_fee_type, // 申请退款金额,用户实际到账的金额 单位:分 refund_desc: "手动取消" , // 退款理由,界面显示效果如下 } const res = await cloud.cloudPay.refund(refund_params); |
envId在微信小程序点开云开发就能看到:

sub_mch_id也是在微信小程序云开发查看,依次点开云开发、设置、其他设置:

生成随机数的函数:
1 2 3 4 5 6 7 8 9 | generateRandomString(length = 32) { let result = '' ; const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' ; const charactersLength = characters.length; for ( let i = 0; i < length; i++) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); } return result; } |
退款理由的界面显示效果:

这篇分享文章就到这里啦!如果你对文章内容有疑问或想要深入讨论,欢迎在评论区留言,我会尽力回答。同时,如果你觉得这篇文章对你有帮助,不妨点个赞并分享给其他同学,让更多人受益。
想要了解更多相关知识,可以查看我以往的文章,其中有许多精彩内容。记得关注我,获取及时更新,我们可以一起学习、讨论技术,共同进步。
感谢你的阅读与支持,期待在未来的文章中与你再次相遇!
我的微信公众号:【xdub】,欢迎大家订阅,我会同步文章到公众号上。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~