Thinkphp 3.2及以上版本实现支付宝担保交易、即时到账接口类、函数和使用方法

给客户开发网站时需要用到支付宝在线付款功能,小云到thinkphp网站溜了一圈,代码是有,可是都不怎么全,因此这篇文章诞生了!
本篇文章讲解了三个类的实现,担保交易、即时到账、双功能收款(该功能支付宝已下线,可给之前已申请过的站长短时间内的使用)
类文件在附件类,请自行下载文章主要讲解如何使用本类
文件下载后解压得到 PayBuy 将本文件夹放到 Think\Library\Vendor 目录下

然后在 config.PHP中配置一下信息

 

  1. 'ALIPAY_PARTNER'            =>     '8888888888888888',//合作身份者id,以2088开头的16位纯数字  
  2. 'ALIPAY_SELLER_EMAIL'        =>     'xxxxxxxxxx@163.com',//收款账号  
  3. 'ALIPAY_KEY'                =>     'xxxxxxxxxxxxxxxxxxxxxxxx',//安全检验码,以数字和字母组成的32位  


在  function.php  构造付款函数
第一个付款订单生成函数:

  1. function pay($data){  
  2.     $data['expenses']    = isset($data['expenses']) && $data['expenses'] ? $data['expenses'] : "0.00";  
  3.     $data['express']    = isset($data['express']) && $data['express'] ? $data['express'] : 'EXPRESS';  
  4.     $data['payment']    = isset($data['payment']) && $data['payment'] ? $data['payment'] : 'BUYER_PAY';  
  5.     Vendor('PayBuy.AliPay');       
  6.     $pay = new AliPay(); //实例化  
  7.     $pay->partner             =    C('ALIPAY_PARTNER');        //合作身份者id,以2088开头的16位纯数字  
  8.     $pay->seller_email         =    C('ALIPAY_SELLER_EMAIL');    //收款账号  
  9.     $pay->paykey             =    C('ALIPAY_KEY');            //安全检验码,以数字和字母组成的32位字符  
  10.     $pay->notify_url        =    $data['notify_url'];        //服务器异步通知页面路径,不带参数  
  11.     $pay->return_url        =    $data['return_url'];        //服务器同步通知页面路径,不带参数  
  12.     $pay->orderid            =    $data['orderid'];            //必填,订单id  
  13.     $pay->subject            =    $data['subject'];            //必填商品名称  
  14.     $pay->price                =    $data['price'];                //必填,价格  
  15.     $pay->expenses            =    $data['expenses'];            //必填,运费  
  16.     $pay->express            =    $data['express'];            //必填,三个值可选:EXPRESS(快递)、POST(平邮)、EMS(EMS)  
  17.     $pay->payment            =    $data['payment'];            //必填,两个值可选:SELLER_PAY(卖家承担运费)、BUYER_PAY(买家承担运费)  
  18.     $pay->message            =    $data['message'];            //订单描述  
  19.     $pay->show_url            =    $data['show_url'];            //商品展示地址  
  20.     $pay->receive_name        =    $data['receive_name'];        //收货人姓名  
  21.     $pay->receive_address    =    $data['receive_address'];    //收货地址  
  22.     $pay->receive_zip        =    $data['receive_zip'];        //邮编  
  23.     $pay->receive_phone        =    $data['receive_phone'];        //收货人座机  
  24.     $pay->receive_mobile    =    $data['receive_mobile'];    //收货人手机  
  25.     $pay->waitword            =    $data['waitword'];            //收货人手机  
  26.     return $pay->AliPay();  
  27. }  

第二个检查订单状态函数:

  1. function checkpayorder($data=''){  
  2.     $alipay_config['partner']        = C('ALIPAY_PARTNER');  
  3.     $alipay_config['seller_email']    = C('ALIPAY_SELLER_EMAIL');  
  4.     $alipay_config['key']            = C('ALIPAY_KEY');  
  5.     $alipay_config['sign_type']    = strtoupper('MD5');  
  6.     $alipay_config['input_charset']= strtolower('utf-8');  
  7.     $alipay_config['transport']    = 'http';  
  8.     Vendor('PayBuy.AliPay');  
  9.     $alipayNotify = new AlipayNotify($alipay_config);  
  10.     $verify_result = $alipayNotify->verifyReturn();  
  11.     if($verify_result) {  
  12.         $out_trade_no = $data['out_trade_no'];  
  13.         $trade_no = $data['trade_no'];  
  14.         $trade_status = $data['trade_status'];  
  15.         return $data['trade_status'];  
  16.     }else {  
  17.         return "error";  
  18.     }  
  19. }  

第三函数集:(这几个函数是支付宝自带函数,请直接复制粘贴到 function.php 内)


    1. /*支付宝接口函数开始*/  
    2.         function createLinkstring($para) {  
    3.             $arg  = "";  
    4.             while (list ($key, $val) = each ($para)) {  
    5.                 $arg.=$key."=".$val."&";  
    6.             }  
    7.             //去掉最后一个&字符  
    8.             $arg = substr($arg,0,count($arg)-2);  
    9.               
    10.             //如果存在转义字符,那么去掉转义  
    11.             if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}  
    12.               
    13.             return $arg;  
    14.         }  
    15.           
    16.         function createLinkstringUrlencode($para) {  
    17.             $arg  = "";  
    18.             while (list ($key, $val) = each ($para)) {  
    19.                 $arg.=$key."=".urlencode($val)."&";  
    20.             }  
    21.             //去掉最后一个&字符  
    22.             $arg = substr($arg,0,count($arg)-2);  
    23.               
    24.             //如果存在转义字符,那么去掉转义  
    25.             if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}  
    26.               
    27.             return $arg;  
    28.         }  
    29.           
    30.         function paraFilter($para) {  
    31.             $para_filter = array();  
    32.             while (list ($key, $val) = each ($para)) {  
    33.                 if($key == "sign" || $key == "sign_type" || $val == "")continue;  
    34.                 else    $para_filter[$key] = $para[$key];  
    35.             }  
    36.             return $para_filter;  
    37.         }  
    38.           
    39.         function argSort($para) {  
    40.             ksort($para);  
    41.             reset($para);  
    42.             return $para;  
    43.         }  
    44.           
    45.         function logResult($word='') {  
    46.             $fp = fopen("log.txt","a");  
    47.             flock($fp, LOCK_EX) ;  
    48.             fwrite($fp,"执行日期:".strftime("%Y%m%d%H%M%S",time())."\n".$word."\n");  
    49.             flock($fp, LOCK_UN);  
    50.             fclose($fp);  
    51.         }  
    52.           
    53.         function getHttpResponsePOST($url, $cacert_url, $para, $input_charset = '') {  
    54.           
    55.             if (trim($input_charset) != '') {  
    56.                 $url = $url."_input_charset=".$input_charset;  
    57.             }  
    58.             $curl = curl_init($url);  
    59.             curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL证书认证  
    60.             curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证  
    61.             curl_setopt($curl, CURLOPT_CAINFO,$cacert_url);//证书地址  
    62.             curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头  
    63.             curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果  
    64.             curl_setopt($curl,CURLOPT_POST,true); // post传输数据  
    65.             curl_setopt($curl,CURLOPT_POSTFIELDS,$para);// post传输数据  
    66.             $responseText = curl_exec($curl);  
    67.             //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容  
    68.             curl_close($curl);  
    69.               
    70.             return $responseText;  
    71.         }  
    72.           
    73.         function getHttpResponseGET($url,$cacert_url) {  
    74.             $curl = curl_init($url);  
    75.             curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头  
    76.             curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果  
    77.             curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL证书认证  
    78.             curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//严格认证  
    79.             curl_setopt($curl, CURLOPT_CAINFO,$cacert_url);//证书地址  
    80.             $responseText = curl_exec($curl);  
    81.             //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容  
    82.             curl_close($curl);  
    83.               
    84.             return $responseText;  
    85.         }  
    86.           
    87.         function charsetEncode($input,$_output_charset ,$_input_charset) {  
    88.             $output = "";  
    89.             if(!isset($_output_charset) )$_output_charset  = $_input_charset;  
    90.             if($_input_charset == $_output_charset || $input ==null ) {  
    91.                 $output = $input;  
    92.             } elseif (function_exists("mb_convert_encoding")) {  
    93.                 $output = mb_convert_encoding($input,$_output_charset,$_input_charset);  
    94.             } elseif(function_exists("iconv")) {  
    95.                 $output = iconv($_input_charset,$_output_charset,$input);  
    96.             } else die("sorry, you have no libs support for charset change.");  
    97.             return $output;  
    98.         }  
    99.           
    100.         function charsetDecode($input,$_input_charset ,$_output_charset) {  
    101.             $output = "";  
    102.             if(!isset($_input_charset) )$_input_charset  = $_input_charset ;  
    103.             if($_input_charset == $_output_charset || $input ==null ) {  
    104.                 $output = $input;  
    105.             } elseif (function_exists("mb_convert_encoding")) {  
    106.                 $output = mb_convert_encoding($input,$_output_charset,$_input_charset);  
    107.             } elseif(function_exists("iconv")) {  
    108.                 $output = iconv($_input_charset,$_output_charset,$input);  
    109.             } else die("sorry, you have no libs support for charset changes.");  
    110.             return $output;  
    111.         }  
    112.         function md5Sign($prestr, $key) {  
    113.             $prestr = $prestr . $key;  
    114.             return md5($prestr);  
    115.         }  
    116.           
    117.         function md5Verify($prestr, $sign, $key) {  
    118.             $prestr = $prestr . $key;  
    119.             $mysgin = md5($prestr);  
    120.           
    121.             if($mysgin == $sign) {  
    122.                 return true;  
    123.             }  
    124.             else {  
    125.                 return false;  
    126.             }  
    127.         }  
    128. /*支付宝接口函数结束*/ 
posted @ 2016-12-22 16:33  暖心i  阅读(205)  评论(0编辑  收藏  举报