codecamp

常见问题

tt.pay 接入常见问题

下面列出了调用 tt.pay 较为常见的问题 case 与排查方案


1. 未拉起收银台

请检查使用的版本是否满足 tt.pay 的版本要求;特别地,抖音 iOS 版当前不支持调用 tt.pay

如果当前版本满足但仍未拉起,请在 小程序开发者社区 提供更详细的信息(录屏,调用代码片段等)帮助我们更好地排查问题

2. 下单失败

下单失败的表现是拉起了收银台,但界面上会展示报错的 toast(可能会直接展示错误码,如 CD0025;或仅展示“服务暂不可用”,此时请抓包查看对应的错误码);常见下单失败错误如下:

Code描述解决方案
CD0015参数错误1. 缺少 orderInfo 必传字段导致,请检查 tt.pay 中必传参数是否完整;
2. 同一订单在服务端预下单与 tt.pay 中传入的 trade_time 不一致,请确保同一订单 trade_time 一致;

如不能解决请在反馈中提供 out_order_no 帮助我们定位具体原因
CD0025签名报错请参考 服务端签名 检查签名生成方式是否无误,并根据 服务端签名 中的 「签名验证失败排查方案」进行排查
CD0116业务方未配置支付方式请参考 支付商户申请流程 申请支付方式
40007逻辑错误1. app_id 参数不正确,请参考 支付商户申请流程 申请 app_id 和 merchant_id 并验证 tt.pay 中 app_id 和 merchant_id 参数正确; 
2. 金额应是以分为单位的整数; 

如不能解决请在反馈中提供 out_order_no 帮助我们定位具体原因

3. 拉起支付宝失败

确保支付接口传递的 orderInfo.alipay_url 参数能正常拉起支付宝。

利用 支付宝提供的测试 demo 检测 url 能否正常拉起支付宝 app

alipay-demo

4. 拉起微信支付失败

排查点 1: 确保支付接口传递的 orderInfo.wx_url 正常传入,且 orderInfo.wx_type 为 'MWEB'

排查点 2: 打开调试模式:

tt.pay({
    ...,
    _debug: 1
})

请求微信支付的时候会展示微信的 H5 页面(记得在线上环境去掉该参数)

4.1 商家参数格式有误,请联系商家解决

wechat-referer-error

请确保商户在微信 微信商户平台 申请开通微信 H5 支付,并配置 H5 支付域名为 snssdk.com

wechat-referer-config

4.2 网络环境未能通过安全验证,请稍后再试

wechat-network-error

该错误与用户侧出口 IP 变化有关;普通家庭 Wi-Fi 或 4G 网络不会出现该问题

5. 没有默认支付方式

邮件联系 bytedance_microapp@bytedance.com, 说明小程序 appid,支付商户信息及期望的默认支付方式

6. 微信支付成功后怎么检测状态

由于头条无法代为保存商户在微信支付侧的 secret,因此用户在微信支付成功后跳转返回小程序收银台后需商户自行查询订单在微信支付的状态:

tt.pay({
    ...
    getOrderStatus(res) {
        const {out_order_no} = res // 商户侧订单号
        return new Promise((resolve) => {
            // 商前端请求商户后端获取订单在微信支付的状态,方法需商户自行实现
            // ...获取 code
            // 0:支付成功
            // 1:支付超时
            // 2:支付失败
            // 3:支付关闭
            // 9:订单状态未知/未支付
            resolve({code}); // 回传收银台微信支付订单状态
        })
    }
})
服务端签名
tt.pay
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

字节跳动小程序 介绍

字节跳动小程序 开发

字节跳动小程序开发框架

字节跳动小程序开发框架基础说明

字节跳动小程序开发框架基础功能

字节跳动小程序开发框架逻辑层

无标题文章

无标题目录

API

无标题文章

无标题文章

无标题文章

无标题文章

无标题文章

无标题目录

无标题目录

无标题文章

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }