百度翻译api调用前必须确认三件事:access_token过期、sign签名错误、from/to语言码写反,这三类问题占80%报错;需用guzzlehttp\client发请求,sign为q+salt+appid+secret_key的md5,q参数须rawurlencode()编码。

百度翻译API调用前必须确认的三件事
不能直接“抄代码”就跑通——access_token 过期、sign 签名错、from/to 语言码写反,这三类问题占了 80% 的报错。Symfony2 本身不内置 HTTP 客户端,得自己选一个轻量方案,推荐用 GuzzleHttp\Client(v6 兼容 Symfony2.8+)。
-
appid和secret_key必须从 百度翻译开放平台 获取,不是百度账号密码 - 签名
sign是q + salt + appid + secret_key的 MD5(注意顺序和拼接方式,缺一不可) - 请求地址是
https://www.php.cn/link/5f0e777cd88d887ef5f6a505e907511dapi/trans/vip/translate,不是文档里旧版的/api/trans/vip/translate前缀带多余斜杠
在 Symfony2 控制器里发请求的最小可行写法
别封装 Service 层了,先跑通再说。假设你已通过 composer require guzzlehttp/guzzle:^6.5 安装好 Guzzle:
// src/YourBundle/Controller/TranslateController.php
use GuzzleHttp\Client;
public function translateAction()
{
$q = 'hello world';
$from = 'en';
$to = 'zh';
$appid = 'your_appid_here';
$salt = time(); // 或 uniqid()
$signStr = $q . $salt . $appid . 'your_secret_key_here';
$sign = md5($signStr);
$client = new Client();
$response = $client->get('https://www.php.cn/link/5f0e777cd88d887ef5f6a505e907511dapi/trans/vip/translate', [
'query' => [
'q' => $q,
'from' => $from,
'to' => $to,
'appid' => $appid,
'salt' => $salt,
'sign' => $sign,
]
]);
$data = json_decode($response->getBody()->getContents(), true);
if (isset($data['error_code'])) {
throw new \Exception($data['error_msg'] ?: 'Unknown error');
}
return $this->render('result.html.twig', ['result' => $data['trans_result'][0]['dst']]);
}
常见报错及对应修复点
返回 58、52003、52001 这类数字错误码时,别猜,直接查百度文档的「错误码说明」:
-
52003→sign错:检查是否用了secret_key(不是密钥 ID),是否漏了$q原文(URL 编码前)、$salt是否和请求参数一致 -
52001→ 网络超时:Guzzle 默认 timeout 是 0(无限),但百度要求 5 秒内响应,建议加'timeout' => 5到请求选项 -
58→appid未绑定 IP 或配额超限:登录百度后台看「应用详情」→「IP 白名单」是否填了你的服务器出口 IP(开发机可填 0.0.0.0/0,仅测试)
中文原文含空格或标点时的编码陷阱
百度 API 对 q 参数要求 UTF-8 编码后 URL encode,但 urlencode() 在 PHP 里默认只处理 ASCII,中文会出乱码。必须用 rawurlencode():
- 错:
urlencode('你好')→%C4%E3%BA%C3(GBK 编码,百度拒收) - 对:
rawurlencode('你好')→%E4%BD%A0%E5%A5%BD(UTF-8 编码) - 所以签名里的
$q用原始字符串,但请求 query 中的q必须rawurlencode($q)
sign 计算和 q 提交的编码必须严格分离——这是最容易被忽略的细节。大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











