PHP使用SOAP调用API操作示例


Posted in PHP onDecember 25, 2018

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

/*图片转换为 base64格式编码*/
function base64EncodeImage($image_file)
{
  $base64_image = '';
  $image_info = getimagesize($image_file);
  $image_data = fread(fopen($image_file, 'r'), filesize($image_file));
  //$base64_image = 'data:' . $image_info['mime'] . ';base64,' . chunk_split(base64_encode($image_data));
  $base64_image = chunk_split(base64_encode($image_data));
  return $base64_image;
}
$strPhotoFront_base64 = base64EncodeImage("static/img/a.png");
$strPhotoRear_base64 = base64EncodeImage("static/img/b.png");
$paras["strPhotoFront"] = $strPhotoFront_base64;
$paras["strPhotoRear"] = $strPhotoRear_base64;
$paras["strSecretKey"] = "";
$wsdl = "";
$client = new SoapClient($wsdl);
$soapParas = array($paras);
$outString = $client->__soapCall("UploadPhotoId", $soapParas);
$obj = simplexml_load_string($outString->UploadPhotoIdResult->any);
echo($obj->ExtraInfo);
echo "<br/>";
echo($obj->ExtraCode);
echo "<br/>";
echo($obj->Code);
echo "<br/>";
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);语句

libxml_disable_entity_loader(false);
$opts = array(
  'ssl'  => array(
      'verify_peer'     => false
    ),
  'https' => array(
      'curl_verify_ssl_peer' => false,
      'curl_verify_ssl_host' => false
   )
);
$streamContext = stream_context_create($opts);
$client = new SoapClient("https://urlToSoapWs",
 array(
   'stream_context'  => $streamContext
 ));

禁止引用外部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_timeoutproxy_buffer几个相关设置的值。

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

large_client_header_buffers 4 16k;
client_max_body_size 30m;
client_body_buffer_size 128k;
proxy_connect_timeout 300;
proxy_read_timeout 300;
proxy_send_timeout 300;
proxy_buffer_size 64k;
proxy_buffers   4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
fastcgi_connect_timeout 300;
fastcgi_read_timeout 300;
fastcgi_send_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers   4 32k;
fastcgi_busy_buffers_size 64k;
fastcgi_temp_file_write_size 64k;

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

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
dedecms系统常用术语汇总
Apr 03 PHP
PHP安全技术之 实现php基本安全
Sep 04 PHP
php引用返回与取消引用的详解
Jun 08 PHP
php实现获取文件mime类型的方法
Feb 11 PHP
Yii2使用自带的UploadedFile实现的文件上传
Jun 20 PHP
PHP判断数组是否为空的常用方法(五种方法)
Feb 08 PHP
PHP mysqli事务操作常用方法分析
Jul 22 PHP
Laravel中encrypt和decrypt的实现方法
Sep 24 PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 PHP
php无限极分类实现方法分析
Jul 04 PHP
PHP中散列密码的安全性分析
Jul 26 PHP
php实现登录页面的简单实例
Sep 29 PHP
详解PHP实现支付宝小程序用户授权的工具类
Dec 25 #PHP
PHP正则匹配到2个字符串之间的内容方法
Dec 24 #PHP
PHP基于PDO扩展操作mysql数据库示例
Dec 24 #PHP
PHP封装的page分页类定义与用法完整示例
Dec 24 #PHP
tp5(thinkPHP5)框架连接数据库的方法示例
Dec 24 #PHP
php workerman定时任务的实现代码
Dec 23 #PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
Dec 21 #PHP
You might like
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
2011/12/01 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
2016/12/25 PHP
PHP+原生态ajax实现的省市联动功能详解
2017/08/15 PHP
Laravel 简单实现Ajax滚动加载示例
2019/10/22 PHP
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
原生Javascript封装的一个AJAX函数分享
2014/10/11 Javascript
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
2015/12/09 Javascript
JS给swf传参数的实现方法
2016/09/13 Javascript
微信小程序之拖拽排序(代码分享)
2017/01/21 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
jQuery仿IOS弹出框插件
2017/02/18 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
2020/01/26 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
[44:40]2018DOTA2亚洲邀请赛3月30日 小组赛A组Liquid VS OG
2018/03/31 DOTA
Python利用Beautiful Soup模块搜索内容详解
2017/03/29 Python
python处理按钮消息的实例详解
2017/07/11 Python
Python编程求质数实例代码
2018/01/31 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
2019/06/08 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
2019/07/02 Python
tensorflow之变量初始化(tf.Variable)使用详解
2020/02/06 Python
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
2014/07/17 面试题
毕业生实习鉴定
2013/12/11 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
公司授权委托书样本
2014/09/15 职场文书
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
雷锋之歌观后感
2015/06/10 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
2019年教师节活动策划方案
2019/09/09 职场文书
python开发实时可视化仪表盘的示例
2021/05/07 Python
Java使用jmeter进行压力测试
2021/07/09 Java/Android