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();
导出excel表格(包含图片导出)
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支付

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信用卡支付

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         
读取临时缓存并 修改储存表实时状态脚本
posted @ 2017-12-13 16:28  珍の脾  阅读(211)  评论(0编辑  收藏  举报