超级酱油
超级酱油
  • 发布:2024-05-15 10:22
  • 更新:2024-12-18 15:43
  • 阅读:430

【报Bug】支付宝插件无法获取ref实例的问题

分类:uni-app

产品分类: uniapp/小程序/阿里

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10

HBuilderX类型: 正式

HBuilderX版本号: 4.15

第三方开发者工具版本号: 3.8.11

基础库版本号: 2.9.6

项目创建方式: HBuilderX

操作步骤:

预期结果:

拿到ref实例,可以调用start方法

实际结果:

ref实例无法获取,报错了

bug描述:

在接入支付宝原生插件<极速退款插件>官方文档地址
发现无法按照文档方式获取实例 调用对应的方法.
这是文档中的示例代码
axml文件

<refund  
  orderId="2023122501502300000005550002476962"  
  oid="2088501698901229"  
  ref="handleRef"  
  onComplete="onComplete"  
/>

对应的js文件

Page({  
  data: {  
  },  
  // 开始插件极速退款流程(点击退款按钮后调用)  
  handleRefund() {  
    this.refundRef.start();  
  },  
 // 获取插件实例  
  handleRef(ref) {  
    // 存储自定义组件实例,方便以后调用  
    this.refundRef = ref;  
  },  
});

在对应写入uniapp时, handleRef方法并没有调用
在翻看支付宝文档时,发现支付宝为了保护插件, 这是文档, 将获取组件实例ref屏蔽了,导致无法直接获取组件的ref,也就无法调用上面的start()方法.

2024-05-15 10:22 负责人:无 分享
已邀请:
超级酱油

超级酱油 (作者)

https://ask.dcloud.net.cn/question/167328

参考答案

  • 1***@qq.com

    你好,https://ask.dcloud.net.cn/question/167328,我看了下这个链接里面的内容呢,我的还是不行,具体怎么处理呢?

    2024-06-14 14:59

ddxx

ddxx

请问你解决了吗,我这边也有同样的问题

1***@qq.com

1***@qq.com

页面我是这样写的,加上了vue.config.js,还是不行,把ref改成@ref也不行

1***@qq.com

1***@qq.com - 码农

我是加载完成后,没有调用,而不是报错,点击也没有反应

7***@qq.com

7***@qq.com

请问有老师解决这个问题了码?真心求教啊

t***@163.com

t***@163.com

参考了别人的解决方案,我这边也暂时解决了,不够完美。讲一下我的步骤。
我用的支付宝的alipaySubscription这个插件,插件地址:https://opendocs.alipay.com/pre-open/0a67v1

官方要求

 <industry-subscription   
    appId="当前小程序的 appId"   
    industryType="仅支持部分行业订阅,参考下文"   
    noUI  
    ref="handleRef"  
  />
handleRef(ref) {  
    this.subscriptionRef = ref; // 存储自定义组件实例,方便以后调用  
  },

咱们改成

 <industry-subscription   
    appId="当前小程序的 appId"   
    industryType="仅支持部分行业订阅,参考下文"   
    noUI  
    @ref="handleRef"  
  />
t***@163.com

t***@163.com

编译后,找到用这个插件的那个页面的axml文件,看到如下插件引用的地方,

<plugin-wrapper vue-id="1bc44290-3" onPluginWrap="__w" data-event-opts="{{[['^ref',[['handleRef']]]]}}" data-com-type="wx" data-event-list="onRef" onRef="__e" onVueInit="__l" vue-slots="{{['default']}}">  
    <industry-subscription onRef="{{'onRef'+'1bc44290-3'}}" id="subscriptionRef" noUI="{{true}}" industryType="14" appId="xxxxxxxxxxxxxxx" onVueInit="__l"></industry-subscription>  
</plugin-wrapper>

把其中的

onRef="{{'onRef'+'1bc44290-3'}}"

改成

ref="{{'onRef'+'1bc44290-3'}}"

随便保存直接在支付宝开发者工具编译。

还有个问题需要处理,就是调用插件里的方法。插件官方要求是这样

const res = await this.subscriptionRef.requestIndustrySubscription();

但是直接调用显示没有这个方法,所以直接打印一下this.subscriptionRef这里面是啥,这时候会发现,得这样调用

const res = await this.subscriptionRef.detail.__args__[0].requestIndustrySubscription();

要回复问题请先登录注册