uni-app编写抖音小程序的pay-button组件兼容问题
uni-app编写抖音小程序的pay-button组件兼容问题
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | windows11 | HBuilderX |
示例代码:
<pay-button style="width: 300px;" :mode="2" :goods-id="coupon.productId" :goods-type="1" :marketing-ready="true"
@placeorder="placeorder_func"
@getgoodsinfo="getgoodsinfo_func"
@pay="pay_func"
@error="error_func" />
最终编译出来的如下:
<pay-button style="width:300px;" vue-id="b6f70dca-7" mode="{{2}}" goods-id="{{coupon.productId}}"
goods-type="{{1}}" marketing-ready="{{true}}"
data-event-opts="{{[['^placeorder',[['placeorder_func']]],['^getgoodsinfo',[['getgoodsinfo_func']]],['^pay',[['pay_func']]],['^error',[['error_func']]]]}}"
bind:placeorder="__e" bind:getgoodsinfo="__e" bind:pay="__e" bind:error="__e" bind:__l="__l"/>
操作步骤:
如bug描述
预期结果:
如bug描述
实际结果:
如bug描述
bug描述:
抖音小程序的提单页组件《pay-button》里有一个函数绑定,名为bind:getgoodsinfo。
这个虽然是要求绑定函数,但最终绑定上去的是一个Promise对象。
经过uniapp的处理后,绑定上去的是一个函数,所以一直报错,“getGoodsInfo should be object, but got undefined”
希望uniapp后续更新里,针对这种原生平台的特殊操作做一下处理
例如针对或 // #ifdef MP-TOUTIAO
被这些所包裹的,就不要被包进__e里,哪怕以后抖音或微信又更新了新的特性,也能一劳永逸。
更多关于uni-app编写抖音小程序的pay-button组件兼容问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
感谢反馈。我看了这个组件文档,是是个行业组件。能进一步补充一个 demo 说明吗。
我看你提到 getgoodsinfo 是一个异步函数,返回 PRomise ,现在转换的 __e 是什么结果?补充更多信息有助于定位你的问题。
如果使用自定义原生组件能绕过吗?
更新:
参考 https://ask.dcloud.net.cn/question/189088 进行兼容
更多关于uni-app编写抖音小程序的pay-button组件兼容问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
自定义原生组件能绕过此问题,只是我作为开发者而言,主观上肯定不想维护两套体系的代码。 抖音小程序针对pay-button的这个bind:getgoodsinfo,可以看以下文档的说明,要求最后输出的是Promise对象。 https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/component/industry/trading-system/pay-button-sdk#2e204620
现在转换的e就是跑在抖音小程序下的结果,unpackage/dist/dev/mp-toutiao 这个目录内的小程序代码里,【bind:placeorder=“e” bind:getgoodsinfo=“e” bind:pay=“e” bind:error=“e”】,这个e我翻看了下导出后的common/vendor.js源码,是一个被统一管理的函数,也正因为是函数类型,所以在类型上,对不上。
我提出的建议是,要么再定义一个类似// #ifdef的规则,将不需要被纳入统一管理的属性函数给独立开。 要么强化下现有的// #ifdef逻辑,让被包裹的特定平台代码,不会被包裹进统一处理函数。
大佬,抖音pay-button已被pay-button-sdk取代,还是老样子,属性丢失,和当时pay-button刚出来一样的,后来看你们更新文档说适配了。希望这次也快点吧,谢啦!
回复 尘雨雾录: 你的抖音pay-button的should be an object 问题解决了吗
回复 音符cap: 还没,需要用自定义原生组件方式。
回复 尘雨雾录: 自定义原生组件如何写,在抖音小程序开发工具里面去写吗?
回复 tody: 是的
回复 祖传皮卡丘: 最新版本不会复现了吧?我测试了没丢失属性
回复 HRK_01: 看我帖子,官方说修复了
你好,请问自定义原生组件方式是如何写的?但还是在error里报错
errMsg: “Method bind:getgoodsinfo fail”
errNo: 21512
看了社区加上了async还是一样,
<pay-button-sdk :mode=“2” :goods-type=“2” goods-id=“123” @getgoodsinfo=“getgoodsinfo” @placeorder=“userLogin”
@pay=“onPay” @error=“payErr” />
async getgoodsinfo(event) {
console.log(‘getgoodsinfo’, event.detail)
return new Promise(resolve => {
resolve({
…
});
});
},
求大佬解决
我现在也是遇到了这个问题,只是场景是在退款的时候,
The return value of bind:applyrefund should be an object
望平台兼容下抖音小程序的内置交易插件
在 uni-app 中编写抖音小程序时,使用 pay-button 组件可能会遇到一些兼容性问题。以下是一些常见问题及其解决方案:
1. pay-button 组件未显示
-
问题描述:在抖音小程序中,
pay-button组件可能无法正常显示。 -
解决方案:
- 确保在
pages.json中正确配置了usingComponents,并且引入了pay-button组件。 - 检查抖音小程序的版本,确保支持
pay-button组件。
{ "pages": [ { "path": "pages/index/index", "style": { "navigationBarTitleText": "首页" } } ], "usingComponents": { "pay-button": "path/to/pay-button" } } - 确保在
2. pay-button 组件样式问题
-
问题描述:
pay-button组件的样式在抖音小程序中可能无法正常显示或布局错乱。 -
解决方案:
- 使用抖音小程序的样式语法,确保样式兼容。
- 避免使用
uni-app中特有的样式语法,如rpx,可以尝试使用px或rem。
.pay-button { width: 100px; height: 40px; background-color: #ff0000; color: #ffffff; }
3. pay-button 组件事件绑定问题
-
问题描述:
pay-button组件的事件(如bindtap)在抖音小程序中无法正常触发。 -
解决方案:
- 确保事件绑定语法正确,抖音小程序中使用
bindtap而不是@tap。 - 检查事件处理函数是否正确定义。
<pay-button bindtap="handlePay">支付</pay-button>Page({ handlePay() { console.log('支付按钮被点击'); } }); - 确保事件绑定语法正确,抖音小程序中使用
4. pay-button 组件 API 调用问题
-
问题描述:
pay-button组件调用的支付 API 在抖音小程序中无法正常工作。 -
解决方案:
- 确保使用的支付 API 是抖音小程序支持的 API。
- 检查 API 的调用方式是否正确,抖音小程序的 API 调用方式可能与
uni-app有所不同。
tt.requestPayment({ orderInfo: 'orderInfo', success(res) { console.log('支付成功', res); }, fail(err) { console.log('支付失败', err); } });
5. pay-button 组件在真机调试中的问题
- 问题描述:在真机调试时,
pay-button组件可能无法正常工作。 - 解决方案:
- 确保抖音小程序的开发者工具和真机环境是最新版本。
- 在真机调试时,检查控制台日志,排查可能的错误。
6. pay-button 组件的兼容性处理
-
问题描述:
pay-button组件在不同平台(如微信小程序、抖音小程序)上的行为不一致。 -
解决方案:
- 使用条件编译来处理不同平台的兼容性问题。
<!-- #ifdef MP-TOUTIAO --> <pay-button bindtap="handlePay">支付</pay-button> <!-- #endif --> <!-- #ifdef MP-WEIXIN --> <button @tap="handlePay">支付</button> <!-- #endif -->
7. pay-button 组件的权限问题
-
问题描述:
pay-button组件需要特定的权限才能正常工作,但权限未正确配置。 -
解决方案:
- 在
app.json中配置所需的权限。
{ "permission": { "scope.userLocation": { "desc": "你的位置信息将用于小程序位置接口的效果展示" } } } - 在

