You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CURL调用支付网关API遇连接失败问题求助

问题分析与解决方案

问题重现

近两日尝试用CURL调用返回JSON数据的支付网关API,每次调用均报错:

cURL Error #:Failed to connect to api.sandbox.vm.co.mz port 18352 after 813 ms: Couldn't connect to server

本地环境和Postman调用正常,但服务器上无法连接,使用的CURL代码如下:

$curl = curl_init();
curl_setopt_array($curl, 
  array(
    CURLOPT_PORT => "18352",
    CURLOPT_URL => "https://api.sandbox.vm.co.mz:18352/ipg/v1x/c2bPayment/singleStage/",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => json_encode($fields),
    CURLOPT_HTTPHEADER => array(
      'Content-Type' => 'application/json',
      'Authorization' =>  'Bearer ' . $this->getToken(),
      'origin' => 'developer.mpesa.vm.co.mz',
      'Connection' => 'keep-alive'
    )
  )
);

解决方案

1. 移除冗余的端口配置

你的URL已经明确指定了端口18352,同时设置CURLOPT_PORT会造成配置冲突,直接删除这一行:

// 删掉这行
CURLOPT_PORT => "18352",

2. 排查服务器网络连通性

登录你的服务器,执行以下命令测试网络是否能到达目标地址:

  • 测试端口连通性:telnet api.sandbox.vm.co.mz 18352
  • 用curl直接测试:curl -v https://api.sandbox.vm.co.mz:18352/ipg/v1x/c2bPayment/singleStage/

如果命令返回无法连接,说明服务器的防火墙/安全组出站规则屏蔽了18352端口,需要联系服务器管理员或者云服务商开放该端口的出站权限。

3. 验证DNS解析是否正常

在服务器上执行ping api.sandbox.vm.co.mz,对比本地环境解析出的IP地址,如果不一致,说明服务器DNS解析异常,可以尝试更换服务器的DNS服务器(比如用8.8.8.8)。

4. 临时跳过SSL证书验证(测试用)

部分服务器的curl可能不信任目标网关的SSL证书,可临时添加以下配置测试(生产环境请勿使用,建议安装对应CA证书):

CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,

5. 调整超时与HTTP版本

尝试延长超时时间,或者切换HTTP版本测试:

CURLOPT_TIMEOUT => 60, // 延长至60秒
// 或者尝试HTTP/2(如果服务器支持)
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2_0,

内容的提问来源于stack exchange,提问作者Vasu_Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 11:10:33