背景:微信小程序云开发支付没问题,退款时就会报这个错。
现象:
![](https://p3-sign.toutiaoimg.com/tos-cn-i-axegupay5k/b7c408b2796442b69c46edb40d472d7b~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1740018094&x-signature=U4SioQIJA5thR0rWga2zOjhOoOc%3D)
解决方法流程:
1、打开微信小程序开发者工具上面的云开发界面:
![](https://p3-sign.toutiaoimg.com/tos-cn-i-6w9my0ksvp/550e9ba8736f4c0cbea76b267b1bc5c2~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1740018094&x-signature=beEr2roSpglkgLARuWlLguXIJMI%3D)
2、进入设置:
![](https://p3-sign.toutiaoimg.com/tos-cn-i-6w9my0ksvp/a0884dd9870e4588b036d128850452cd~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1740018094&x-signature=SR9TrkCrtqMqeWVbF95%2BoBdk%2FFU%3D)
3、其他设置:
![](https://p3-sign.toutiaoimg.com/tos-cn-i-6w9my0ksvp/2799ea98b3e84e029e39fd257788cf63~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1740018094&x-signature=7QKkTRMgepQDFfDRXZnwjCUSOXI%3D)
需要授权退款API权限,我这里已经授权了,未授权的话会有授权按钮,点击后会提示等待商户审核
4、我们来到微信支付商户后台:
![](https://p3-sign.toutiaoimg.com/tos-cn-i-6w9my0ksvp/a4120005f0224d399c055a18b4d32e38~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1740018094&x-signature=ajuOdXvH6Ypdxk8qFKYs72lxiB8%3D)
授权后就可以使用退款的API了。
最后补一下退款的官方文档和我的传参:
文档:
https://developers.weixin.qq.com/minigame/dev/wxcloud/reference-sdk-api/open/pay/CloudPay.refund.html
参数最关键的是要记录下来商户订单号,这个商户订单号是在发起支付时我们自己生成的,在我们自己的系统内保持唯一即可。
我的参数:
let cloud = cloudBase.getCloud(); let refund_fee_type = 1; // 金额单位为分 1就是退款1分钱 100就是退款1块钱 const refund_params = {functionName: 'mcloud', // 这个函数名自己系统内的envId: config.CLOUD_ID, // 环境idsub_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在微信小程序点开云开发就能看到:
![](https://p3-sign.toutiaoimg.com/tos-cn-i-6w9my0ksvp/0b0a2675447b43b1916f8090652310a9~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1740018094&x-signature=RDznQFuYO4DuBbgoA54CADqkygg%3D)
sub_mch_id也是在微信小程序云开发查看,依次点开云开发、设置、其他设置:
![](https://p3-sign.toutiaoimg.com/tos-cn-i-6w9my0ksvp/cddf990995f54763ac393a7c0d6d248c~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1740018094&x-signature=VupYJOBetn9KZ4vJdWQ5u%2BVgydI%3D)
生成随机数的函数:
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; }
退款理由的界面显示效果:
![](https://p3-sign.toutiaoimg.com/tos-cn-i-6w9my0ksvp/343e4334c7fa429db545dd85061c1c06~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1740018094&x-signature=kZLBPrU613u3J101720ME3axLN0%3D)
这篇分享文章就到这里啦!如果你对文章内容有疑问或想要深入讨论,欢迎在评论区留言,我会尽力回答。同时,如果你觉得这篇文章对你有帮助,不妨点个赞并分享给其他同学,让更多人受益。
想要了解更多相关知识,可以查看我以往的文章,其中有许多精彩内容。记得关注我,获取及时更新,我们可以一起学习、讨论技术,共同进步。
感谢你的阅读与支持,期待在未来的文章中与你再次相遇!
我的微信公众号:【xdub】,欢迎大家订阅,我会同步文章到公众号上。