支付宝SDK 15.8.35沙箱支付出现ERR_NAME_NOT_RESOLVED
结论
net::ERR_NAME_NOT_RESOLVED 表示 DNS 无法解析支付宝沙箱收银台域名 mobileclientgw-pool.sandbox.alipay.net。
这类错误通常与订单参数、签名或 WebView 配置无关,因为问题发生在收银台页面加载之前。应先检查当前网络的 DNS。如果多个网络和设备都无法解析该域名,可能是支付宝沙箱域名或沙箱服务暂时不可用。此时需要等待服务恢复、升级 SDK 或沙箱客户端,或者联系支付宝技术支持确认。
原因分析
支付流程已经成功唤起支付宝客户端,并进入以下地址:
http://mobileclientgw-pool.sandbox.alipay.net/cashierRoutePay.htm
随后,WebView 返回:
net::ERR_NAME_NOT_RESOLVED
这个错误说明域名没有解析出 IP 地址,与以下问题的表现不同:
- 签名错误通常会返回支付宝业务错误码。
- 订单参数有误时,通常会显示明确的参数校验提示。
- Android 禁止 HTTP 明文访问时,通常提示
CLEARTEXT communication not permitted,而不是ERR_NAME_NOT_RESOLVED。 - WebView 缺少网络权限时,通常也不会只表现为某个指定域名无法解析。
可能的原因有:
- 当前 Wi-Fi、运营商网络或自定义 DNS 无法解析支付宝沙箱域名。
- VPN、代理、广告过滤软件或企业网络拦截了该域名。
- 支付宝沙箱域名临时异常、已经调整或停止解析。
- SDK 与测试所用的支付宝沙箱客户端不匹配。
- 沙箱环境设置得太晚,支付链路混用了生产和沙箱配置。
仅凭这个错误页面,无法认定问题一定是 SDK 15.8.35 的缺陷。如果所有网络都出现相同结果,应请支付宝技术支持确认该版本对应的沙箱收银台地址目前是否仍然有效。
排查与解决步骤
1. 更换网络验证
分别使用手机流量和普通家庭 Wi-Fi 测试,同时暂时关闭:
- VPN 或网络代理
- 私有 DNS
- 广告过滤应用
- 企业网络安全软件
如果更换网络后可以正常访问,问题就在本地 DNS 或网络出口,而不是支付代码。
2. 直接检查域名能否解析
可以在浏览器中尝试访问该域名,也可以在开发机上执行:
nslookup mobileclientgw-pool.sandbox.alipay.net
还可以使用:
dig mobileclientgw-pool.sandbox.alipay.net
如果多个网络都返回 NXDOMAIN、SERVFAIL,或者始终没有解析结果,客户端无法自行修复,需要确认支付宝沙箱服务的状态。
不要通过修改系统 hosts、写死 IP 或手动替换 URL 来绕过问题。支付宝支付链路涉及 HTTPS、证书、路由和风控,固定 IP 可能引发安全问题,也不能保证后续接口可以正常工作。
3. 确认沙箱环境设置正确
Android 接入时,应在创建 PayTask 和发起支付之前切换到沙箱环境:
import com.alipay.sdk.app.EnvUtils;
import com.alipay.sdk.app.PayTask;
EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);
PayTask payTask = new PayTask(activity);
Map<String, String> result = payTask.payV2(orderInfo, true);
建议在应用初始化阶段设置一次:
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
if (BuildConfig.DEBUG) {
EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);
}
}
}
环境设置必须早于支付调用。服务端生成订单时,也必须使用沙箱网关和沙箱应用配置,不能混用生产环境的 appId、密钥、订单信息与沙箱客户端。
4. 核对测试客户端和 SDK
沙箱支付通常需要配套的支付宝沙箱客户端。混用普通支付宝客户端、旧版沙箱客户端和新版 SDK,可能会产生兼容问题。
可以按以下方式检查:
- 使用支付宝开放平台当前提供的沙箱客户端。
- 检查支付 SDK 是否有更新版本。
- 清除沙箱客户端数据,然后重新登录。
- 卸载旧客户端,再安装当前沙箱页面提供的版本。
- 如果问题是在升级 SDK 后出现的,可以临时回退到此前验证可用的版本进行对照测试。
是否需要升级或回退到某个具体版本,应以支付宝开放平台当前发布的信息为准,不能根据这个错误直接判断版本问题。
5. 确认网络权限
虽然这个错误更符合 DNS 解析失败的表现,仍需确认应用声明了网络权限:
<uses-permission android:name="android.permission.INTERNET" />
如果日志中还出现了系统拦截 HTTP 明文流量的提示,可以在仅用于沙箱调试的构建中检查网络安全配置。但不能因为 URL 使用了 http://,就直接把 ERR_NAME_NOT_RESOLVED 归因于明文流量限制。
6. 收集信息并联系支付宝支持
如果不同设备和不同运营商网络都无法解析该域名,提交问题时应附上:
- 支付 SDK 版本:
15.8.35 - 支付宝沙箱客户端版本
- Android 系统版本
- 出错时间和所用网络
- 完整错误信息
- 域名解析结果
- 是否只有沙箱失败,以及生产环境是否正常
提交日志前,应删除订单串、session、设备标识、商户私钥等敏感数据。
注意事项
沙箱收银台无法访问,不代表生产支付一定存在异常。两套环境使用不同的域名、网关和账户配置。不要为了验证沙箱问题,直接使用真实金额进行生产支付。如果必须在生产环境验证,应使用小额订单,并完成退款和对账检查。
题目中的完整 URL 含有 session、utdid、tid 等信息,不应出现在公开日志、工单截图或线上监控中。即使这些值已经失效,分享前也应进行脱敏。
备注:内容仅供参考。
