注册之后顺利拿到APP ID和密钥
开通服务之后才能使用对应的api, 这步必不可少。
import axios from 'axios';
import CryptoJS from 'crypto-js'
let text = '要翻译的文字'
let appid = '123456789' //开发者APP ID
let salt = Date.now().toString()
let key = 'abcdefghijklmn'; //开发者密钥
let sign = CryptoJS.MD5(appid + text + salt + key).toString()
axios({
method:'post',
headers:{
'Content-Type':'application/x-www-form-urlencoded'
},
url:'https://fanyi-api.baidu.com/api/trans/vip/translate',
q:text.toString(CryptoJS.enc.Utf8),
from:'auto',
to:'en',
salt,
sign
}).then(res=>{
console.log(res)
//output
/*
{
"from": "zh",
"to": "en",
"trans_result": [
{
"src": "要翻译的文字",
"dst": "Text to be translated"
}
]
}
*/
}).catch(e=>{
})
没有开通对应的服务, 开通服务即可。(第二步)
先试试翻译英文,看看能否正确翻译。
get
请求, q 字段需要 做 URL encode 即: encodeURI(q)
post
请求,需要改两处: 1) headers
增加 'Content-Type'
值 'application/x-www-form-urlencoded'
2) q 字段进行 Utf8转码
按照文档 提示 :如遇到报 54001 签名错误,请检查您的签名生成方法是否正确,在对 sign 进行拼接和加密时,q 不需要做 URL encode,很多开发者遇到签名报错均是由于拼接 sign 前就做了 URL encode;
让人看成了,签名之后要做 URL encode,感觉误导。所以折腾成这样
let text = '要翻译的文字'
axios({
method: 'post',
...
url: 'https://fanyi-api.baidu.com/api/trans/vip/translate',
q: encodeURI(text), //❎ 错误的方法
...
})
encodeURI 会进行转码,api无识别。导致签名错误。
let test = encodeURI('要翻译的文字')
console.log(test)
// output
// '%E8%A6%81%E7%BF%BB%E8%AF%91%E7%9A%84%E6%96%87%E5%AD%97'
正确的姿势是进行uft8转码, 而不是url 转码:
import CryptoJS from 'crypto-js'
let test = encodeURI('要翻译的文字')
test = test.toString(CryptoJS.enc.Utf8) // ✅
console.log(test)
// output utf8 code
// '要翻译的文字'