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

小程序开发


浏览:751 次

事实上,互联网上的一些人已经遇到了这个问题。本文作者的解决方案是通过字符串将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,说请求参数有问题

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