今天一看广州海关的文档瞬间之前看的接口文档都不是问题,广州海关的文档那个才是问题啊!说了一堆怎么定制报文格式,然后就没有然后了,可你得告诉我怎么发送报文,发送到那里?文档只字不写,坑!然后又得去问海关的人要,卧槽,广州海关那边接口太特么强大,给一个地址,用户名,密码 ,用ftp上传xml文档,瞬间觉得这种接口高大上,第一次用过这样的接口,太特么给力,给广州海关点32个赞
测试代码
$conn_id = ftp_connect($ftp_server,$ftp_port) or die("Couldn't connect to $ftp_server");
if (@ftp_login($conn_id, $ftp_user, $ftp_pass)) {
echo "Connected as $ftp_user@$ftp_server\n";
} else {
echo "Couldn't connect as $ftp_user\n";
}
//切换目录
ftp_chdir($conn_id,'UPLOAD');
//保存报文
$file = md5('订单号');
//上传海关
$ret = ftp_nb_put($conn_id, "test.remote", $file, FTP_BINARY);
while ($ret == FTP_MOREDATA) {
// 在这里可以加入其它代码
echo "异步执行代码哈哈哈哈哈哈哈.\n";
// 继续传送...
$ret = ftp_nb_continue ($conn_id);
}
if ($ret != FTP_FINISHED) {
echo "上传文件中发生错误...";
exit(1);
}
echo '传送完成';
// 关闭连接
ftp_close($conn_id);
PHP警告提示
Warning: ftp_nb_put(): Opening BINARY mode data connection for test.remote
解决方式
在登录成功之后加入ftp_pasv($conn_id, true);,打开ftp被动模式即可
原因分析
FTP连接分析
1、主动FTP:
命令连接:客户端 >1024端口 -> 服务器 21端口
数据连接:客户端 >1024端口
2、被动FTP:
命令连接:客户端 > 1024端口 -> 服务器 21端口
数据连接:客户端 > 1024端口 -> 服务器 > 1024端口
php默认是使用主动的,因此在数据传输的时候服务器端未能打开连接本地客户端,而造成数据传输失败,因此看到服务器端文件也为0个字节