网站建设资讯

NEWS

网站建设资讯

同步接口数据php 接口数据对接

PHP 同时多次POST数据到同一网站相同接口获取返回数据 用curl 总是会出现504错误?

具体什么报错,有图片吗?

我们提供的服务有:成都网站建设、成都网站制作、微信公众号开发、网站优化、网站认证、沙河ssl等。为上千余家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的沙河网站制作公司

由于nginx默认的fastcgi进程响应缓冲区太小造成,这种情况下导致fastcgi进程被挂起,如果fastcgi服务队这个挂起处理不是很好的话,就可能提示“504 Gateway Time-out”错误。

PHP环境的配置问题,这里我们需要对php-fpm和nginx进行配置修改。因为这种情况下,也会出现“504 Gateway Time-out”错误提示。

让Discuz3.2用户数据同步第三方api接口怎么做

第一步:在网站根文件夹建立“1.php”文件,写入以下数据:

?php

define('CHARSET', 'GBK'); //服务器端数据编码

require './source/class/class_xml.php'; //XML格式的文档和array的相互转换的类

error_reporting(7);

$charset = $_GET['charset'] ? $_GET['charset'] : $_POST['charset']; //客户端数据编码

//数据转码

if(strtoupper($charset) != CHARSET) {

foreach($POST as $key = $value) {

$POST[$key] = iconv($charset, CHARSET, $value);

}

foreach($GET as $key = $value) {

$GET[$key] = iconv($charset, CHARSET, $value);

}

}

$data = array('html'='', 'data'=''); //初始化要返回数据

$sign = $_GET['sign'] ? $_GET['sign'] : $_POST['sign']; //获取客户端请求数据的签名

$clientid = $_GET['clientid'] ? $_GET['clientid'] : $_POST['clientid']; //客户端ID

$client = get_client_by_clientid($clientid); //得到客户端的相关信息

if(empty($client)) { //客户端不存在

exit('CLIENT_NOT_EXISTS'); //直接返回失败

}

$datasign = ''; //数据签名

if(!empty($_POST)) {

unset($_POST['sign']); //删除签名参数,此参数不参加签名计算

$datasign = get_sign($_POST, $client['key']); //计算数据的签名

} else {

unset($_GET['sign']); //删除签名参数,此参数不参加签名计算

$datasign = get_sign($_GET, $client['key']); //计算数据的签名

}

if($datasign != $sign) { //签名不正确

exit('SIGN_ERROR'); //输入签名错误

}

if($_POST['op'] == 'getdata') { //判断是否为请求数据列表

$datalist = $data = array();//数据列表

$wherearr = array(); //SQL 条件数组

//获取客户端POST参数

$start = intval($_POST['start']); //起始数据行数

$limit = intval($_POST['items']); //要显示多少条数

$bannedids = addslashes($_POST['bannedids']); //客户端屏蔽的IDS

$param1 = addslashes($_POST['param1']); //数据调用参数1,假设此值要求为string型

$param2 = intval($_POST['param2']); //数据调用参数2,假设此值要求为int型

//处理参数1

if(!empty($param1)){

$wherearr[] = "fieldsparam1='$param1'";

}

//处理参数2

if(!empty($param2)) {

$wherearr[] = "fieldsparam2='$param2'";

}

//处理客户端屏蔽的IDS

if(!empty($bannedids)) {

$banids = explode(',', $bannedids);

$wherearr[] = "csid NOT IN (".implode("','", $banids)."')";

}

$where = !empty($wherearr) ? 'WHERE '.implode(' AND ', $wherearr) : ''; //构造条件

/*数据库相关处理

$query = DB::query('SELECT * FROM '.DB::table('tablename')." $where LIMIT $start, $limit"); //SQL查询

while($value = DB::fetch($query)) {

//此处为数据处理逻辑代码

$data[] = $value;

}

*/

//以下为临时测试数据,正式环境请根据自己的业务做相关调整

$url = '';

$data = range($start, $start + $limit);//构造临时的假数据

foreach($data as $value) {

//需要注意: 除 id, title, url, pic, picflag, summary 几个字段外,其它字段需要放到 fields 数组里。

$datalist[] = array(

'id' = $value,

'title' = 'xml_block_title'.$value, //标题

'url' = $url.'xml_server.php?csid='.$value, //链接地址

'pic' = $url.'/data/attachment/photo.gif', //图片地址

'picflag' = '0', //0为url 1为本地 2 为ftp远程;如果图片是DX系统中的图片可以情况设置为1或2,其它情况为0

'summary' = '', //简介

'fields' = array( //配置规范中fields中指定的字段

'author' = 'xml_user'.$value,

'authorid' = $value,

'field1' = 'field1value'.$value,

'field2' = 'field2value'.$value

)

);

}

$data['data'] = $datalist;

//如果要返回HTML代码,可直接使用以下代码

//$data['html'] = 'HTML CODE';

$xml = array2xml($data); //转换为XML文档

} else if($_GET['op'] == 'getconfig') {

$xml = file_get_contents('block_xml_sample.xml');//block_xml_sample.xml文件中的内容为 配置规范XML文档示例 的内容

} else {

$xml = 'NO_OPERATION';

}

ob_end_clean();

@header("Expires: -1");

@header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0", FALSE);

@header("Pragma: no-cache");

header("Content-type: text/xml");

echo $xml;

exit();

/**

* 获得客户端信息

* @param $clientid

* @return array 客户端信息数组

*/

function get_client_by_clientid($clientid){

$client = array();

$clientid = intval($clientid);

if($clientid) {

/*数据库相关处理

$client = DB::fetch_first('SELECT * FROM '.DB::table('clienttable')." clientid='$clientid'"); //SQL查询

*/

//以下为临时测试数据,正式环境请根据自己的业务做相关调整

//模拟数据库

$CLIENTSDB = array(

'100000' = array(

'clientid' = '100000',

'key' = '*654%#(asd94',

),

'200000' = array(

'clientid' = '200000',

'key' = '1#9!(@@34#94',

),

'300000' = array(

'clientid' = '300000',

'key' = '7$@^8^$7as89',

),

'400000' = array(

'clientid' = '400000',

'key' = '23@#86^%432',

),

);

$client = isset($CLIENTSDB[$clientid]) ? $CLIENTSDB[$clientid] : array();

}

return $client;

}

/**

* 生成签名

* @param array $para 参数数组

* @param string $key 加密密钥

* @return string 签名

*/

function get_sign($para, $key = ''){

ksort($para);

$signarr = array();

foreach($para as $k = $v) {

$signarr[] = $k.'='.$v;

}

$sign = implode('', $signarr);

$sign = md5($sign.$key);

return $sign;

}

?

注意:不是网站记录的URL来调试的时候,会出现“Access Denied”,那是网站防止文件外部打开的标志,进入“./source/class/class_xml.php”暂时关闭开头的二行:

if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {

exit('Access Denied');}

特别注意:99行时候的“$xml = file_get_contents('block_xml_sample.xml');//block_xml_sample.xml文件中的内容为 配置规范XML文档示例 的内容”;就是这个文件造成很多人安装第三方插件不成功的。这个文件改名称的同时记得要修改1.php的99行;

特别注意文件block_xml_sample.xml中的“item id="name"![CDATA[C/S 数据类]]/item”中间的“C/S 数据类”就是模块名称;有的时候如“item id="version"![CDATA[X1.5]]/item”版本号不对也会报错;修改为网站的版本即可。

第二步:建立“block_xml_sample.xml”文件,写入如下数据:

?xml version="1.0" encoding="ISO-8859-1"?

root

item id="Title"![CDATA[Discuz! Block]]/item

item id="Data"

item id="version"![CDATA[X1.5]]/item

item id="name"![CDATA[C/S 数据类]]/item

item id="fields"

item id="url"

item id="name"![CDATA[链接地址]]/item

item id="formtype"![CDATA[text]]/item

item id="datatype"![CDATA[string]]/item

/item

item id="title"

item id="name"![CDATA[标题]]/item

item id="formtype"![CDATA[title]]/item

item id="datatype"![CDATA[title]]/item

/item

item id="pic"

item id="name"![CDATA[图片]]/item

item id="formtype"![CDATA[pic]]/item

item id="datatype"![CDATA[pic]]/item

/item

item id="summary"

item id="name"![CDATA[简介]]/item

item id="formtype"![CDATA[summary]]/item

item id="datatype"![CDATA[summary]]/item

/item

item id="author"

item id="name"![CDATA[作者]]/item

item id="formtype"![CDATA[text]]/item

item id="datatype"![CDATA[text]]/item

/item

item id="authorid"

item id="name"![CDATA[作者ID]]/item

item id="formtype"![CDATA[text]]/item

item id="datatype"![CDATA[int]]/item

/item

item id="field1"

item id="name"![CDATA[字段1]]/item

item id="formtype"![CDATA[text]]/item

item id="datatype"![CDATA[string]]/item

/item

item id="field2"

item id="name"![CDATA[字段2]]/item

item id="formtype"![CDATA[text]]/item

item id="datatype"![CDATA[string]]/item

/item

/item

item id="getsetting"

item id="param1"

item id="title"![CDATA[数据调用参数1]]/item

item id="type"![CDATA[text]]/item

item id="default"![CDATA[]]/item

/item

item id="param2"

item id="title"![CDATA[数据调用参数2]]/item

item id="type"![CDATA[mcheckbox]]/item

item id="value"

item id="0"

item id="0"![CDATA[1]]/item

item id="1"![CDATA[选项1]]/item

/item

item id="1"

item id="0"![CDATA[2]]/item

item id="1"![CDATA[选项2]]/item

/item

/item

item id="default"![CDATA[1]]/item

/item

item id="titlelength"

item id="title"![CDATA[标题长度]]/item

item id="type"![CDATA[text]]/item

item id="default"![CDATA[40]]/item

/item

item id="summarylength"

item id="title"![CDATA[简介长度]]/item

item id="type"![CDATA[text]]/item

item id="default"![CDATA[80]]/item

/item

item id="start"

item id="title"![CDATA[起始数据行数]]/item

item id="type"![CDATA[text]]/item

item id="default"![CDATA[0]]/item

/item

/item

item id="style"

item id="0"

item id="name"![CDATA[模板名称]]/item

item id="template"![CDATA[div class="module cl xl xl1"ul[loop]liema href="home.php?uid={authorid}"FONT COLOR="RED"{author}/FONT/a/ema href="{url}"{title}/a/li[/loop]/ul/div]]/item

/item

item id="1"

item id="name"![CDATA[模板名称红色]]/item

item id="template"![CDATA[div class="module cl xl xl1"ul[loop]liemfont color="red"a href="home.php?uid={authorid}"{author}/a/font/ema href="{url}"{title}/a/li[/loop]/ul/div]]/item

/item

/item

/item

/root

第三步:建立第三方模块

管理平台 》 门户 》 第三方模块 》 添加:

第三方地址:url/1.php

客户短ID:200000 见1.php的133行

签名加密方式:MD5签名

通信密匙:1#9!(@@34#94

点击提交,完成模块建立工作。

第四步:前台页面调用:

DIY网页 》 DIY 》 高级模式 》 模块 》 第三方类

是不是看到刚刚建立的模块了。

选择调用即可。

第五步:扩展读取任一(包括外部)网页HTML代码数据,新建一个网页“ee.htm”,数据规范如下:

?xml version="1.0" encoding="ISO-8859-1"?

root

item id="html"![CDATA[]]/item

item id="data"

item id="0"

item id="id"![CDATA[14]]/item

item id="title"![CDATA[xml_block_title14]]/item

item id="url"![CDATA[xml_server.php]]/item

item id="pic"![CDATA[nophoto.gif]]/item

item id="picflag"![CDATA[1]]/item

item id="summary"![CDATA[]]/item

item id="fields"

item id="author"![CDATA[xml_user14]]/item

item id="authorid"![CDATA[14]]/item

item id="field1"![CDATA[field1value14]]/item

item id="field2"![CDATA[field2value14]]/item

/item

/item

item id="1"

item id="id"![CDATA[15]]/item

item id="title"![CDATA[xml_block_title15]]/item

item id="url"![CDATA[xml_server.php]]/item

item id="pic"![CDATA[nophoto.gif]]/item

item id="picflag"![CDATA[1]]/item

item id="summary"![CDATA[]]/item

item id="fields"

item id="author"![CDATA[xml_user15]]/item

item id="authorid"![CDATA[15]]/item

item id="field1"![CDATA[field1value15]]/item

item id="field2"![CDATA[field2value15]]/item

/item

/item

/item

/root

第六步:读取外部网页(ee.htm)时1.PHP的代码:

适合格式固化的网页使用,安全则自己去加上。

?php

define('CHARSET', 'GBK'); //服务器端数据编码

if($_POST['op'] == 'getdata') { //判断是否为请求数据列表

$xml = file_get_contents('ee.htm');//读取网页数据 如下传递参数另..

} else if($_GET['op'] == 'getconfig') {

$xml = file_get_contents('block_xml_sample.xml'); //安装时候需要调用的网页;为配置规范XML文档示例

} else {

$xml = 'NO_OPERATION';

}

ob_end_clean();

@header("Expires: -1");

@header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0", FALSE);

@header("Pragma: no-cache");

header("Content-type: text/xml");

echo $xml;

exit();

?

以上的步骤就解决了DZ可以与任一网站数据共享的问题

php怎么实现多个接口同时触发 对于先返回的数据先处理?

需求描述不准确。

你是需要在客户端同时访问几个接口(接口端用的php)?

1.如果是这个需求的话,客户端js自带异步属性,用ajax,同时做几个调用,在回调里处理数据就行了,只是服务器端,如果有session,需要确保耗时操作前写入并关闭session,不然同一个客户端的访问会被session卡住(默认的文件模式的session)

2.还是需要在php代码中同时进行多个接口并发调用,在各自返回时处理,然后整合结果输出 ?

这种的话,php本身不支持异步并发编程,可以考虑用nodejs或者php的扩展 swoole 之类的去做

PHP Guzzle接口请求库应用

Guzzle是一个PHP的HTTP客户端,用来发送接口请求。通常我们应用在服务内外部接口调用场景。Guzzle实现了HTTP GET, POST,HEAD,OPTIONS,PUT, DELETE等请求方式。支持文件的上传下载。支持JSON数据的请求响应。支持接口的同步、异步、并发请求。基本满足了我们常用业务逻辑。

1、 Guzzle的安装。

如果我们用PHP的依赖管理工具Composer安装的话比较简单。

2、 Guzzle的代码引入。

3、 Guzzle的使用。

4、HttpGuzzle封装类。

PHP 关于接收接口传递数据的问题。。

第一个字母表示类型 count表示ID数量 / 隔开 ild,ild,ild来记录数据(我是按照你的意思来)

比方

i5/1,2,3,4,5

类型为int 一共5个 分别1,2,3,4,5

其实有必要么。。。直接i:1,2,3,4,5不就行了

不一样的话这样写 i:1,2,3|s:4,5,6

懂了吗?


分享标题:同步接口数据php 接口数据对接
文章地址:http://cdweb.net/article/hgeiso.html