使用magento避免不了使用他们的API就是SOAP跟后端的erp打交道。出现错误很恶心的是在内网调试是没问题的,但是到了外网就挂了。
最常见的就是
SOAP-ERROR: Parsing WSDL: Couldn't load from failed to load external entity
这个错误。
产生这个错误的情况很多,怎么排查呢?
1、确保你的网站确保安装了SSL证书;
2、直接访问https://yourdomain/api/v2_soap看看是否报错,一般是会报错的,那么检查一下你的服务器是否有防火墙有相关的设置拦截了;
3、排查一下 PHP 的 openssl 扩展是否开启在php.ini里面,宝塔用户不用管因为是默认开启的;
查看 .ini 如下配置,去掉前边的 ; 即可。
;extension=php_openssl.dll
4、排查API所在的服务器能否访问自身,这个很重要。修改 /etc/hosts
添加域名与本机的映射
127.0.0.1 www.yourdomian.com
Nginx 502 Bad Gateway错误
[error] 15072#0: *685698 recv() failed (104: Connection reset by peer) while reading response header from upstream
在php.ini和php-fpm.conf中分别有这样两个配置项:max_execution_time和request_terminate_timeout。
这两项都是用来配置一个PHP脚本的最大执行时间的。当超过这个时间时,PHP-FPM不只会终止脚本的执行,
还会终止执行脚本的Worker进程。所以Nginx会发现与自己通信的连接断掉了,就会返回给客户端502错误。将这2个参数值适当加大即可。
修改NGINX 适当加大
client_header_buffer_size
client_body_buffer_size
server_names_hash_bucket_size
最后验证是否成功
先去后台建立一个soap帐户并赋予权限记住用户名密码,然后上测试代码
<?php
libxml_disable_entity_loader(false);
try {
$wsdl = 'http://www.yourdomain.com/api/v2_soap/?wsdl';
$client = new SoapClient($wsdl);
$session = $client->login('用户名', '密码');
$result = $client->customerCustomerCreate($session, array('email' => '444@example.org', 'firstname' => 'Dough', 'lastname' => 'Deeks', 'password' => 'password', 'website_id' => 1, 'store_id' => 1, 'group_id' => 1));
var_dump ($result);
die();
}
catch(SoapFault $e) {
var_dump ($e);
}
?>
以上是创建用户的代码