在uniCloud云对象内使用unipay的微信退款出现错误“uniPayCo.refund Error: token校验未通过”的解决方案

简述

uniPay是DCloud开发的统一支付的模块,它让开发者无需研究支付宝、微信等支付平台的后端开发、无需为它们编写不同代码,拿来即用,屏蔽差异。

unipay提供两种使用方式: 1.一体化页面模版 2.云对象(uni-pay-co)

第一种方式非常简单,开发项目我最常用的方法就是第1种,集成好了页面,只需要参考官方文档进行相应的配置即可,当然我也有录制的教程uniapp实战unipay支付小程序商城开发,也可以参考学习。

如果你有一定基础,我建议你使用第2种方法,就可以脱离他固有的页面,可以在云对象中配合自己的逻辑更加的灵活一些,这个错误就是使用第2中方式,云对象做微信退款uniPayCo.refund时出现的问题。

问题复现

按照发起退款的文档在云对象中进行操作,如下代码:

javascript 复制代码
const uniPayCo = uniCloud.importObject("uni-pay-co");
await uniPayCo.refund({
  out_trade_no: "2022102701100010100101001", // 插件支付单号
});

执行后会报错,Error: token校验未通过,但是明明登录过了,是有token的,而且用户的角色也是admin身份,那为什么还报错误那?

解决办法

1.修改权限配置项(不推荐)

路径地址:/uni_modules/uni-pay/uniCloud/cloudfunctions/uni-pay-co/config/permission.js 在permission.js中如下权限

javascript 复制代码
module.exports = {
	refund: {
		// auth: true // 已登录用户方可操作,配置角色或权限时此项可不写
		role: ['admin'] // 允许进行此操作的角色,包含任一角色均可操作。
		// permission: [] // 允许进行此操作的权限,包含任一权限均可操作。
		// 权限角色均配置时,用户拥有任一权限或任一角色均可操作
	}
}

你可以直接注释掉role,重点:修改完成后一定要将uni-pay-co这个云对象上传部署,然后再次执行退款,那么就可以发起退款了。

但是:这种直接修改权限的方式是不安全的,这样导致任何人都可以对订单发起退款,这种方法慎用。

2.发起uniPayCo.refund退款方法,多传递两个参数(推荐)

javascript 复制代码
let clientInfo = this.getClientInfo();
let token = clientInfo.uniIdToken;
return await uniPayCo.refund({
	out_trade_no:"2506101235227345194283134",
	refund_fee:1,
	clientInfo:clientInfo,
	uniIdToken:token
})

重点: 如上所示,给refund退款方法,传递两个参数,clientInfo(客户端用户信息)和uniIdToken(基于uni-id的token),这两个参数的值可以如上代码获取。

在云对象uni-pay-co中会对传递的参数进行校验取得用户的角色。

相关推荐
caibixyy4 小时前
Spring Boot 整合 Redisson 实现分布式锁:实战指南
spring boot·分布式·后端
码事漫谈4 小时前
C++编程陷阱:悬空引用检测方法与防范指南
后端
码事漫谈4 小时前
缓存友好的数据结构设计:提升性能的关键技巧
后端
带娃的IT创业者5 小时前
TypeScript + React + Ant Design 前端架构入门:搭建一个 Flask 个人博客前端
前端·react.js·typescript
sheji34165 小时前
【开题答辩全过程】以 springboot高校社团管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
聆风吟º6 小时前
远程录制新体验:Bililive-go与cpolar的无缝协作
开发语言·后端·golang
非凡ghost6 小时前
MPC-BE视频播放器(强大视频播放器) 中文绿色版
前端·windows·音视频·软件需求
Stanford_11066 小时前
React前端框架有哪些?
前端·微信小程序·前端框架·微信公众平台·twitter·微信开放平台
洛可可白6 小时前
把 Vue2 项目“黑盒”嵌进 Vue3:qiankun 微前端实战笔记
前端·vue.js·笔记
野犬寒鸦6 小时前
从零起步学习Redis || 第四章:Cache Aside Pattern(旁路缓存模式)以及优化策略
java·数据库·redis·后端·spring·缓存