如何适配Braspress的POST类型API以在Google Sheets中调用?
解决方案:在Google Sheets中调用Braspress POST API
我已经能通过GET方法在Google Sheets中调用其他API并生成工作表,但调用Braspress的POST API时始终失败。以下是该API的官方调用示例,以及适配Google Sheets的完整解决方案:
官方调用示例参考
Curl示例
curl -v -H "Authorization: Basic Y2xpZW50ZTpjbGllbnRl" -H "Content-Type: application/json" -d '{"cnpjRemetente":60701190000104,"cnpjDestinatario":30539356867,"modal":"R","tipoFrete":"1", "cepOrigem":2323000,"cepDestino":7093090,"vlrMercadoria":100.00,"peso":50.55,"volumes":100}, "cubagem":[{"altura":0.46,"largura":0.67,"comprimento":0.67,"volumes":10}]}' -X POST https://api.braspress.com/v1/cotacao/calcular/json
JavaScript示例
var authorizationBasic = 'Y2xpZW50ZTpjbGllbnRl'; $.ajax({ type: 'POST', url: 'https://api.braspress.com/v1/cotacao/calcular/json', data: '{"cnpjRemetente":60701190000104,"cnpjDestinatario":30539356867,"modal":"R","tipoFrete":"1", "cepOrigem":2323000,"cepDestino":7093090,"vlrMercadoria":100.00,"peso":50.55,"volumes":10,"cubagem":[{"altura":0.46,"largura":0.67,"comprimento":0.67,"volumes":10}]}', dataType: "json", contentType: 'application/json; charset=utf-8', xhrFields: { withCredentials: true }, crossDomain: true, headers: { 'Authorization': 'Basic ' + authorizationBasic, }, success: function (result) { console.log(result); }, error: function (req, status, error) { console.log(error); }
适配Google Sheets的实现代码
使用Google Apps Script的UrlFetchApp工具完成POST请求,步骤如下:
- 打开目标Google工作表,点击「扩展程序」→「Apps脚本」
- 替换默认代码为以下内容:
function callBraspressAPI() { // 替换为你的Braspress API基础认证令牌 const authToken = 'Y2xpZW50ZTpjbGllbnRl'; const apiUrl = 'https://api.braspress.com/v1/cotacao/calcular/json'; // 构造符合API要求的请求体(已修正原示例的JSON语法错误) const requestPayload = { "cnpjRemetente": 60701190000104, "cnpjDestinatario": 30539356867, "modal": "R", "tipoFrete": "1", "cepOrigem": 2323000, "cepDestino": 7093090, "vlrMercadoria": 100.00, "peso": 50.55, "volumes": 10, "cubagem": [ { "altura": 0.46, "largura": 0.67, "comprimento": 0.67, "volumes": 10 } ] }; // 请求配置 const fetchOptions = { method: 'post', contentType: 'application/json', headers: { 'Authorization': 'Basic ' + authToken }, payload: JSON.stringify(requestPayload), muteHttpExceptions: true // 开启后可获取完整错误信息,便于调试 }; try { const response = UrlFetchApp.fetch(apiUrl, fetchOptions); const responseData = JSON.parse(response.getContentText()); // 将响应结果写入工作表(示例:从A1单元格开始写入) const activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); activeSheet.getRange(1, 1).setValue('API响应结果'); activeSheet.getRange(2, 1).setValue(JSON.stringify(responseData, null, 2)); Logger.log('请求成功:' + JSON.stringify(responseData)); return responseData; } catch (error) { Logger.log('请求失败:' + error.toString()); // 打印详细错误响应内容 if (error.response) { Logger.log('错误响应详情:' + error.response.getContentText()); } return null; } }
关键注意事项
- 修复JSON语法错误:原curl示例中的JSON存在语法错误(
"volumes":100}, "cubagem"多了一个右括号),这是常见的请求失败原因,已在代码中修正。 - 凭证安全:确保
authToken是你的Braspress API凭证的Base64编码值,不要在公共场合泄露。 - 请求格式要求:必须设置
contentType: 'application/json',且用JSON.stringify()将对象转为JSON字符串作为请求体,否则API无法解析。 - 权限授权:首次运行脚本时,需要授权Google Apps Script访问外部API和你的工作表。
调试排查方法
如果请求仍失败,可通过以下方式定位问题:
- 查看脚本编辑器的「日志」(点击「查看」→「日志」),获取详细错误信息。
- 用Postman或curl先测试请求是否正常,排除API凭证或参数格式问题。
- 核对Braspress API文档,确认所有参数的类型、格式是否符合要求(如CNPJ、CEP的数值格式)。
内容的提问来源于stack exchange,提问作者Tiago
相关产品推荐
相关产品推荐

