Thinkphp 3.2及以上版本實現支付寶擔保交易、即時到帳接口類、函數和使用方法

給客戶開發網站時須要用到支付寶在線付款功能,小云到thinkphp網站溜了一圈,代碼是有,但是都不怎麼全,所以這篇文章誕生了!
本篇文章講解了三個類的實現,擔保交易、即時到帳、雙功能收款(該功能支付寶已下線,可給以前已申請過的站長短期內的使用)
類文件在附件類,請自行下載文章主要講解如何使用本類
文件下載後解壓獲得 PayBuy 將本文件夾放到 Think\Library\Vendor 目錄下
php

而後在 config.PHP中配置一下信息thinkphp

 

  1. 'ALIPAY_PARTNER'            =>     '8888888888888888',//合做身份者id,以2088開頭的16位純數字  
  2. 'ALIPAY_SELLER_EMAIL'        =>     'xxxxxxxxxx@163.com',//收款帳號  
  3. 'ALIPAY_KEY'                =>     'xxxxxxxxxxxxxxxxxxxxxxxx',//安全檢驗碼,以數字和字母組成的32位  


在  function.php  構造付款函數
第一個付款訂單生成函數:
express

  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. /*支付寶接口函數結束*/ 
相關文章
相關標籤/搜索