记录钉钉小程序开发网络请求API dd.httpRequest报告400的陷阱
小程序开发
浏览:776 次

事实上,互联网上的一些人已经遇到了这个问题。本文作者的解决方案是通过字符串将json以表单的形式提交给后台,后台以表单的方式接收它。然而,这种方式存在一个问题,即后台开发人员已经完成了界面的开发。根据您的请求方法,不可能将所有接口都更改为表单方法,因此基本上不适用。接下来,请看我的解决方案,顺便说一下,还遇到了其他陷阱
我最近在钉钉小程序上为公司使用了Eapp,因为我使用的开发框架是,我可以同时编译微信小程序和阿里巴巴系列小程序(支付宝小程序、钉钉小app、Eapp等)的源代码
因此,我将阿里巴巴Eapp的网络请求API与微信小程序的API兼容。代码如下:
从“./url config.js”导入urlConfig
函数getSupportRequest(平台){
如果(平台===“微信”){
返回wx.request
}else if(平台===“支付宝”){
尝试{
返回dd.httpRequest
}捕获(e){
返回my.httpRequest
}
}
}
/**
*获取网络请求方法
*@param平台
*@返回{function(*,*=,*=):Promise<any>}
*/
导出默认函数(平台){
const supportRequest=获取支持请求(平台)
返回函数(
url,

方法=“GET”,
数据={},
标题={
'内容类型':'app/json'
//'内容类型':'app/x-www-form-urlencoded'
}
) {
if(平台==='alipay'&&method!=='GET'){
data=JSON.stringify(数据)
}
//数据。body=JSON.stringify(数据)
return new Promise((resolve,reject)=>{
支持请求({
url:`${urlConfig.baseUrl}${url}`,
方法
数据
标题,
//这里的处理主要是为了与阿里巴巴系统请求兼容
标题:标题,
//超时
超时:10000,
//返回数据格式
数据类型:'json',
成功(res){

//此步骤主要是为了与支付宝兼容
如果(res.status){
res.statusCode=res.status
}
解析(res)
},
失败(错误){
//这里的处理主要是为了与支付宝支付宝小程序兼容。如果请求不是200,则请求代码将失败
if(error.data){
错误statusCode=错误状态
解决(错误)
}其他{
拒绝(错误)
}
}
})
})
}
}
遇到的坑和解决方案:
1.微信小程序的网络请求API的请求头参数是header,钉钉小程序是headers,所以我已经传递了这两个参数。从文档中可以看出,这不是一个坑
2.微信小程序将http状态码存储在网络请求返回的参数中的变量statusCode中,而钉扎小程序将http状态码存储到变量status中
3.对于向后台提交JSON的微信小程序,data参数用于直接写入js对象,但钉钉小程序需要通过JSON使用js对象。stringify被转换为字符串对象,然后提交(注意:GET请求不能提交到JSON,因此数据不能转换为string,否则请求参数不会自动拼接到url),后台可以接收
我吃了两三个坑的大亏,尤其是第三个坑,在后台无法获取参数,但在阿里巴巴提供的小程序开发工具中预览没有问题,在手机的钉钉app中预览时无法将数据提交给服务器。服务器总是向我返回400,说请求参数有问题

本文发送给开发指甲小程序的小伙伴