当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP使用SOAP调用API操作示例

发布:smiling 来源: PHP粉丝网  添加日期:2021-11-03 11:41:10 浏览: 评论:0 

这篇文章主要介绍了PHP使用SOAP调用API操作,结合实例形式分析了php基于SOAP调用API的常见操作技巧及相关问题解决方法,需要的朋友可以参考下

本文实例讲述了PHP使用SOAP调用API操作,分享给大家供大家参考,具体如下:

  1. /*图片转换为 base64格式编码*/ 
  2. function base64EncodeImage($image_file
  3.   $base64_image = ''
  4.   $image_info = getimagesize($image_file); 
  5.   $image_data = fread(fopen($image_file'r'), filesize($image_file)); 
  6.   //$base64_image = 'data:' . $image_info['mime'] . ';base64,' . chunk_split(base64_encode($image_data)); 
  7.   $base64_image = chunk_split(base64_encode($image_data)); 
  8.   return $base64_image
  9. $strPhotoFront_base64 = base64EncodeImage("static/img/a.png"); 
  10. $strPhotoRear_base64 = base64EncodeImage("static/img/b.png"); 
  11. $paras["strPhotoFront"] = $strPhotoFront_base64
  12. $paras["strPhotoRear"] = $strPhotoRear_base64
  13. $paras["strSecretKey"] = ""
  14. $wsdl = ""
  15. $client = new SoapClient($wsdl); 
  16. $soapParas = array($paras); 
  17. $outString = $client->__soapCall("UploadPhotoId"$soapParas); 
  18. $obj = simplexml_load_string($outString->UploadPhotoIdResult->any); 
  19. echo($obj->ExtraInfo); 
  20. echo "<br/>"
  21. echo($obj->ExtraCode); 
  22. echo "<br/>"
  23. echo($obj->Code); 
  24. echo "<br/>"
  25. echo($obj->Message); 

注:出现提示:Fatal error: Class 'SoapClient' not found的情况,可参考《PHP Class SoapClient not found解决方法》

附:SOAP-ERROR: Parsing WSDL:Couldn't load from “xxxxxxx” 解决方案

用php的soapclient连接第三方的webservice,是https的,连接报错SOAP-ERROR: Parsing WSDL:Couldn't load from “xxxxxxx”

首先排查 php的soap扩展是否安装

openssl扩展

服务器本身安装openssl

排除第三方对本服务器的IP限制

最后怀疑是https需要ssl验证,而本机没有pem文件

可以通过如下设置,忽略ssl验证

verify_peer:指定是否验证ssl,默认为true

将verify_peer设为false

另外,允许引用外部xml实体

加libxml_disable_entity_loader(false);语句

  1. libxml_disable_entity_loader(false); 
  2. $opts = array
  3.   'ssl'  => array
  4.       'verify_peer'     => false 
  5.     ), 
  6.   'https' => array
  7.       'curl_verify_ssl_peer' => false, 
  8.       'curl_verify_ssl_host' => false 
  9.    ) 
  10. ); 
  11. $streamContext = stream_context_create($opts); 
  12. $client = new SoapClient("https://urlToSoapWs"
  13.  array
  14.    'stream_context'  => $streamContext 
  15.  )); 

禁止引用外部xml实体

libxml_disable_entity_loader(true);

nginx 报错 upstream timed out (110: Connection timed out)解决方案

nginx每隔几个小时就会报下面的错误:

2013/05/18 21:21:36 [error] 11618#0: *324911 upstream timed out (110: Connection timed out) while reading response header from upstream,

client: 42.62.37.56, server: localhost, request: “GET /code-snippet/2747/HTML5-Canvas-usage HTTP/1.0”,

upstream: “fastcgi://127.0.0.1:9002”, host: “outofmemory.cn”, referrer: “http://outofmemory.cn/code-snippet/tagged/canvas“

报这个错误之后,整个服务器就不响应了,但是nginx后面的webpy程序没有任何错误,后端的数据库也很正常,从网上查了很多资料,都是说要修改proxy_read_timeout,proxy_send_timeout和proxy_buffer几个相关设置的值。

如下配置,要放在server配置节之内

  1. large_client_header_buffers 4 16k; 
  2. client_max_body_size 30m; 
  3. client_body_buffer_size 128k; 
  4. proxy_connect_timeout 300; 
  5. proxy_read_timeout 300; 
  6. proxy_send_timeout 300; 
  7. proxy_buffer_size 64k; 
  8. proxy_buffers   4 32k; 
  9. proxy_busy_buffers_size 64k; 
  10. proxy_temp_file_write_size 64k; 
  11. fastcgi_connect_timeout 300; 
  12. fastcgi_read_timeout 300; 
  13. fastcgi_send_timeout 300; 
  14. fastcgi_buffer_size 64k; 
  15. fastcgi_buffers   4 32k; 
  16. fastcgi_busy_buffers_size 64k; 
  17. fastcgi_temp_file_write_size 64k; 

你可以看到上面是proxy_和fastcgi_两种配置,就是说如果你的nginx后面是proxy,就设置proxy相关的配置,如果是fastcgi就设置fastcgi相关的配置。

Tags: SOAP PHP调用API

分享到: