网站支付模式下二维码付款页产品名称显示不全
结论
产品名称显示不全,一般不是二维码生成失败,而是付款页没有适配某些设备的字体大小、屏幕宽度或浏览器缩放比例,导致文字被截断。
先确认支付接口收到的产品名称是否完整:
- 如果接口参数或页面 DOM 中的名称已经缺字,检查名称长度限制、字符编码和参数传递过程。
- 如果数据完整,只是页面没有显示完整,取消固定高度和单行省略样式,让名称自动换行。
- 如果付款页由第三方支付平台托管,商户通常无法修改页面样式。可以缩短产品名称,并向支付平台反馈兼容性问题。
原因排查
检查支付请求参数
查看创建付款链接时传入的产品名称字段,如 subject、body 或支付服务定义的同类字段,确认字段值在发送前没有被截取。
const productName = order.productName;
console.log(productName);
console.log(productName.length);
同时检查代码中是否存在主动截断名称的处理:
// 这类处理会导致名称在请求发出前就不完整
const subject = productName.substring(0, 20);
支付平台可能会限制商品名称字段的长度。具体上限应以当前支付接口的文档为准,不能只根据前端页面的显示结果判断。
检查字符编码
通过 URL 或表单传递中文名称时,需要正确编码参数,避免中文、空格、&、+ 等字符破坏请求内容。
const paymentUrl =
`/pay?subject=${encodeURIComponent(productName)}&orderNo=${encodeURIComponent(orderNo)}`;
服务端读取参数后,不要再次解码:
String subject = request.getParameter("subject");
如果使用 JSON 提交,请确保请求和响应统一采用 UTF-8:
Content-Type: application/json; charset=UTF-8
区分数据截断和样式截断
使用浏览器开发者工具检查产品名称元素:
- DOM 中的文字不完整,说明问题可能出在接口参数、数据库字段或服务端处理环节。
- DOM 中的文字完整,但页面只显示了一部分,说明问题出在 CSS 布局。
- 只有少数手机出现异常,应重点检查系统字体、浏览器缩放和窄屏适配。
常见的文字截断样式如下:
.product-name {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
固定高度也可能隐藏换行后的内容:
.product-name {
height: 24px;
overflow: hidden;
}
解决步骤
允许产品名称自动换行
如果付款页可以自行修改,可将名称区域改为自适应高度:
.product-name {
height: auto;
min-height: 24px;
white-space: normal;
overflow: visible;
overflow-wrap: anywhere;
word-break: break-word;
line-height: 1.5;
}
如果只需要显示两行,可以限制行数,但超过两行的内容仍会被省略:
.product-name {
display: -webkit-box;
overflow: hidden;
overflow-wrap: anywhere;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
line-height: 1.5;
}
如果需要完整显示名称,就不要设置 text-overflow: ellipsis 或 -webkit-line-clamp。
配置移动端视口
确认页面包含正确的视口配置:
<meta
name="viewport"
content="width=device-width, initial-scale=1, viewport-fit=cover"
>
名称容器应避免使用固定宽度:
.payment-info {
width: 100%;
max-width: 100%;
box-sizing: border-box;
}
.product-name {
max-width: 100%;
}
检查父容器
即使产品名称元素允许换行,只要父容器设置了固定高度或 overflow: hidden,内容仍可能被裁切:
.payment-card,
.payment-info {
height: auto;
overflow: visible;
}
修改样式时,需要检查完整的容器层级,不能只看文字元素本身。
兼容大字体和浏览器缩放
不要通过禁止用户缩放来掩盖布局问题。页面布局应能适应字体大小的变化,可以使用弹性布局,并允许子元素收缩:
.payment-row {
display: flex;
align-items: flex-start;
gap: 8px;
}
.payment-row__content {
min-width: 0;
flex: 1;
}
.product-name {
white-space: normal;
overflow-wrap: anywhere;
}
调整完成后,至少测试以下情况:
- 不同的屏幕宽度;
- 系统默认字体和大字体;
- 浏览器默认缩放比例和放大状态;
- 较长的中文、英文及中英文混合名称;
- 包含空格、连字符或连续英文字符的名称。
第三方付款页的处理方式
如果扫码后打开的是支付平台托管页面,页面布局不属于商户系统,修改本地 CSS 无法解决问题。此时可以:
- 确认提交给支付接口的产品名称完整,并且符合字段长度限制。
- 缩短产品名称,把关键信息放在前面。
- 将订单号、规格等次要信息放入备注或支付接口允许的其他字段。
- 记录出现异常的设备型号、操作系统、浏览器或支付客户端版本,并向支付平台提交截图和复现信息。
例如,可以将过长的名称:
2026年秋季高级课程培训服务第一阶段线上学习套餐
缩短为:
高级课程培训|第一阶段
注意事项
还要检查数据库字段长度。例如使用 VARCHAR 时,需要确认字段容量足以保存完整名称,同时留意不同数据库对字符长度和字节长度的计算方式。
不要只看付款页截图就判断数据已经丢失。应依次检查原始商品名称、支付请求参数、支付平台返回内容和页面 DOM,确定名称具体在哪一层被截断。
如果问题只出现在少数用户的设备上,而接口参数和 DOM 内容都完整,可以重点排查字体放大、浏览器缩放、固定高度和父容器裁切。
备注:内容仅供参考。