2017年博客第一篇随笔
if else判断分支: 顺序执行在满足一个条件后 即会退出分支
$file = fopen($error_file,'a+'); while(!feof($file)){ $row = fgets($file,100); } $str =$i."\t".$res['data']."\t".$res['msg']."\n"; fwrite($file, $str);
读取txt文件 和写入txt文件 换行符需要用双引号"\n"才能生效
1 vendor("PHPExcel.PHPExcel"); 2 vendor("PHPExcel.PHPExcel.IOFactory"); 3 $filename ='xx.xls'; 4 $objPHPExcel = $objReader->load($filename); 5 $objPHPExcel->setActiveSheetIndex(0);//excel第一页 6 $string= $objPHPExcel->getActiveSheet()->getCell('A1')->getValue();
获取本地excel文件内的值
1 vendor("PHPExcel.PHPExcel"); 2 vendor("PHPExcel.PHPExcel.IOFactory"); 3 vendor("PHPExcel.PHPExcel.Writer.CSV"); 4 $column = array(); 5 $j = 65; //ASCII码 A 6 $idx = 2; 7 foreach ($column as $col) { 8 $excel->getActiveSheet()->setCellValueExplicit(chr($j) . '1', $col); 9 ++$j; 10 } //设置列头 11 foreach ($data as $key=>$col) { 12 if($key != 7 && $key != 10) { 13 $excel->getActiveSheet()->setCellValueExplicit(chr($j).$idx, $col); 14 } else { 15 $excel->getActiveSheet()->setCellValue(chr($j) . $idx, $col); 16 } 17 ++$j; 18 } //设置行数据 19 20 //以下为images导出excel方法 循环内 21 $objDrawing = new \PHPExcel_Worksheet_Drawing(); 22 $thumb='项目路径'; 23 $objDrawing->setPath($thumb); 24 $objDrawing->setWidth(75); 25 $objDrawing->setCoordinates('R'.$idx); //设置单元格 26 $excel->getActiveSheet()->getRowDimension($idx)->setRowHeight(58); 27 @$objDrawing->setWorksheet($excel->getActiveSheet()); 28 29 $excel->getActiveSheet()->setTitle(date('Y-m-d') . '订单.xlsx'); 30 $excel->setActiveSheetIndex(0); 31 header('Content-Type: application/vnd.ms-excel'); 32 header('Content-Disposition: attachment;filename="' . date('Y-m-d') . '订单.xlsx"'); 33 header('Cache-Control: max-age=0'); 34 $writer = \PHPExcel_IOFactory::createWriter($excel, 'Excel2007'); 35 $writer->save('php://output'); 36 exit();
1 include("Image.class.php"); 2 $loads = '原图路径'; 3 $thumb ='处理后图片路径';----含文件名 4 $image = new \Think\Image(); 5 if (!file_exists($thumb)) { 6 mkdir($save_excel_image_thumb); 7 $image->open($loads)->thumb(50, 50, 3)->save($thumb); 8 } //thumb()参数三设置裁剪图片的方式,3为等比例缩略图
使用Image类来生成缩略图 如一次性使用缩略图 还可使用unlink()删除多余资源
function GrabImage($url,$filename="") { if($url=="") return false; if($filename=="") { $ext=strrchr($url,"."); if($ext!=".gif" && $ext!=".jpg" && $ext!=".png") return false; $filename=date("YmdHis").$ext; } ob_start(); readfile($url); $img = ob_get_contents(); ob_end_clean(); $size = strlen($img); $fp2=@fopen($filename, "a"); fwrite($fp2,$img); fclose($fp2); return $filename; } // 仅作参考
通过网络路径url 获取下载下来的图片名称/路径(默认根目录下)
use Qiniu\Auth; use \Qiniu\Storage\UploadManager; $file['tmp_name'] = $local_url; $file['type'] = 'image'; $file['name'] = array_pop(explode('/', $local_url)); $file['size'] = getimagesize($local_url)['bits']; //可获取图片文件相关信息,返回一个数组 $qiniu = new \Qiniu(); $info =$qiniu->upload("",$file); //form提交上传文件,七牛云上传类会获取$_FILE数据 if ($info['state'] && unlink($local_url)) { $photo['url'] =$info['url']; $photo['alt'] =$info['original']; }
class payssion { protected $api_url ='https://www.payssion.com/payment/create.html'; protected $payssion_query_url= 'https://www.payssion.com/api/v1/payment/getDetail'; protected $api_key = ''; //your api key protected $secret_key = ''; //your secret key protected $is_livemode; public function __construct($api_key='', $secret_key='', $is_livemode=false) { $this->api_key = $api_key; $this->secret_key = $secret_key; $this->is_livemode =$is_livemode; if( !$this->is_livemode){ $this->api_url = "https://sandbox.payssion.com/payment/create.html"; $this->payssion_query_url = "http://sandbox.payssion.com/api/v1/payment/getDetail"; } } public function pay($info){ $pm_id ='tenpay_cn'; $order_id = $info['orderNo']; //订单 $description = $info['title'].$info['addressStr'].$info['addressStr'].$info['tel'].$info['addressStr']; //订单描述 //$amount =$info['price']; //支付金额 $amount ='0.01'; $currency = $info['currency']; $return_url = "http://".$info['domain']."/response.php"; $msg = implode("|", array($this->api_key, $pm_id, $amount, $currency, $order_id, $this->secret_key)); $api_sig = md5($msg); $html ='<form id = "payssionForm" name="cashU_payment_info" action="'.$this->api_url.'" method="post"> <input type="hidden" name="api_key" value="'.$this->api_key.'"> <input type="hidden" name="api_sig" value="'.$api_sig.'"> <input type="hidden" name="pm_id" value="'.$pm_id.'"> <input type="hidden" name="order_id" value="'.$order_id.'"> <input type="hidden" name="description" value="'.$description.'"> <input type="hidden" name="amount" value="'.$amount.'"> <input type="hidden" name="currency" value="'.$currency.'"> <input type="hidden" name="return_url" value="'.$return_url.'"> </form> <script>document.getElementById("payssionForm").submit();</script>'; $log = new \lib\log(); $log->write('payssion',"发送from数据=》".$html); echo $html; } public function respond($data,&$register,&$product) { $order_id = isset($data['order_id'])?$data['order_id']:0; //检查订单是否存在 $order = $register->get('db')->get('order', '*', ['order_no'=> $order_id]); if(!$order) return ['ret'=>'-1','msg'=>'order not found']; //产品信息 $product_info = $product->getProduct($order['product_id']); $api_key = $product_info['payssion_api_key']; $secret_key = $product_info['payssion_secret_key']; $api_sig = md5(implode("|", array($api_key, '', $order_id, $secret_key))); $data = array( 'api_key'=>$api_key, 'order_id'=>$order_id, 'api_sig'=>$api_sig ); //订单已支付 if($order['order_status']=='SUCCESS') return ['ret'=>1,'msg'=>'支付成功']; // payssion支付交易查询检查 $ret = post($this->payssion_query_url, $data); $log = new \lib\log(); $log->write('payssion_query',"payssion交易查询=》".print_r($data,1).print_r($ret,1)); if(!isset($ret['return']))return ['ret'=>0,'msg'=>'查询失败']; $ret=json_decode($ret['return'], true); if(empty($ret) || 200!=$ret['result_code'])return ['ret'=>0,'msg'=>'查询失败']; $ret = $ret['transaction']; if($ret['state'] == 'completed' && $ret['amount'] == $ret['paid']){ return ['ret'=>1,'msg'=>'支付成功', 'identity_tag'=>$product_info['identity_tag'], 'erp_no'=>$order['erp_no'], 'transaction_id'=>$ret['transaction_id']]; }else{ $state = $ret['state']; return ['ret'=>0,'msg'=>"payment failure({$state})", 'identity_tag'=>$product_info['identity_tag'], 'erp_no'=>$order['erp_no'], 'transaction_id'=>$ret['transaction_id']]; } } }
payssion支付异步回调 调用respond()根据返回状态 判断并跳转
class credit_pay { protected $url_server ="https://payment.onlinecreditpay1.com/Payment4/Payment.aspx"; //测试mb信用卡支付 protected $url_sync = "http://test.com/test.php"; //服务器返回地址(订单状态同步地址) protected $url_succ_back = 'http://test.com/test.php'; // 浏览器返回地址(成功订单返回地址) protected $url_fail_back = 'http://test.com/test.php'; //交易地址(失败订单返回地址 protected $hashKey ="SkKCUlfRiQxtajoRpPACePhloARbzirFAabg4QG3kfpVrXvd5Hj3hh2cdyotCer8y128hiWHjGs7zu3zeNe18xxsg7cFCmAgXqxz4v5XUKUKX3MREXpX8z8bDJ2ifrf5";//上线后修改 protected $self_merchant_id=5201314;//上线后修改 trim ( "105" ) * 818 + 5201314 public function pay($info) { if (empty ( $info )) die ( 'data error!' ); $merchant_id = trim ( "105" ) * 818 + $this->self_merchant_id; // 商户号 $order_type = trim ( "4" ); $gw_version = trim ( "php(Z5.6)" ); // 接口版本 $language = getLanguage (); // 接口语言 $merch_order_ori_id =$info['orderNo']; // order订单号 $hashKey = $this->hashKey; // 商户证书 $merch_order_date = trim (date('YmdHis', time())); // 订单交易时间 $merch_order_id = trim ( $merch_order_date ."-". $merch_order_ori_id ); // 商户订单号 $price_currency = $info['currency']; // 订单标价币种 $price_amount = $info['amount']; // 订单标价金额 $order_remark = trim ( "" ); // 备注 $url_sync = $this->url_sync; // 服务器返回地址(订单状态同步地址) $url_succ_back =$this->url_succ_back; // 浏览器返回地址(成功订单返回地址) $url_fail_back = $this->url_fail_back; // 交易地址(失败订单返回地址) $strValue = $hashKey . ($merchant_id - $this->self_merchant_id) / 818 . $merch_order_id . $price_currency . $price_amount; $signature = md5 ( filter_code ( $strValue ) ); $bill_address = ''; // 账单地址 $bill_country =''; // 账单国家 $bill_province = ''; // 账单地区 $bill_city = ''; // 账单城市 $bill_email = ''; // 账单EMAIL $bill_phone = ''; // 账单电话 $bill_post = ''; // 账单邮编 $delivery_name = ''; // 收货姓名 $delivery_address = ''; // 收货地址 $delivery_country = ''; // 收货国家 $delivery_province = ''; // 收货地区 $delivery_city = ''; // 收货城市 $delivery_email = ''; // 收货人联系EMAIL $delivery_phone = ''; // 收货人联系电话 $delivery_post = ''; // 收货人邮编 // 购物车信息 只考虑单产品目前,即忽略赠品 $product_name = ''; // 产品名称 $product_sn = ''; // 产品货号 $quantity = ''; // 产品数量 $unit = ''; // 产品单价 $cardsNum = isset ( $info ['cp_num'] ) ? $info ['cp_num'] : ""; $Card_ExpireYear = isset ( $info ['cp_expireyear'] ) ? $info ['cp_expireyear'] : ""; $Card_ExpireMonth = isset ( $info ['cp_expiremonth'] ) ? $info ['cp_expiremonth'] : ""; $Card_CVV = isset ( $info ['cp_cvv'] ) ? $info ['cp_cvv'] : ""; $srcString = "merchant_id=".urlencode ( $merchant_id ). "&order_type=" . urlencode ( $order_type ) . "&language=" . urlencode ( $language ) . "&gw_version=" . urlencode ( $gw_version ) . "&merch_order_ori_id=" . urlencode ( $merch_order_ori_id ) . "&merch_order_date=" . urlencode ( $merch_order_date ) . "&merch_order_id=" . urlencode ( $merch_order_id ) . "&price_currency=" . urlencode ( $price_currency ) . "&price_amount=" . urlencode ( $price_amount ) . "&url_sync=" . urlencode ( $url_sync ) . "&url_succ_back=" . urlencode ( $url_succ_back ) . "&url_fail_back=" . urlencode ( $url_fail_back ) . "&order_remark=" . urlencode ( $order_remark ) . "&signature=" . urlencode ( $signature ) . "&ip=" . urlencode ( getIPaddress () ) . "&bill_address=" . urlencode ( $bill_address ) . "&bill_country=" . urlencode ( $bill_country ) . "&bill_province=" . urlencode ( $bill_province ) . "&bill_city=" . urlencode ( $bill_city ) . "&bill_email=" . urlencode ( $bill_email ) . "&bill_phone=" . urlencode ( $bill_phone ) . "&bill_post=" . urlencode ( $bill_post ) . "&delivery_name=" . urlencode ( $delivery_name ) . "&delivery_address=" . urlencode ( $delivery_address ) . "&delivery_country=" . urlencode ( $delivery_country ) . "&delivery_province=" . urlencode ( $delivery_province ) . "&delivery_city=" . urlencode ( $delivery_city ) . "&delivery_email=" . urlencode ( $delivery_email ) . "&delivery_phone=" . urlencode ( $delivery_phone ) . "&delivery_post=" . urlencode ( $delivery_post ) . "&hash_num=" . urlencode ( $cardsNum ) . "&hash_sign=" . urlencode ( $Card_CVV ) . "&card_exp_year=" . urlencode ( $Card_ExpireYear ) . "&card_exp_month=" . urlencode ( $Card_ExpireMonth ) . "&product_name=" . $product_name . "&product_sn=" . $product_sn . "&quantity=" . $quantity . "&unit=" . $unit . "&client_finger_cybs=" . urlencode ( $info['guid'] ); $log = new \lib\log(); $log->write('credit',"credit post=》".$srcString); $response = mb_post($this->url_server,$srcString); $log->write('credit',"credit response=》".$response); return $response; } // 返回通知详细 function return_info($response, &$register) { // 对得到的数据进行数据处理,修改商户网站的订单状态 if ($response != "") { $xml = new \DOMDocument(); $xml->loadXML ( $response ); $merchant_id = $xml->getElementsByTagName ( 'merchant_id' )->item ( 0 )->nodeValue; //商户号 $merch_order_id = $xml->getElementsByTagName ( 'merch_order_id' )->item ( 0 )->nodeValue; // 带有前缀的商户订单号 $merch_order_ori_id = $xml->getElementsByTagName ( 'merch_order_ori_id' )->item ( 0 )->nodeValue; //商户订单号 $order_id = $xml->getElementsByTagName ( 'order_id' )->item ( 0 )->nodeValue; //系统流水号 $price_currency = $xml->getElementsByTagName ( 'price_currency' )->item ( 0 )->nodeValue; //交易币种 $price_amount = $xml->getElementsByTagName ( 'price_amount' )->item ( 0 )->nodeValue; //交易金额 $status = $xml->getElementsByTagName ( 'status' )->item ( 0 )->nodeValue; // 订单状态 $message = $xml->getElementsByTagName ( 'message' )->item ( 0 )->nodeValue; //反馈信息 $signature = $xml->getElementsByTagName ( 'signature' )->item ( 0 )->nodeValue; //返回请求加密商户证书 $allow1 = $xml->getElementsByTagName ( 'allow1' )->item ( 0 )->nodeValue; //echo 'hashkey:'.$this->hashKey.'---merchant_id:'.$merchant_id.'---merch_order_id:'.$merch_order_id.'---price_currency:'.$price_currency.'---price_amount:'.$price_amount.'---order_id:'.$order_id.'---status:'.$status; $strVale = $this->hashKey . $merchant_id . $merch_order_id . $price_currency . $price_amount . $order_id . $status; $getsignature = md5 ( $strVale ); if ($getsignature != $signature) die ( 'Signature error!' ); //检查订单是否存在 $order = $register->get('db')->get('order', '*', ['order_no'=> $merch_order_ori_id]); if(!$order) return ['ret'=>'-1','msg'=>'order not found']; // 以下是根据商户原始订单号来修改商户的订单状态 if ($status == 'Y') { return ['ret'=>1,'msg'=>"交易成功!$message",'order_no'=>$merch_order_ori_id,'erp_no'=>$order['erp_no'], 'transaction_id'=>$order_id]; } elseif ($status == 'T') { return ['ret'=>0,'msg'=>"payment failure:$message",'order_no'=>$merch_order_ori_id,'erp_no'=>$order['erp_no'], 'transaction_id'=>$order_id]; } elseif ($status == 'N') { // exit($str); return ['ret'=>1,'msg'=>"交易失败:$message",'order_no'=>$merch_order_ori_id,'erp_no'=>$order['erp_no'], 'transaction_id'=>$order_id]; } elseif($status == 'E') { return ['ret'=>0,'msg'=>"payment failure:$message",'order_no'=>$merch_order_ori_id,'erp_no'=>$order['erp_no'], 'transaction_id'=>$order_id]; }else{ return ['ret'=>0,'msg'=>"payment failure:$message",'order_no'=>$merch_order_ori_id,'erp_no'=>$order['erp_no'], 'transaction_id'=>$order_id]; } } else { // 支付网关反馈的参数为空时 return ['ret'=>0,'msg'=>'支付网关返回的参数为空,请联系商家,请不要重复提交。']; } } function respond($res,&$register,&$view) { $orders = new \lib\order($register); if(!$res['ret'] || '-1'==$res['ret']) //如果未支付成功 更新并返回 { if(!$res['ret'])$orders->updateOrder($res['order_no'],'FAIL','支付失败'); $ret['content'] = $res['msg']; $ret['url'] = '/'.$res['identity_tag']; $view->display('/public/theme/error_pay.twig',$ret); exit; } $info = array(); $info['id'] = $res['erp_no'];//订单号主键 $info['merchOrderNo'] = $res['transaction_id'];//商户流水号 $info['orderNo'] = $res['order_no'];//生成订单号 $orders->保存数据库修改状态 header('Location:成功跳转页); } }
credit_pay支付异步回调 pay(请求) =》return_info=》返回状态respond=》判断并跳转
1 //同步ERP在线支付订单状态 2 $host="localhost"; 3 $db_user="root"; 4 $db_pass="pwd"; 5 $db_name="dbname"; 6 $send_url = './././payment'; 7 8 if (file_exists('logs/erp_post_onlinepay.log')) { 9 echo '已经有进程正在运行'; 10 exit; 11 } //脚本判断日志 12 13 try { 14 file_put_contents('logs/pay.log', 'lock'); 15 $link=mysql_connect($host,$db_user,$db_pass) or die('can not connect mysql'); 16 $db =mysql_select_db($db_name,$link) or die('can not select mysql'); 17 //清除一个月前的执行成功的记录 18 $time = date('Y-m-d 00:00:00', strtotime('-30day')); 19 mysql_query('delete from onlinepay_error_status WHERE `status` = 1 and addtime<="'.$time.'"', $link); 20 21 $sql ='SELECT * FROM onlinepay_error_status WHERE status = 0 ORDER BY id ASC LIMIT 100'; 22 $table = mysql_query($sql, $link); 23 if(mysql_num_rows($table)<=0) die('can not find notUpdated pay_order'); 24 25 while($row =mysql_fetch_assoc($table)) 26 { 27 if(empty($row['data'])) continue; 28 $erpData =json_decode(base64_decode($row['data']),true); 29 if(!is_array($erpData) || empty($erpData['id'])) continue; 30 $status = post($send_url,$erpData) ; 31 if(!$status['status'])continue; //如果請求erp更新失败,跳出 32 $return = json_decode($status['return'],true); 33 if($return['status']) 34 { 35 mysql_query('set names utf8', $link); 36 $sql ="UPDATE `order` SET 状态='SUCCESS', 信息='支付成功', 请求状态='SUCCESS',请求信息='通信成功' WHERE order_no = '".$erpData['主键'] ."' LIMIT 1"; 37 mysql_query($sql, $link); 38 $sql ="UPDATE onlinepay_error_status SET status = 1,updatetime ='".date('Y-m-d H:i:s',time())."' WHERE id = '".$row['id'] ."' LIMIT 1"; 39 mysql_query($sql, $link); 40 } 41 usleep(100000);//延迟执行 42 } 43 mysql_close($link); 44 } catch (Exception $e) { 45 echo $e->getMessage(); 46 } 47 finally { 48 if (file_exists('logs/erp_post_onlinepay.log')) { 49 unlink('logs/erp_post_onlinepay.log'); 50 } 51 } 52 die('ok'); 53 54 55 56 function post($url, $data, $header = ["Content-Type" => "application/x-www-form-urlencoded;"], $time_out = 60) { 57 if (is_array($data)) { 58 $data = http_build_query($data); 59 } 60 $ch = curl_init(); 61 curl_setopt($ch, CURLOPT_URL, $url); 62 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 63 curl_setopt($ch, CURLOPT_POST, 1); 64 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 65 curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 66 curl_setopt($ch, CURLOPT_TIMEOUT, $time_out); // 设置超时限制防止死循环 67 $res = curl_exec($ch); //接收返回信息 68 $ret = ['status' => 1]; 69 //print_r(curl_getinfo($ch)); 70 if ($error = curl_errno($ch)) { //出错则显示错误信息 71 $ret['status'] = 0; 72 $ret['return'] = $error; 73 } else { 74 $ret['return'] = $res; 75 } 76 curl_close($ch); //关闭curl链接 77 return $ret; //显示返回信息 78 } 79
fkp