You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Razorpay API请求含表情符号时触发500内部服务器错误及400错误的解决方案咨询

Razorpay API请求含表情符号时触发500内部服务器错误及400错误的解决方案咨询

嘿,我太懂你遇到这个问题的头疼了——谁能想到小小表情符号会搞崩支付流程呢?从你给出的错误日志(尤其是那句Check the API request for emojis and resend)来看,确实是表情符号的兼容性/解析问题导致Razorpay服务器无法正常处理请求,咱们一步步来解决:

一、核心确认:问题根源

Razorpay的部分API字段(比如name、description、用户预填信息等)对非标准字符(包括表情符号)的支持有限,当请求中包含这类字符时,服务器无法正确解析,就会抛出500或400错误。

二、解决方案:两种处理思路

方案1:直接清理/移除表情符号(最稳妥)

不管前端还是后端,把请求数据里的表情符号过滤掉是最直接有效的办法,以下是具体代码示例:

前端(JavaScript)实现清理

写一个工具函数过滤字符串中的表情,然后应用到Razorpay的配置字段里:

// 过滤表情符号的工具函数
function removeEmojis(str) {
  const emojiRegex = /[\p{Emoji}]/gu;
  return str.replace(emojiRegex, '');
}

// 应用到Razorpay配置中
var options = {
  "key": "{{ API_KEY }}",
  "amount": "{{ actual_price_fee_added }} * 100",
  "currency": "INR",
  "name": removeEmojis("{{ user.username }}"),
  "description": removeEmojis("Test Transaction"),
  "order_id": "{{ order_id }}",
  "prefill": {
    "name": removeEmojis("{{ user.username }}"),
    "email": "{{ user.email }}",
    "contact": "{{ user.phone }}"
  },
  // ...其他配置不变
};
后端(Python)实现清理

在创建订单前,对可能包含表情的字段(比如用户输入生成的receipt、自定义备注等)做过滤:

import re

def remove_emojis(text):
    # 匹配全范围表情符号的正则
    emoji_pattern = re.compile(
        "["
        u"\U0001F600-\U0001F64F"  # 表情符号
        u"\U0001F300-\U0001F5FF"  # 符号&图标
        u"\U0001F680-\U0001F6FF"  # 运输&地图符号
        u"\U0001F1E0-\U0001F1FF"  # 国旗
        u"\U00002500-\U00002BEF"  # 杂项符号
        u"\ufe0f"  # 变体选择符
                      "]+", 
        flags=re.UNICODE
    )
    return emoji_pattern.sub(r'', text)

# 创建订单时清理数据
data = {
    "amount": price * 100,
    "currency": "INR",
    "receipt": remove_emojis("order_rcptid_11")  # 如果receipt来自用户输入,必须处理
}
payment = client.order.create(data=data)

方案2:确保请求编码为UTF-8(尝试性方案)

如果不想移除表情,可以尝试确保请求数据以UTF-8编码发送,但注意Razorpay官方文档并未明确支持所有表情,所以这个方案不一定100%有效:

  • 前端:确保页面元标签设置为<meta charset="UTF-8">,Razorpay的checkout.js会自动处理编码,但可以确认下;
  • 后端:Python的requests库默认使用UTF-8编码,若手动发送请求,可显式指定:
import json
import requests

headers = {
    'Content-Type': 'application/json; charset=utf-8',
    'Authorization': 'Bearer YOUR_API_SECRET'
}
response = requests.post(
    'https://api.razorpay.com/v1/orders',
    headers=headers,
    data=json.dumps(data)
)

三、额外排查小贴士

  • 先做个快速测试:把所有含表情的字段换成纯文本,看看API请求是否正常,确认是表情导致的问题后再处理;
  • 你日志里的其他报错(比如Sentry被拦截、Canvas警告)和表情问题无关,可以忽略,重点关注那个500的POST请求;
  • 重点检查name、description、prefill里的用户输入字段,这些是表情出现的高频区域。

备注:内容来源于stack exchange,提问作者Anfique Hussain V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 09:28:11