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

Tags: dedecms财付通 dedecms支付接口

分享到: