开发者社区
社区提问意见反馈
开发者钉组织
扫描二维码
加入支付宝开发者钉组织
基础 api
基础
应用级事件
界面
跳转
多媒体
缓存
文件
位置
网络
发起请求
requesttask
上传
下载
websocket
设备
worker
数据安全
分享
收藏
自定义通用菜单
更新管理
web-view组件控制
升级支付宝最新版本
隐私信息授权
小程序广告
开放能力 api
开发 > api > 基础 api > 网络 > 发起请求 > my.request
评论 (17)
收藏
我的文档
设置
检测到你在内网环境,建议直接访问此文档的,避免错过针对一方的重要内容。

requesttask my.request(object object)

基础库  或更高版本; 且 支付宝客户端 10.1.32 或更高版本; 若版本较低,建议采取 兼容处理

支小宝客户端 支持

安诊儿客户端 支持

以 promise 风格调用: 支持 。

主体: 企业支付宝小程序个人支付宝小程序

发起https网络请求。使用前请注意阅读 网络 api 使用须知

使用 my.requestmy.uploadfile 前,需要先配置 服务器域名白名单

  • 自研小程序: 登录 > 进入 小程序详情页面 > 开发 > 开发设置 > 服务器域名白名单
  • 第三方应用: 登录 > 进入 第三方应用详情页面 > 开发设置 > 服务器域名白名单

在小程序开发过程中,可在小程序开发者工具(ide)配置忽略域名合法性检查,如果选择忽略,则在开发者工具中不会校验域名合法性。

  • 小程序开发者工具: 右上角点击 详情 > 域名信息 > 忽略 http 请求域名合法性检查

注意:

  • 在开发者工具中配置的忽略域名合法性检查,仅对开发阶段生效,若小程序上线,请务必先在开放平台上配置 服务器域名白名单
  • 在控制台中修改关于 服务器域名白名单 的配置后,只对之后构建和发布的小程序版本生效,已上线的版本使用的是修改前的域名配置。

object object

查看示例

属性 类型 默认值 必填 兼容性 描述
url string - -

请求的 url,只支持 https 协议

datatype string json_or_text -

指定出参 data 的类型。基础库 2.9.5 以前默认值为 json,2.9.5 为 json_or_text

枚举值 描述 兼容性
json

返回的数据将通过 json.parse 转换为 json

-
text

返回的数据为文本字符串

-
json_or_text

返回的数据为 json 或文本(内部会先尝试 json.prase,失败则返回文本)

基础库: 2.9.5
base64

返回的数据为 base64 编码字符串

-
arraybuffer

返回的数据为 arraybuffer 类型

基础库: 1.19.0/2.4.4
method string get -

http 请求方法

枚举值 描述 兼容性
get

http get 请求

-
post

http post 请求

-
put

http put 请求

支付宝: 10.1.95
delete

http delete 请求

基础库: 1.24.0/2.6.0
支付宝: 10.1.95
options

http options 请求

-
head

http head 请求

-
trace

http trace 请求

-
connect

http connect 请求

-
data string | object | arraybuffer - -

传给服务器的数据(arraybuffer 在支付宝客户端 10.1.95 开始支持)

headers object - -

设置请求的 http 头对象,默认 {'content-type':'application/json'},该对象里面的 key 和 value 必须是 string 类型

timeout number 30000 -

超时时间,取值 500 ~ 120000,单位 ms。设置小于 500 的值等效于 500

referrerstyle string full
基础库: 2.9.5
支付宝: 10.3.50
ide: 3.5.1

referer 样式,用于控制当前请求 header 对象中 referer 字段格式。
该参数默认值可通过 app.json 中的配置进行修改,详细说明见下文 referrerstyle 参数说明

枚举值 描述 兼容性
basic

referer 值仅保留 index.html。格式为 https://{appid}.hybrid.alipay-eco.com/{appid}/{version}/index.html

-
extended

referer 值保留 #pages/xxx/yyy。格式为 https://{appid}.hybrid.alipay-eco.com/{appid}/{version}/index.html#{page},其中 {page} 示例为 #pages/xxx/yyy

-
full

会将发起请求时所在页面的 url 作为 referer 值,会保留 page(pages/xxx/yyy)和 querystring(x=1&y=2)并可能有框架添加的其他参数,referer 值为 https://{appid}.hybrid.alipay-eco.com/{appid}/{version}/index.html#{page}?{querysrtring}{框架其他参数}

-
enablecookie boolean -
支付宝: 10.2.33

是否手工设置 cookie。如果为 true,请求将使用 headers 中设置的 cookie;如果为 false,则 headers 中的 cookie 字段将被忽略,请求头中将包含服务端上一次返回的 cookie(如果有且未过期)

enablehttp2 boolean true
支付宝: 10.5.10

开启 http/2。默认为 true,只要目标服务器支持就会以 http/2 通信;如果置为 false,则禁用 http/2

success function - -

调用成功的回调函数

fail function - -

调用失败的回调函数

complete function - -

调用结束的回调函数(调用成功、失败都会执行)

url 参数说明

  • 只支持 https 协议的请求
  • 只支持与 域名白名单 中的域名通讯
  • 开发过程中,可通过开发者工具 详情 > 域名信息 > 忽略 http 请求域名合法性检查 忽略该限制
  • 正式/体验版本必须在 小程序详情页面 > 开发 > 开发设置 > 服务器域名白名单 中配置,并重新构建/发布小程序

data 参数说明

传给服务器的数据最终会是 string 类型,如果 data 不是 string 类型,会被转换成 string 。转换规则如下:

  • 若方法为 get ,会将 data 转换成 querystring 形式: encodeuricomponent(k)=encodeuricomponent(v)&encodeuricomponent(k)=encodeuricomponent(v)...,追加在 url 后面。
  • 若方法为 postheaders['content-type']application/json ,会对数据进行 json 序列化。
  • 若方法为 postheaders['content-type']application/x-www-form-urlencoded ,会将 data 转换成 querystring 形式: encodeuricomponent(k)=encodeuricomponent(v)&encodeuricomponent(k)=encodeuricomponent(v)...,追加在 url 后面。

headers 参数说明

  • "content-type" 字段默认为 application/json
  • referer 可以通过 referrerstyle 参数进行格式控制
  • cookie 字段必须结合 enablecookie: true 才能生效

referrerstyle 参数说明

  • 该参数只在客户端 10.3.50 及以上版本支持,低于 10.3.50 的客户端相当于 referrerstyle 恒为 'full',referer 为当前页面的完整 url(含 hash),某些情况下可能导致 header 超长请求失败。
  • app.json 中设置behavior.requestreferrerstyle 字段可以改变 referrerstyle 参数的默认值。示例如下。注意:behavior.requestreferrerstyle 兼容性同 referrerstyle 参数的兼容性。
{
  "pages": ["pages/index/index", "pages/logs/logs"],
  "window": {
    "defaulttitle": "demo"
  },
  "behavior": {
    "requestreferrerstyle": "full" // 修改 my.request 参数 referrerstyle 的默认值为 full
  }
}

success 回调函数

参数

object res

查看示例

属性 类型 描述
data string | object | arraybuffer

目标服务器返回的数据,数据类型按由入参 datatype 字段指定

status number

目标服务器返回的 http 状态码

headers object

目标服务器返回的 http 响应头

profile object

网络请求过程中一些调试信息

属性 类型 描述
domainlookup number

dns 耗时,单位 ms

connect number

tcp 耗时,单位 ms

sslconnection number

ssl 耗时,单位 ms

waiting number

首包耗时,单位 ms

totaltime number

请求耗时,单位 ms

socketreused boolean

是否复用连接

protocol string

使用协议类型

fail 回调函数

参数

object err

查看示例

属性 类型 描述
error number

错误码

errormessage string

错误信息

data string/object/arraybuffer

开发者服务器返回的数据,格式取决于请求时的 datatype 参数,如果 datatype 值为 base64 时,返回的是符合 规范的内容字符串。
注意:当错误码为 14 或 19 时才会返回此字段

status number

开发者服务器返回的 http 状态码
注意:当错误码为 14 或 19 时才会返回此字段

headers object

开发者服务器返回的 http response header
注意:当错误码为 14 或 19 时才会返回此字段

requesttask

请求任务对象。可用于获取 http 响应头,以及取消请求任务

fail 回调的参数为 object,error 属性为错误码,errormessage 属性为错误消息。

错误码 错误消息 凯发app官方网站的解决方案
2 参数错误。

请检查是否有必填项没传,参数类型是否正确

xxx 参数类型错误

请检查参数是否传错类型

4 未配置域名白名单,无权访问域名。查看如何配置:https://xxx..
  • 没有配置请求白名单导致。检查请求域名是否添加了域名白名单,请登录 开放平台控制台 > 点击要配置的小程序,进入 小程序详情页 > 开发 开发设置 > 服务器域名白名单 中配置域名白名单。小程序在以下 api 调用时只能与白名单中的域名进行通讯:http 请求(my.request)、上传文件(my.uploadfile)。

  • 若是账号问题,不能登录管理后台配置,开发版测试可以先在开发者工具右上角点击 详情 > 域名信息 下勾选 忽略 http 请求域名合法性检查(仅在本地模拟、预览和远程调试时生效),再预览调试请求。

  • request 请求的地址域名可能写错,导致跟配置的请求白名单域名不一致,请仔细检查。

注意:

  • 添加服务器域名白名单后,一定要发布新版上架,否则不会生效。

  • 需要配置的是入参 url 中的域名。

9 request:fail abort

调用了 requesttask.abort() 中断了请求任务。

12 似乎已断开与互联网的连接。

建议检查网络环境是否正常,服务器是否稳定。

发生了ssl错误,无法建立与该服务器的安全连接。

请检查您的证书是否过期。

未能找到使用指定主机名的服务器。

请检查您的域名是否正确。

13 超时。

建议检查网络环境是否正常,服务器是否正常响应,若请求需要时间长,可适当设置超时时间 timeout。

14 json parse data error | 解码失败
  • 先检查 datatype 的设置是否正确:

  • datatype为json: 小程序框架对返回结果做 json.prase 操作时解析失败。

  • datatype为text: 返回的内容格式不符。

  • datatype为base64: 转换失败。

  • 建议检查前后端请求和响应数据格式是否一致;如:返回数据格式 text 与入参 datatype 值 json 不一致而导致接口报错,请修改后台返回数据格式为 json。

  • 如果后端是 php 或 .net,可检查响应的内容中是否携带了 bom,清除 utf-8 bom 头 。

  • 若服务端需要返回非 json 字符串,则需要把 my.request 的 datatype 参数设置成 text。

http status error

http 404、500、504 等异常错误。可打开 ide 调试器 > network 可以查看具体的错误信息,真机也可通过错误回调中的 status、data 字段查看具体的错误码和错误信息。

注意:ide 在网络不能正常连接时会误入此错误码,建议以真机错误码为主,或检查:

20 请求 url 不支持 http,请使用 https。

小程序已经不支持 http 请求,请使用 https。

代码示例
扫码体验
my.request(object object)
datatype 为 base64
method 为put
method 为 delete
success 参数
fail 参数
my.request({
  url: 'https://httpbin.org/post',
  method: 'post',
  data: {
    from: '支付宝',
    production: 'alipayjsapi',
  },
  headers: {
    'content-type': 'application/json', //默认值
  },
  datatype: 'json',
  success: function (res) {
    my.alert({ content: 'success' });
  },
  fail: function (error) {
    console.error('fail: ', json.stringify(error));
  },
  complete: function (res) {
    my.hideloading();
    my.alert({ content: 'complete' });
  },
});
my.request({
  url: 'https://gw.alipayobjects.com/mdn/miniapp_de/afts/img/a*g1kwsjbe2zeaaaaaaaaaaabjarqnaq',
  method: 'get',
  datatype: 'base64',
  success: resp => {
    console.log('resp data length', resp.data.length);
    console.log('resp data', resp.data); // 返回格式类似于:data:image/png;base64,ivborw0kg...
  },
  fail: err => {
    console.log('error', err);
  },
});
my.request({
  url: 'https://httpbin.org/put',
  method: 'put',
  data: {
    from: '支付宝',
    production: 'alipayjsapi',
  },
  headers: {
    'content-type': 'application/json', //默认值
  },
  datatype: 'json',
  success: function (res) {
    my.alert({ content: 'success' });
  },
  fail: function (error) {
    console.error('fail: ', json.stringify(error));
  },
  complete: function (res) {
    my.hideloading();
    my.alert({ content: 'complete' });
  },
});
my.request({
  url: 'https://httpbin.org/delete',
  method: 'delete',
  data: {
    from: '支付宝',
    production: 'alipayjsapi',
  },
  headers: {
    'content-type': 'application/x-www-form-urlencoded',
  },
  datatype: 'json',
  success: function (res) {
    console.log('正常请求'  json.stringify(res));
    my.alert({
      content: '正常请求'  json.stringify(res),
    });
  },
  fail: function (error) {
    console.error('fail: ', json.stringify(error));
  },
  complete: function (res) {},
});
{
  "data": {},
  "status": 200,
  "headers": {
    "server": "tengine",
    "date": "fri, 23 sep 2022 08:33:43 gmt",
    "content-type": "application/json; charset=utf-8",
    "content-length": "725",
    "connection": "keep-alive",
    "keep-alive": "timeout=5",
    "x-server-id": "49-5352",
    "request-id": "0bff86ca16639220231708789893",
    "x-officeingress-sign": "927c5956339dafa23904a10bfc8589cf33251eaebe5b052c7ee623eee9f43e9b47cc69def3b68e1e840f452f17026ca642dd1b9c9ff4a586ee27d6c3e173a3e039884cf89d3038d1",
    "vary": "accept-encoding",
    "x-rc-zone": "gz00d-gz00g",
    "x-content-version": "tue, 23 aug 2022 11:36:07 gmt",
    "x-render-pack-md5": "20d9993e41ed62ffcd41aa3869fe148c",
    "x-render-pack-pro-mode": "1",
    "access-control-allow-origin": "*",
    "cache-control": "max-age=0, s-maxage=120, must-revalidate",
    "x-render-date": "fri, 23 sep 2022 08:33:43 gmt",
    "etag": "w/\"2e2-qvaq0jsjuxu/qqwpmvtms/etwtm\"",
    "x-frame-options": "sameorigin",
    "x-xss-protection": "1; mode=block",
    "x-content-type-options": "nosniff",
    "x-download-options": "noopen"
  }
}
{
  "error": 4,
  "errormessage": "未配置域名白名单,无权访问域名。查看如何配置:https://opendocs.alipay.com/mini/api/owycmh#错误码"
}
// 当错误码为 14 或 19 时,会多返回 status、data、headers。可通过这些字段获取服务端相关错误信息。
{
  "status": 405,
  "headers": {
      "server": "openresty/1.11.2.5",
      "x-powered-by": "php/5.6.32",
      "content-type": "text/html; charset=utf-8",
      "access-control-allow-methods": "post, get, options",
      "access-control-allow-origin": "*",
      "date": "tue, 14 mar 2023 02:01:06 gmt",
      "access-control-allow-headers": "content-type",
      "connection": "keep-alive"
  },
  "data": "",
  "error": 19,
  "errormessage": "http status error"
}
  • tip
    如需在不同环境请求不同的 url,可通过 my.env 的 clientenv (基础库 2.7.24 )判断当前客户端环境(生产环境/沙箱环境),以及通过 my.getaccountinfosync().miniprogram.envversion 判断小程序自身的版本(开发版/正式版等)。
  • bug
    支付宝 10.3.90 以下版本 android 端 my.request 不支持 http 重定向,请求会失败。此问题 10.3.90 已修复
  • bug
    支付宝 10.5.10 以下版本,当响应的状态码 >= 400 时,ios 端 fail 回调参数的 data 字段可能为空。此缺陷 10.5.10 已修复。
  • bug
    ios 端 10.5.10 以前,即使 url 是 https 协议,可能也会误报 {error: 20, errormessage: '请求 url 不支持 http,请使用 https'}。此缺陷 10.5.10 版本已修复。

q:my.request 是否支持 ip 地址请求?是否支持 ipv6 域名?

a:
  • 安卓支付宝客户端 10.3.50、ide 3.8.2 开始支持 ip 地址请求。在开发阶段,可勾选小程序开发者工具右上角 详情 > 域名信息 > 忽略 http 请求域名合法性检查,以使用本地局域网 ip 进行调试。
    ios 端使用 ip 地址请求时,请注意将 手机设置 > 支付宝 > “本地服务”开关打开。
  • 支付宝客户端 10.2.30 或更高版本,my.request 支持 ipv6 域名。
  • my.request 不建议使用关于 127.0.0.1 的测试请求。

q:my.request 支持 promise 风格调用吗?

a:

支持。样例: my.request({url: ''}).then(res => console.log(res)).catch(err => console.log(err))

q:小程序是否支持 cookie?

a:

my.request 默认支持 cookie,但在 android 上有较小概率会发生丢失,不建议使用。强依赖 cookie 的情况下,可从 response headers 读取 set-cookie 字段,在下次请求时通过入参 headers 手工设置 cookie(注意:必须同时设置入参 enablecookie 为 true)。

q:request 请求头过大导致 http 请求返回 400 状态码,如何处理?

a:

如果是 referer 过长导致,可以使用 referrerstrategy 参数来对 referer 格式进行控制(设置为 'index' 或 'page');如需兼容低版本的客户端(10.3.50 以下不支持 referrerstrategy 参数),可以通过配置服务器参数解决,例如 nginx 服务器可以通过调整 client_header_buffer_size 和 large_client_header_buffers 参数来控制尺寸限制;如果无法更改服务器配置,还可以通过尝试判断当前客户端版本号提醒用户进行升级。

内容没有解决您的问题?您还可以前往 或 寻求帮助
凯发k8官方网娱乐官方 copyright © 2022 支付宝(杭州)信息技术有限公司  | icp证浙b2-20160559
该文档对你是否有帮助?
当前页面目录
网站地图