Since 8.5rpc
重要提醒:由于JS传入的JSON数据无法包含数据类型,在Native层转为字典时可能会由于数据类型问题导致误差,如果是数字类型的精确值,尽量使用字符串来进行传递。举例:{"value":9.45}
会被native转为{"value":9.449999999999999}
然后上发到服务端。应该改为使用{"value":"9.45"}
来传递
使用方法
AlipayJSBridge.call('rpc', {
operationType: 'alipay.client.xxxx',
requestData: [],
headers: {}
}, function(result) {
console.log(result);
});
代码演示
基本使用
<h1>点击按钮发起rpc请求</h1>
<a href="javascript:void(0)" class="btn rpc">发起请求</a><br />
<a href="javascript:void(0)" class="btn rpcHeader">发起有响应头返回的请求</a>
<script>
function ready(callback) {
if (window.AlipayJSBridge) {
callback && callback();
} else {
document.addEventListener('AlipayJSBridgeReady', callback, false);
}
}
ready(function() {
document.querySelector('.rpc').addEventListener('click', function() {
AlipayJSBridge.call('rpc', {
operationType: 'alipay.client.xxxx',
requestData: [],
headers: {}
}, function(result) {
alert(JSON.stringify(result));
});
});
document.querySelector('.rpcHeader').addEventListener('click', function() {
AlipayJSBridge.call('rpc', {
operationType: 'alipay.client.xxxx',
requestData: [],
headers: {},
getResponse: true
}, function(result) {
alert(JSON.stringify(result));
});
});
});
</script>
API
AlipayJSBridge.call('rpc', {
operationType:,
requestData:,
headers
}, fn);
入参
名称 | 类型 | 描述 | 必选 | 默认值 | 版本 |
---|
operationType | string | rpc服务名称 | Y | | |
requestData | array | rpc请示的参数。需要开发者根据具体rpc接口自行构造 | N | | |
headers | object | rpc请求设置的headers | N | {}} | 9.0 |
gateway | string | 网关地址 | N | alipay网关 | 9.0 |
compress | boolean | 是否支持request gzip压缩 | N | true | 9.0 |
disableLimitView | boolean | RPC网关被限流时是否禁止自动弹出统一限流弹窗。 | N | false | 9.5 |
timeout | int | RPC超时时间,单位秒 | N | 框架统一设置,策略较复杂,具体可咨询@狄萧 @觉梦 iOS端wifi环境20s,其它环境30s。 Android端wifi/4g环境12s到42s之间。其它环境32s到60s之间 | 10.0.3 |
getResponse | boolean | 获取rpc响应头(注意,如果设置为true的话,响应数据会多一层嵌套,可用于数据回流上报获取traceId/entityId场景,需要开启MMTP开关) | N | false | 10.0.18 |
fn | function | 回调函数 | N | | |
出参
回调函数带入的参数result: {error }
错误
RPC原生错误码大全
error | 描述 |
---|
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
可以在支付宝钱包中请求网商银行或者其他app的网关,需要通过js传gateway,然后客户端添加gateway对应appKey到线上开关配置
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限流弹框