当前位置:首页 > CMS教程 > DeDecms > 列表

dedecms集成财付通支付接口

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-05 10:37:56 浏览: 评论:0 

这篇文章主要介绍了dedecms集成财付通支付接口的相关资料,需要的朋友可以参考下,用织梦做了个旅游网站,客户要求财付通支付,上网找了下 不是要买就是要钱,只有自己写了。

代码如下:

  1. <?php 
  2. if(!defined('DEDEINC')) exit('Request Error!'); 
  3. /** 
  4.  *财付通接口类 
  5.  */ 
  6. class tenpay 
  7.     var $dsql
  8.     var $mid
  9.     var $reqURL_onLine = "http://www.tenpay.com"
  10.     var $return_url='/plus/carbuyaction.php?dopost=return'//返回处理地址 
  11.     /** 
  12.     * 构造函数 
  13.     * 
  14.     * @access  public 
  15.     * @param 
  16.     * 
  17.     * @return void 
  18.     */ 
  19.     function tenpay() 
  20.     { 
  21.         global $dsql
  22.         $this->dsql = $dsql
  23.     } 
  24.     function __construct() 
  25.     { 
  26.         $this->tenpay(); 
  27.     } 
  28.     /** 
  29.      *  设定接口会送地址 
  30.      * 
  31.      *  例如: $this->SetReturnUrl($cfg_basehost."/tuangou/control/index.php?ac=pay&orderid=".$p2_Order) 
  32.      * 
  33.      * @param     string  $returnurl  会送地址 
  34.      * @return    void 
  35.      */ 
  36.     function SetReturnUrl($returnurl=''
  37.     { 
  38.         if (!emptyempty($returnurl)) 
  39.         { 
  40.             $this->return_url = $returnurl
  41.         } 
  42.     } 
  43.     /** 
  44.     * 生成支付代码 
  45.     * @param   array   $order      订单信息 
  46.     * @param   array   $payment    支付方式信息 
  47.     */ 
  48.     function GetCode($order$payment
  49.     { 
  50.         global $cfg_basehost,$cfg_cmspath
  51.         //对于二级目录的处理 
  52.         if(!emptyempty($cfg_cmspath)) $cfg_basehost = $cfg_basehost.'/'.$cfg_cmspath
  53.           $partner      =  $payment['tenpay_account']; 
  54.           $out_trade_no = $order['out_trade_no']; 
  55.           $total_fee = floatval($order['price']) * 100; 
  56.            $body = $order['out_trade_no']; 
  57.            $attach = ''
  58.            $bank_type = 'DEFAULT'
  59.             /* 交易类型:2、虚拟交易,1、实物交易 */ 
  60.          $trans_type = 1; 
  61.          $trade_mode=emptyempty($payment['tenpay_pay_method']) ? '1' : $payment['tenpay_pay_method']; 
  62.        $parameter = array
  63.             'partner'              => $partner
  64.             'out_trade_no'         => $out_trade_no,                           //订单号 
  65.             'total_fee'            => $total_fee,                              //总金额 
  66.             'notify_url'           => $cfg_basehost.$this->return_url."&code=".$payment['code'],  //返回地址 
  67.             'return_url'           => $cfg_basehost.$this->return_url."&code=".$payment['code'], //提醒地址 
  68.             'body'                 => $body,                            //交易描述 
  69.             'bank_type'            => $bank_type,                       //交易类型  默认财付通 
  70.             //用户ip 
  71.             'spbill_create_ip'     => $_SERVER['REMOTE_ADDR'],          //交易ip 
  72.             'fee_type'             => '1',                        //币种  1 人民币 
  73.             'subject'              => $body,                            //商品名称 
  74.             //系统可选参数 
  75.             'sign_type'            => 'MD5',                            //加密方式 
  76.             'service_version'      => '1.0',                            //接口版本号 默认1.0 
  77.             'input_charset'        => 'UTF-8',                         //系统编码  'GBK' 
  78.             'sign_key_index'       => '1',                              //密钥序号 
  79.             //业务可选参数 
  80.             'attach'               => $attach,            //附加数据 原样返回  默认为空 
  81.             'product_fee'          => '',                 //商品费用 
  82.             'transport_fee'        => '0',                //物流费用 
  83.             'time_start'           => date("YmdHis"),     //订单生成时间   date("YmdHis") 
  84.             'time_expire'          => '',                 //订单失效时间 
  85.             'buyer_id'             => '',                 //买方财付通帐号 
  86.             'goods_tag'            => '',                 //商品标记 
  87.             'trade_mode'           => $trade_mode,        //交易模式(1.即时到帐模式,2.中介担保模式,3.后台选择(卖家进入支付中心列表选择)) 
  88.             'transport_desc'       => '',                 //物流说明 
  89.             'trans_type'           => $trans_type,        //交易类型 
  90.             'agentid'              => '',                 //平台ID 
  91.             'agent_type'           => '',                 //代理模式(0.无代理,1.表示卡易售模式,2.表示网店模式) 
  92.             'seller_id'            => ''                  //卖家商户号 
  93.         ); 
  94.         ksort($parameter); 
  95.         reset($parameter); 
  96.         $param = ''
  97.         $sign  = ''
  98.         foreach ($parameter AS $key => $val
  99.         { 
  100.             $param .= "$key=" .urlencode($val). "&"
  101.             if("" != $val && "sign" != $key) { 
  102.                 $sign  .= "$key=$val&"
  103.             } 
  104.         } 
  105.         $param = substr($param, 0, -1); 
  106.         $sign .= "key=".$payment['tenpay_key']; 
  107.         $sign = strtolower(md5($sign));  
  108.         $button = '<div style="text-align:center"><a href="https://gw.tenpay.com/gateway/pay.htm?'.$param'&sign='.$sign.'"><button>立即使用财付通支付</button></a></div>'
  109.         return $button
  110.     /* 清空购物车 */ 
  111.         require_once DEDEINC.'/shopcar.class.php'
  112.         $cart     = new MemberShops(); 
  113.         $cart->clearItem(); 
  114.         $cart->MakeOrders(); 
  115.         return $button
  116.     } 
  117.     /** 
  118.     * 响应操作 
  119.     */ 
  120.     function respond() 
  121.     { 
  122.         /* 引入配置文件 */ 
  123.         $code = preg_replace( "#[^0-9a-z-]#i"""$_GET['code'] ); 
  124.         require_once DEDEDATA.'/payment/'.$code.'.php'
  125.         $attach         = $_GET['attach']; 
  126.         $trade_state    = $_GET['trade_state']; 
  127.         $total_fee      = $_GET['total_fee']; 
  128.         $out_trade_no = trim($_GET['out_trade_no']); 
  129.  if(preg_match ("/S-P[0-9]+RN[0-9]/",$order_sn)) { 
  130.             //检查支付金额是否相符 
  131.             $row = $this->dsql->GetOne("SELECT * FROM #@__shops_orders WHERE oid = '{$order_sn}'"); 
  132.             if ($row['priceCount'] != $_GET['total_fee']) 
  133.             { 
  134.                 return $msg = "支付失败,支付金额与商品总价不相符!"
  135.             } 
  136.             $this->mid = $row['userid']; 
  137.           /* 检查数字签名是否正确 */ 
  138.         ksort($_GET); 
  139.         reset($_GET); 
  140.        $sign = ''
  141.         foreach ($_GET AS $key => $val
  142.         { 
  143.             if("" != $val && "sign" != $key && $key != 'code') { 
  144.                 $sign  .= "$key=$val&"
  145.             } 
  146.         } 
  147.            $sign .= "key=".$payment['tenpay_key']; 
  148.   if(strtolower(md5($sign))==strtolower($_GET['sign'])) 
  149.             if($trade_state==0) 
  150.             {      
  151.                      /* 改变订单状态 */ 
  152.                if($this->success_db($out_trade_no))  
  153.                return $msg = "支付成功!<br> <a href='/'>返回主页</a> <a href='/member'>会员中心</a>"
  154.                else  return $msg = "支付失败!<br> <a href='/'>返回主页</a> <a href='/member'>会员中心</a>"
  155.             }   
  156. else
  157.    //return $msg = "支付失败!<br> <a href='/'>返回主页</a> <a href='/member'>会员中心</a>"; 
  158.   } 
  159.    } 
  160.     /*处理物品交易*/ 
  161.     function success_db($order_sn
  162.     { 
  163.         $time=time(); 
  164.         $mid=$this->mid; 
  165.         //获取订单信息,检查订单的有效性 
  166.         $row = $this->dsql->GetOne("SELECT state,priceCount FROM #@__shops_orders WHERE oid='$order_sn' "); 
  167.         if($row['state'] > 0) 
  168.         { 
  169.             return TRUE; 
  170.         }  
  171.         /* 改变订单状态_支付成功 */ 
  172.         $sql = "UPDATE `#@__shops_orders` SET `state`='1' WHERE `oid`='$order_sn' AND `userid`='".$this->mid."'"
  173.         if($this->dsql->ExecuteNoneQuery($sql)) 
  174.         { 
  175.             $this->log_result("verify_success,订单号:".$order_sn); //将验证结果存入文件 
  176.             return TRUE; 
  177.         } else { 
  178.             $this->log_result ("verify_failed,订单号:".$order_sn);//将验证结果存入文件 
  179.             return FALSE; 
  180.         } 
  181.     } 
  182.     function  log_result($word) { 
  183.         global $cfg_cmspath
  184.         $fp = fopen(dirname(__FILE__)."/../../data/payment/log.txt","a"); 
  185.         flock($fp, LOCK_EX) ; 
  186.         fwrite($fp,$word.",执行日期:".strftime("%Y-%m-%d %H:%I:%S",time())."\r\n"); 
  187.         flock($fp, LOCK_UN); 
  188.         fclose($fp); 
  189.     } 
  190. }

Tags: dedecms财付通 dedecms支付接口

分享到: