全部产品
云市场

RPC 调用

更新时间:2019-09-12 17:15:24

重要:由于 JS 传入的 JSON 数据无法包含数据类型,在 Native 层转为字典时可能会由于数据类型问题导致误差,如果是数字类型的精确值,尽量使用字符串来进行传递。例如:{"value":9.45} 会被 native 转为 {"value":9.449999999999999} 然后上发到服务端。应该改为使用 {"value":"9.45"} 来传递。

RPC 接口的使用方法

  1. AlipayJSBridge.call('rpc', {
  2. operationType: 'alipay.client.xxxx',
  3. requestData: [],
  4. headers: {}
  5. }, function(result) {
  6. console.log(result);
  7. });

代码示例

  1. <h1>点击按钮发起 RPC 请求</h1>
  2. <a href="javascript:void(0)" class="btn rpc">发起请求</a><br/>
  3. <a href="javascript:void(0)" class="btn rpcHeader">发起有响应头返回的请求</a>
  4. <script>
  5. function ready(callback) {
  6. // 如果 jsbridge 已经注入则直接调用
  7. if (window.AlipayJSBridge) {
  8. callback && callback();
  9. } else {
  10. // 如果没有注入则监听注入的事件
  11. document.addEventListener('AlipayJSBridgeReady', callback, false);
  12. }
  13. }
  14. ready(function() {
  15. document.querySelector('.rpc').addEventListener('click', function() {
  16. AlipayJSBridge.call('rpc', {
  17. operationType: 'alipay.client.xxxx',
  18. requestData: [],
  19. headers: {}
  20. }, function(result) {
  21. alert(JSON.stringify(result));
  22. });
  23. });
  24. document.querySelector('.rpcHeader').addEventListener('click', function() {
  25. AlipayJSBridge.call('rpc', {
  26. operationType: 'alipay.client.xxxx',
  27. requestData: [],
  28. headers: {},
  29. getResponse: true
  30. }, function(result) {
  31. alert(JSON.stringify(result));
  32. });
  33. });
  34. });
  35. </script>

API

  1. AlipayJSBridge.call('rpc', {
  2. operationType:,
  3. requestData:,
  4. headers
  5. }, fn);

入参

名称 类型 描述 必选 默认值
operationType string RPC 服务名称 Y -
requestData array RPC 请求的参数。需要开发者根据具体 RPC 接口自行构造 N -
headers object RPC 请求设置的 headers N {}}
gateway string 网关地址 N alipay 网关
compress boolean 是否支持 request gzip 压缩 N true
disableLimitView boolean RPC 网关被限流时是否禁止自动弹出统一限流弹窗。 N false
timeout int RPC 超时时间,单位为秒 N 框架统一设置,策略较复杂
iOS 端 Wi-Fi 环境 20s,其它环境 30s。
Android 端 Wi-Fi/4G 环境 12s 到 42s 之间。其它环境 32s 到 60s 之间
getResponse boolean 获取 RPC 响应头(注意:如果设置为 true 的话,响应数据会多一层嵌套,可用于数据回流上报获取 traceId/entityId) N false
fn function 回调函数 N -

出参

回调函数带入的参数 result: {error }。

名称 类型 描述
error string 错误码

错误码描述

错误码 描述
10 网络错误
11 请求超时
其他 由 mobilegw 网关定义

RPC 原生错误码

错误码 描述
1000 成功
0 未知错误
1 客户端找不到通讯对象
2 客户端没有网络(JSAPI 做了转换,返回 10)
3 客户端证书错误
4 客户端网络连接超时
5 客户端网络速度过慢
6 客户端请求服务端没返回
7 客户端网络 IO 错误
8 客户端网络请求调度错误
9 客户端处理错误
10 客户端数据反序列化错误,服务端数据格式有误
11 客户端登录失败
12 客户端登录账号切换
13 请求中断错误,例如线程中断时网络请求会被中断
14 客户端网络缓存错误
15 客户端网络授权错误
16 DNS 解析错误
17 operationType 不在白名单
1001 拒绝访问
1002 调用次数超过限制:系统繁忙,请稍后再试。
2000 登录超时,请重新登录
3000 缺少操作类型或者此操作类型不支持
3001 请求数据为空:系统繁忙,请稍后再试
3002 数据格式有误
4001 服务请求超时,请稍后再试
4002 远程调用业务系统异常:网络繁忙,请稍后再试
4003 创建远程调用代理失败:网络繁忙,请稍后再试
5000 未知错误:抱歉,暂时无法操作,请稍后再试
6000 RPC-服务找不到
6001 RPC-目标方法找不到
6002 RPC-参数数目不正确
6003 RPC-目标方法不可访问
6004 RPC-JSON 解析异常
6005 RPC-调用目标方法时参数不合法
6666 RPC-业务异常
7000 没有设置公钥
7001 验签的参数不够
7002 验签失败
7003 验签时间戳校验失败
7004 验签 RPC 接口 operationType 参数为空
7005 productId 参数为空
7006 验签接口 did 参数为空
7007 验签接口 请求发送时间参数 t 为空
7008 验签接口 IMEI(客户端设备标识)参数为空
7009 验签接口 IMSI(客户端用户标识)为空
7010 验签接口 API 版本号为空
7011 验签接口 用户没有权限
7012 验签接口 RPC 没有对外开放
7013 验签接口 productId 没有注册或者获取密钥为空
7014 验签接口 加签数据为空
7015 验签接口 签约无效
7016 验签接口 请求登录 RPC 传入 sid 为空
7017 验签接口 请求登录 RPC 传入 sid 无效
7018 验签接口 请求登录 RPC 传入 token 无效
7019 验签接口 请求登录 RPC 获取 alipayuserid 为空
8001 etag:响应数据没有变化

RPC 自定义 gateway

可在 RPC 调用中指定请求的网关地址。

RPC 限流逻辑

容器版本 disableLimitView 行为 回调参数
<=9.9.5 true 静默 1002
<=9.9.5 false Alert 1002
>=9.9.6 true 静默 1002
>=9.9.6 false 网关处理 100201
行为类型 描述
静默
Alert 弹出统一限流框,如下图
Toast 弹出系统 Toast,如果用户关闭系统则没有
网关处理 根据网关的 RPC 配置,静默 Alert Toast

RPC 限流弹框

traffic limit