123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584 |
- <?php
- /**
- * 招行银行一网通测试类
- * 1.测试查询协议
- * 2.测试取消协议
- */
- class Cmb
- {
- const pfx_path = BASE_DATA_PATH . "/api/cmbpay/m000001269.pfx";
- /**
- * 初始化方法
- * 加载配置文件
- */
- public function __construct()
- {
- $this->config = self::config();
- }
- static public function config()
- {
- return array(
- 'CMCX_URL' => 'http://58.61.30.110/CmbBank_B2B/UI/DIDI/DoBusiness.ashx', //签约协议查询接口
- 'NTBNBR' => 'P0026365',//协议商户企业编号 //请填写自己的商户企业编号
- 'MchNo' => 'P0026365',//协议商户企业编号 //请填写自己的商户企业编号
- 'pfxFile' => self::pfx_path, //pfx格式证书 通过jks转换 用于openssl签名
- 'password' => '12345678',//pfx证书密码
- 'BranchID' => '0021',//开户分行号 4位 请自己配置
- 'CoNo' => '000140', //商户号 6位 请自己配置
- 'singKey' => '',//签名密钥 查询单笔订单需要 测试环境为空
- 'DirectRequestX' => 'http://218.17.27.197/netpayment/basehttp.dll?DirectRequestX',//查询订单接口
- 'RefundNoDupOperator' => '9999',//退款操作员编号
- 'RefundNoDupPassword' => '000140', //测试环境密码和商户号相同
- );
- }
-
- /**
- * 支付协议查询
- * 查询成功 BUSDATA 字段返回数据描述
- * merch_date String 8 可选 商户交易日期(YYYYMMDD), 成功交易返回
- * merch_time String 6 可选 商户交易时间(HHmmSS), 成功交易返回
- * merch_serial String 24 必填 商户交易流水号
- * respcod String 7 必填 交易结果 CMBMB99表示成功,其他为失败
- * respmsg String 80 必填 返回交易信息
- * cust_argno String 32 可选 客户协议号,成功交易返回
- * bank_name String 40 可选 签约银行名称,成功交易返回
- * open_time String 14 可选 签约时间 YYYYMMDD HHmmSS,成功交易返回
- * cust_open_d_pay String 1 可选 保留使用:”N”,成功交易返回
- * cust_pidty String 1 可选 证件类型 目前只有’1’,表示身份证,成功交易返回
- * cust_pid_v String 30 可选 证件号映射的30位hash值,成功交易返回
- */
- public function cmcx($data)
- {
- $xmlBusData = "<xml><merch_date>{$data['merch_date']}</merch_date><merch_time>{$data['merch_time']}</merch_time><merch_serial>{$data['merch_serial']}</merch_serial><cust_argno>{$data['cust_argno']}</cust_argno></xml>";
- $BUSDAT = base64_encode($xmlBusData);//业务数据包 报文数据必须经过base64编
- $NTBNBR = $this->config['NTBNBR'];//企业网银编号
- $TRSCOD = 'CMCX';//交易码
- $DATLEN = strlen($BUSDAT);// 字段BUSDAT长度
- $COMMID = date("YmdHis",time()).mt_rand(100000, 999999);//返回的报文头会包含该信息,仅用作单次通讯的请求和响应报文的对应。银行业务数据不存储该ID。
- $SIGTIM = date("YmdHis",time()).'0000';//签名时间
- $signOrigin = "NTBNBR={$NTBNBR}&TRSCOD={$TRSCOD}&COMMID={$COMMID}&SIGTIM={$SIGTIM}&BUSDAT={$BUSDAT}";
- $SIGDAT = $this->opensslSign($signOrigin);
- $requestData = array(
- 'NTBNBR' => $NTBNBR,
- 'TRSCOD' => $TRSCOD,
- 'COMMID' => $COMMID,
- 'DATLEN' => $DATLEN,
- 'BUSDAT' => $BUSDAT,
- 'SIGTIM' => $SIGTIM,
- 'SIGDAT' => $SIGDAT,
- );
- $jsonData = json_encode($requestData);
- $url = $this->config['CMCX_URL'];
- $postArray = array();
- $postArray[0] = $url;
- $postArray[1]['data'] = array('RequestData' => $jsonData);
- $json = $this->execCurl("post",$postArray);
- $cmcxData = json_decode($json,true);
- $xml = base64_decode($cmcxData['BUSDAT']);
- $xmlArray = (array)simplexml_load_string($xml);
-
- //查询协议日志
- $dateTime = date("Y-m-d H:i:s",time());
- $logContent = "日志时间:{$dateTime} 请求原文JSON:{$jsonData} 请求XML:{$xmlBusData} 响应原文json:{$json} 响应XML:{$xml}".PHP_EOL.PHP_EOL;
- $this->writeLog('cmcx',$logContent);
- return $xmlArray;
- }
-
- /**
- * 获取查询协议数据
- * 模拟查询协议用的数据
- * 查询不同的协议请使用不同的数据进行模拟
- * 这些模拟数据都是真实存在银行系统内的数据不能乱写
- */
- public function getTestCmcxInfo()
- {
- $data = array();
- $data['merch_date'] = '20160811';//签约协议日期 年月日
- $data['merch_time'] = '154021';//签约协议时间 时分秒
- $data['merch_serial'] = '2016081143751'; //签约协议流水号
- $data['cust_argno'] = '20160811154059441120';//协议号
- return $data;
- }
-
-
- /**
- * 支付协议查询
- * 查询成功 BUSDATA 字段返回数据描述
- * merch_date String 8 必填 商户交易日期(YYYYMMDD)
- * merch_time String 6 必填 商户交易时间(HHmmSS)
- * merch_serial String 24 必填 商户交易流水号,全局唯一
- * bank_serial String 30 必填 银行交易流水号,全局唯一
- * respcod String 7 必填 交易结果 CMBMB99表示成功,其他为失败
- * respmsg String 80 必填 返回交易信息
- */
- public function cmqx($data)
- {
- $xmlBusData = "<xml><merch_date>{$data['merch_date']}</merch_date><merch_time>{$data['merch_time']}</merch_time><merch_serial>{$data['merch_serial']}</merch_serial><cust_argno>{$data['cust_argno']}</cust_argno></xml>";
- $BUSDAT = base64_encode($xmlBusData);//业务数据包 报文数据必须经过base64编
- $NTBNBR = $this->config['NTBNBR'];//企业网银编号
- $TRSCOD = 'CMQX';//交易码
- $DATLEN = strlen($BUSDAT);// 字段BUSDAT长度
- $COMMID = date("YmdHis",time()).mt_rand(100000, 999999);//返回的报文头会包含该信息,仅用作单次通讯的请求和响应报文的对应。银行业务数据不存储该ID。
- $SIGTIM = date("YmdHis",time()).'0000';//签名时间
- $signOrigin = "NTBNBR={$NTBNBR}&TRSCOD={$TRSCOD}&COMMID={$COMMID}&SIGTIM={$SIGTIM}&BUSDAT={$BUSDAT}";
- $SIGDAT = $this->opensslSign($signOrigin);
- $requestData = array(
- 'NTBNBR' => $NTBNBR,
- 'TRSCOD' => $TRSCOD,
- 'COMMID' => $COMMID,
- 'DATLEN' => $DATLEN,
- 'BUSDAT' => $BUSDAT,
- 'SIGTIM' => $SIGTIM,
- 'SIGDAT' => $SIGDAT,
- );
- $jsonData = json_encode($requestData);
- $url = $this->config['CMCX_URL'];//查询和取消走的都是同一个接口
- $postArray = array();
- $postArray[0] = $url;
- $postArray[1]['data'] = array('RequestData' => $jsonData);
- $json = $this->execCurl("post",$postArray);
- $cmcxData = json_decode($json,true);
- $xml = base64_decode($cmcxData['BUSDAT']);
- $xmlArray = (array)simplexml_load_string($xml);
-
- //取消协议日志
- $dateTime = date("Y-m-d H:i:s",time());
- $logContent = "日志时间:{$dateTime} 请求原文JSON:{$jsonData} 请求XML:{$xmlBusData} 响应原文json:{$json} 响应XML:{$xml}".PHP_EOL.PHP_EOL;
- $this->writeLog('cmqx',$logContent);
- return $xmlArray;
- }
-
- /**
- * 获取查询协议数据
- * 模拟查询协议用的数据
- * 如果提供的数据不存在于银行系统内,返回错误提示
- */
- public function getTestCmqxInfo()
- {
- $data = array();
- $data['merch_date'] = '20160811';//签约协议日期 年月日
- $data['merch_time'] = '151709';//签约协议时间 时分秒
- $data['merch_serial'] = '2016081132532'; //签约协议流水号
- $data['cust_argno'] = '20160811151403121298';//协议号
- return $data;
- }
-
-
- /**
- * 查询支付协议签名
- * php基于sha1withRSA算法的签名(pfx证书)
- * @param type $data
- * @return type
- */
- public function opensslSign($data)
- {
- $certs = array();
- //其中password为证书密码
- openssl_pkcs12_read(file_get_contents($this->config['pfxFile']), $certs, $this->config['password']);
- if(!$certs) return ;
- $signature = '';
- openssl_sign($data, $signature, $certs['pkey']);
- return base64_encode($signature);//返回base64编码的密钥
- }
- /**
- * 获取银行订单信息
- */
- public function getOneOrderInfo($data)
- {
- $startTime = strtotime("2000-01-01 00:00:00");
- $currentTime = time();
- $diffTime = $currentTime - $startTime;
- $BranchNo = $this->config['BranchID'];//开户分行号
- $MerchantNo = $this->config['CoNo'];//商户号
- $TimeStamp = $diffTime * 1000;//请求发起的时间,精确到毫秒
- $Date = $data['Date'];//商户定单日期 年月日 YYYYMMDD
- $BillNo = $data['BillNo'];//订单号 6位或10位订单号
- $singKey = $this->config['singKey'];//签名密钥 测试情况下为空
- //SHA1 哈希签名
- $HashOrigin = "{$singKey}<BranchNo>{$BranchNo}</BranchNo><MerchantNo>{$MerchantNo}</MerchantNo><TimeStamp>{$TimeStamp}</TimeStamp><Command>QuerySingleOrder</Command><Date>{$Date}</Date><BillNo>{$BillNo}</BillNo>";
- $Hash = sha1($HashOrigin);//使用sha1加密
- //单笔订单请求报文
- $postData = "<Request><Head><BranchNo>{$BranchNo}</BranchNo><MerchantNo>{$MerchantNo}</MerchantNo><TimeStamp>{$TimeStamp}</TimeStamp><Command>QuerySingleOrder</Command></Head><Body><Date>{$Date}</Date><BillNo>{$BillNo}</BillNo></Body><Hash>{$Hash}</Hash></Request>";
- //接口地址
- $array = array();
- $array[0] = $this->config['DirectRequestX'];
- $array[1]['data'] = array(
- 'Request' => $postData,
- );
- $xmlString = $this->execCurl('post',$array);
-
- //查询单笔订单日志
- $dateTime = date("Y-m-d H:i:s",time());
- $logContent = "日志时间:{$dateTime} 请求原文:{$postData} 响应原文:{$xmlString}".PHP_EOL.PHP_EOL;
- $this->writeLog('singleOrder',$logContent);
- $xmlArray = simplexml_load_string($xmlString);
- return $this->objectToArray($xmlArray);
- }
-
- /**
- * 模拟获取订单信息
- */
- public function getTestOneOrder()
- {
- $BillNo = '0003041211'; //银行订单号
- $Date = '20160812'; //订单日期
- return array('BillNo'=>$BillNo,'Date'=>$Date);
- }
- /**
- * 订单查询 共用接口 该方法可以接受三个接口参数调用
- * 通过Command字段区分调用
- * 1.商户入账查询接口 QueryTransact
- * 2.按商户日期查询已结账订单接口 QuerySettledOrderByMerchantDate
- * 3.按结账日期查询已结账订单接口 QuerySettledOrderBySettledDate
- */
- public function getQueryOrderData($data)
- {
- $startTime = strtotime("2000-01-01 00:00:00");
- $currentTime = time();
- $diffTime = $currentTime - $startTime;
- $BranchNo = $this->config['BranchID'];//开户分行号
- $MerchantNo = $this->config['CoNo'];//商户号
- $TimeStamp = $diffTime * 1000;//请求发起的时间,精确到毫秒
- $BeginDate = $data['BeginDate'];//起始日期
- $EndDate = $data['EndDate'];//结束日期
- $Count = $data['Count'];//查询条数
- $Operator = $data['Operator'];//操作员号
- $pos = $data['Pos']; //续传包
- $singKey = $this->config['singKey'];//签名密钥 测试情况下为空
- $Command = $data['Command']; //接口名称 说明见注释
- //SHA1 哈希签名
- $HashOrigin = "{$singKey}<BranchNo>{$BranchNo}</BranchNo><MerchantNo>{$MerchantNo}</MerchantNo><TimeStamp>{$TimeStamp}</TimeStamp><Command>{$Command}</Command><BeginDate>{$BeginDate}</BeginDate><EndDate>{$EndDate}</EndDate><Count>{$Count}</Count><Operator>{$Operator}</Operator><pos>{$pos}</pos>";
- $Hash = sha1($HashOrigin);
- //商户入账查询请求报文
- $postData = "<Request><Head><BranchNo>{$BranchNo}</BranchNo><MerchantNo>{$MerchantNo}</MerchantNo><TimeStamp>{$TimeStamp}</TimeStamp><Command>{$Command}</Command></Head><Body><BeginDate>{$BeginDate}</BeginDate><EndDate>{$EndDate}</EndDate><Count>{$Count}</Count><Operator>{$Operator}</Operator><pos>{$pos}</pos></Body><Hash>{$Hash}</Hash></Request>";
- //接口地址
- $array = array();
- $array[0] = $this->config['DirectRequestX'];
- $array[1]['data'] = array(
- 'Request' => $postData,
- );
- $xmlString = $this->execCurl('post',$array);
-
- //接口命令
- $CommandArray = array(
- 'QuerySettledOrderByMerchantDate' => '商户日期查询已结账订单接口',
- 'QuerySettledOrderBySettledDate' => '结账日期查询已结账订单接口',
- 'QueryTransact' => '商户入账查询接口',
- );
- //入账 已结账日志
- $dateTime = date("Y-m-d H:i:s",time());
- $logContent = "日志时间:{$dateTime} 请求命令:{$Command} 接口名称:{$CommandArray[$Command]} 请求原文:{$postData} 响应原文:{$xmlString}".PHP_EOL.PHP_EOL;
- $this->writeLog('querySettledOrder',$logContent);
- $xmlArray = simplexml_load_string($xmlString);
- return $this->objectToArray($xmlArray);
- }
-
- /**
- * 模拟获取商户入账数据
- * 模拟测试数据 生产环境请用正式数据代替
- */
- public function getTestQueryTransact()
- {
- $BeginDate = '20150923';//起始日期
- $EndDate = '20160924';//结束日期
- $Count = '10';//查询条数
- $Operator = '9999';//操作员号
- $pos = ''; //续传包
- $Command = 'QueryTransact';//接口命令 不同的命令
- $data = array(
- 'BeginDate' => $BeginDate,
- 'EndDate' => $EndDate,
- 'Count' => $Count,
- 'Operator' => $Operator,
- 'pos' => $pos,
- 'Command' => $Command,
- );
- return $data;
- }
-
- /**
- * 按结账日期查询已结账订单接口
- * 模拟测试数据 生产环境请用正式数据代替
- */
- public function getTestQuerySettledOrderBySettledDate()
- {
- $BeginDate = '20160801';//起始日期
- $EndDate = '20160810';//结束日期
- $Count = '20';//查询条数
- $Operator = '9999';//操作员号
- $pos = ''; //续传包
- $Command = 'QuerySettledOrderBySettledDate';//接口命令 不同的命令
- $data = array(
- 'BeginDate' => $BeginDate,
- 'EndDate' => $EndDate,
- 'Count' => $Count,
- 'Operator' => $Operator,
- 'pos' => $pos,
- 'Command' => $Command,
- );
- return $data;
- }
-
- /**
- * 按商户日期查询已结账订单接口
- * 模拟测试数据 生产环境请用正式数据代替
- */
- public function getTestQuerySettledOrderByMerchantDate()
- {
- $BeginDate = '20150923';//起始日期
- $EndDate = '20160924';//结束日期
- $Count = '10';//查询条数
- $Operator = '9999';//操作员号
- $pos = ''; //续传包
- $Command = 'QuerySettledOrderByMerchantDate';//接口命令 不同的命令
- $data = array(
- 'BeginDate' => $BeginDate,
- 'EndDate' => $EndDate,
- 'Count' => $Count,
- 'Operator' => $Operator,
- 'pos' => $pos,
- 'Command' => $Command,
- );
- return $data;
- }
-
- /**
- * 执行退款操作
- */
- public function getRefundNoDupData($data)
- {
- $startTime = strtotime("2000-01-01 00:00:00");
- $currentTime = time();
- $diffTime = $currentTime - $startTime;
- $BranchNo = $this->config['BranchID'];//开户分行号
- $MerchantNo = $this->config['CoNo'];//商户号
- $TimeStamp = $diffTime * 1000;//请求发起的时间,精确到毫秒
- $Date = $data['Date'];//原订单日期
- $BillNo = $data['BillNo']; //原订单号
- $RefundNo = $data['RefundNo'];//退款流水号
- $Operator = $this->config['RefundNoDupOperator'];//操作员号
- $Password = $this->config['RefundNoDupPassword'];//操作员密码
- $Amount = $data['Amount'];//退款金额
- $Desc = $data['Desc'];//退款描述
- $singKey = $this->config['singKey'];//签名密钥 测试情况下为空
- $Command = 'Refund_No_Dup'; //接口名称 说明见注释
- //SHA1 哈希签名
- $HashOrigin = "{$singKey}<BranchNo>{$BranchNo}</BranchNo><MerchantNo>{$MerchantNo}</MerchantNo><Operator>{$Operator}</Operator><Password>{$Password}</Password><TimeStamp>{$TimeStamp}</TimeStamp><Command>{$Command}</Command><Date>{$Date}</Date><BillNo>{$BillNo}</BillNo><RefundNo>{$RefundNo}</RefundNo><Amount>{$Amount}</Amount><Desc>{$Desc}</Desc>";
- $Hash = sha1($HashOrigin);
- //商户入账查询请求报文
- $postData = "<Request><Head><BranchNo>{$BranchNo}</BranchNo><MerchantNo>{$MerchantNo}</MerchantNo><Operator>{$Operator}</Operator><Password>{$Password}</Password><TimeStamp>{$TimeStamp}</TimeStamp><Command>{$Command}</Command></Head><Body><Date>{$Date}</Date><BillNo>{$BillNo}</BillNo><RefundNo>{$RefundNo}</RefundNo><Amount>{$Amount}</Amount><Desc>{$Desc}</Desc></Body><Hash>{$Hash}</Hash></Request>";
- //接口地址
- $array = array();
- $array[0] = $this->config['DirectRequestX'];
- $array[1]['data'] = array(
- 'Request' => $postData,
- );
- $xmlString = $this->execCurl('post',$array);
-
- //入账 已结账日志
- $dateTime = date("Y-m-d H:i:s",time());
- $logContent = "日志时间:{$dateTime} 请求命令:Refund_No_Dup 接口名称:直连退款 请求原文:{$postData} 响应原文:{$xmlString}".PHP_EOL.PHP_EOL;
- $this->writeLog('refundNoDup',$logContent);
- $xmlArray = simplexml_load_string($xmlString);
- return $this->objectToArray($xmlArray);
- }
-
-
- /**
- * 模拟退款数据
- */
- public function getTestRefundNoDup()
- {
- $Date = '20160812';//订单日期
- $BillNo = '0001416027';//订单号
- $RefundNo = 'TK'.date("YmdHis",time()). mt_rand(1000,9999);//退款流水号
- $Amount = '98.00';//退款金额
- $Desc = 'tuikuan desc';//
- $data = array(
- 'Date' => $Date,
- 'BillNo' => $BillNo,
- 'RefundNo' => $RefundNo,
- 'Amount' => $Amount,
- 'Desc' => $Desc,
- );
- return $data;
- }
-
-
- /**
- * 递归转换XML为数组
- * @param type $data
- * @return type
- */
- public function objectToArray($e)
- {
- $_arr = is_object($e) ? get_object_vars($e) : $e;
- foreach ($_arr as $key => $val) {
- $val = (is_array($val) || is_object($val)) ? $this->objectToArray($val) : $val;
- $arr[$key] = !$val ? (string)$val : $val;
- }
- return $arr;
- }
-
- /**
- * CURL函数
- * @param type $method
- * @param type $args
- * @return type
- * @throws \Exception
- */
- public function execCurl($method, $args)
- {
- //解析参数
- $url = isset($args[0]) ? $args[0] : "";
- $multi = isset($args[1]['multi']) ? $args[1]['multi'] : "";
- $data = isset($args[1]['data']) ? $args[1]['data'] : "";
- $ajax = isset($args[1]['ajax']) ? $args[1]['ajax'] : "";
- $timeout = isset($args[1]['timeout']) ? $args[1]['timeout'] : 30;
- $files = isset($args[1]['files']) ? $args[1]['files'] : "";
- $referer = isset($args[1]['referer']) ? $args[1]['referer'] : "";
- $proxy = isset($args[1]['proxy']) ? $args[1]['proxy'] : "";
- $headers = isset($args[1]['headers']) ? $args[1]['headers'] : "";
-
- //如果环境变量的浏览器信息不存在,就是用手动设置的浏览器信息
- $userAgent = isset($_SERVER['HTTP_USER_AGENT'])?
- $_SERVER['HTTP_USER_AGENT']:
- 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:23.0)
- Gecko/20100101 Firefox/23.0';
-
- //检测url必须参数 不能为空
- if (!$url) {
- throw new \Exception("错误:curl请求地址不能为空");
- }
-
- //设置curl选项
- $options = array(
- CURLOPT_URL => $url, //目标url
- CURLOPT_TIMEOUT => $timeout, //超时
- CURLOPT_RETURNTRANSFER => 1, //输出数据流
- CURLOPT_FOLLOWLOCATION => 1, //自动跳转追踪
- CURLOPT_AUTOREFERER => 1, //自动设置来路信息
- CURLOPT_SSL_VERIFYPEER => 0, //认证证书检查
- CURLOPT_SSL_VERIFYHOST => 0, //检查SSL加密算法
- CURLOPT_HEADER => 0, //禁止头文件输出
- CURLOPT_NOSIGNAL => 1, //忽略所有传递的信号
- CURLOPT_USERAGENT => $userAgent,//浏览器环境字符串
- CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4, //ipv4寻址方式
- CURLOPT_ENCODING => 'gzip', //解析使用gzip压缩的网页
- );
-
-
-
- //设置代理 必须是数组并且非空
- if (is_array($proxy) && !empty($proxy)) {
- $options[CURLOPT_PROXY] = $proxy['host'];
- $options[CURLOPT_PROXYPORT] = $proxy['port'];
- $options[CURLOPT_PROXYUSERPWD] =
- $proxy['user'] . ':' . $proxy['pass'];
- }
-
- //检测是否未启用自定义urlencode编码
- if (!isset($args[1]['build'])) {
- if ($data && $method == "post" && is_array($data)) {
- $data = http_build_query($data, '', '&');
- }
- }
-
- //检测是否含有上传文件
- if ($files && $method == "post" && is_array($files)) {
- foreach ($files as $k => $v) {
- $files[$k] = '@' . $v;
- }
- parse_str($data, $data);
- $data = $data + $files;
- }
-
- //检测判断是否是post请求
- if ($method == 'post') {
- //发送一个常规的POST请求
- $options[CURLOPT_POST] = 1;
-
- //使用HTTP协议中的"POST"操作来发送数据,支持键值对数组定义
- $options[CURLOPT_POSTFIELDS] = $data;
- }
-
- //初始化header数组
- $headerOptions = array();
-
- //检测是否是ajax提交
- if ($ajax) {
- $headerOptions['X-Requested-With'] = 'XMLHttpRequest';
- }
-
- //设置来路
- if ($referer) {
- $options[CURLOPT_REFERER] = $referer;
- }
-
- //合并header
- if (!empty($headers) && is_array($headers)) {
- foreach ($headers as $k => $v) {
- $headerOptions[$k] = $v;
- }
- }
-
- //转换header选项为浏览器header格式
- if (!empty($headerOptions) && is_array($headerOptions)) {
- $array = array();
-
- foreach($headerOptions as $k => $v) {
- $array[] = $k . ": " . $v;
- }
-
- $options[CURLOPT_HTTPHEADER] = $array;
- }
-
- //创建curl句柄
- $ch = curl_init();
-
- //设置curl选项
- curl_setopt_array($ch, $options);
-
- //获取返回内容
- $content = curl_exec($ch);
-
- //关闭curl句柄
- curl_close($ch);
-
- //返回内容
- return $content;
- }
-
-
- /**
- * 写日志
- * @param type $fileName 文件名
- * @param type $filePath 文件路径
- * @param type $logContent 日志内容
- */
- public function writeLog($dirName, $logContent)
- {
- $currentPath = dirname(__FILE__) .'/log/' . $dirName ;
- if (!file_exists($currentPath)) {
- @mkdir($currentPath,0777,true);
- }
- $filename = date("dmY",time()) . '.log';
- $writeFileName = $currentPath . '/' . $filename;
- file_put_contents($writeFileName, $logContent,FILE_APPEND);
- }
-
- }
|