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


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

    然后在 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())." ".$word." ");  
      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. /*支付宝接口函数结束*/ 
  • 相关阅读:
    代理服务器的原理及用法
    [Web前端] 给li设置float浮动属性之后,无法撑开外层ul的问题。
    [Web 前端] react-router4-0中文文档
    [Web 前端] inline-block元素设置overflow:hidden属性导致相邻行内元素向下偏移
    [Web 前端] React Js img 图片显示默认 占位符
    [Web 前端] React高级教程(es6)——(2)对于Refs最新变动的理解
    [Web 前端] 你不知道的 React Router 4
    [Web 前端] React-router4简约教程
    [Web 前端] React Router v4 入坑指南
    [Web 前端] 前端频道之团队维护、聚合、订阅
  • 原文地址:https://www.cnblogs.com/nuanxin/p/6211827.html
Copyright © 2020-2023  润新知