用织梦做了个旅游网站,客户要求财付通支付,上网找了下 不是要买就是要钱,只有自己写了。
	代码:
	复制代码代码如下:
	
	<?php
	if(!defined('DEDEINC')) exit('Request Error!');
	/**
	 *财付通接口类
	 */
	class tenpay
	{
	    var $dsql;
	    var $mid;
	    var $reqURL_onLine = "http://www.tenpay.com";
	    var $return_url='/plus/carbuyaction.php?dopost=return'; //返回处理地址
	    /**
	    * 构造函数
	    *
	    * @access  public
	    * @param
	    *
	    * @return void
	    */
	    function tenpay()
	    {
	        global $dsql;
	        $this->dsql = $dsql;
	    }
	    function __construct()
	    {
	        $this->tenpay();
	    }
	    /**
	     *  设定接口会送地址
	     *
	     *  例如: $this->SetReturnUrl($cfg_basehost."/tuangou/control/index.php?ac=pay&orderid=".$p2_Order)
	     *
	     * @param     string  $returnurl  会送地址
	     * @return    void
	     */
	    function SetReturnUrl($returnurl='')
	    {
	        if (!empty($returnurl))
	        {
	            $this->return_url = $returnurl;
	        }
	    }
	    /**
	    * 生成支付代码
	    * @param   array   $order      订单信息
	    * @param   array   $payment    支付方式信息
	    */
	    function GetCode($order, $payment)
	    {
	        global $cfg_basehost,$cfg_cmspath;
	        //对于二级目录的处理
	        if(!empty($cfg_cmspath)) $cfg_basehost = $cfg_basehost.'/'.$cfg_cmspath;
	          $partner      =  $payment['tenpay_account'];
	          $out_trade_no = $order['out_trade_no'];
	          $total_fee = floatval($order['price']) * 100;
	           $body = $order['out_trade_no'];
	           $attach = '';
	           $bank_type = 'DEFAULT';
	            /* 交易类型:2、虚拟交易,1、实物交易 */
	         $trans_type = 1;
	         $trade_mode=empty($payment['tenpay_pay_method']) ? '1' : $payment['tenpay_pay_method'];
	       $parameter = array(
	            'partner'              => $partner,
	            'out_trade_no'         => $out_trade_no,                           //订单号
	            'total_fee'            => $total_fee,                              //总金额
	            'notify_url'           => $cfg_basehost.$this->return_url."&code=".$payment['code'],  //返回地址
	            'return_url'           => $cfg_basehost.$this->return_url."&code=".$payment['code'], //提醒地址
	            'body'                 => $body,                            //交易描述
	            'bank_type'            => $bank_type,                       //交易类型  默认财付通
	            //用户ip
	            'spbill_create_ip'     => $_SERVER['REMOTE_ADDR'],          //交易ip
	            'fee_type'             => '1',                        //币种  1 人民币
	            'subject'              => $body,                            //商品名称
	            //系统可选参数
	            'sign_type'            => 'MD5',                            //加密方式
	            'service_version'      => '1.0',                            //接口版本号 默认1.0
	            'input_charset'        => 'UTF-8',                         //系统编码  'GBK'
	            'sign_key_index'       => '1',                              //密钥序号
	            //业务可选参数
	            'attach'               => $attach,            //附加数据 原样返回  默认为空
	            'product_fee'          => '',                 //商品费用
	            'transport_fee'        => '0',                //物流费用
	            'time_start'           => date("YmdHis"),     //订单生成时间   date("YmdHis")
	            'time_expire'          => '',                 //订单失效时间
	            'buyer_id'             => '',                 //买方财付通帐号
	            'goods_tag'            => '',                 //商品标记
	            'trade_mode'           => $trade_mode,        //交易模式(1.即时到帐模式,2.中介担保模式,3.后台选择(卖家进入支付中心列表选择))
	            'transport_desc'       => '',                 //物流说明
	            'trans_type'           => $trans_type,        //交易类型
	            'agentid'              => '',                 //平台ID
	            'agent_type'           => '',                 //代理模式(0.无代理,1.表示卡易售模式,2.表示网店模式)
	            'seller_id'            => ''                  //卖家商户号
	        );
	        ksort($parameter);
	        reset($parameter);
	        $param = '';
	        $sign  = '';
	        foreach ($parameter AS $key => $val)
	        {
	            $param .= "$key=" .urlencode($val). "&";
	            if("" != $val && "sign" != $key) {
	                $sign  .= "$key=$val&";
	            }
	        }
	        $param = substr($param, 0, -1);
	        $sign .= "key=".$payment['tenpay_key'];
	        $sign = strtolower(md5($sign));  
	        $button = '<div style="text-align:center"><a href="https://gw.tenpay.com/gateway/pay.htm?'.$param. '&sign='.$sign.'"><button>立即使用财付通支付</button></a></div>'; 
	        return $button;
	    /* 清空购物车 */
	        require_once DEDEINC.'/shopcar.class.php';
	        $cart     = new MemberShops();
	        $cart->clearItem();
	        $cart->MakeOrders();
	        return $button;
	    }
	    /**
	    * 响应操作
	    */
	    function respond()
	    {
	        /* 引入配置文件 */
	        $code = preg_replace( "#[^0-9a-z-]#i", "", $_GET['code'] );
	        require_once DEDEDATA.'/payment/'.$code.'.php';
	        $attach         = $_GET['attach'];
	        $trade_state    = $_GET['trade_state'];
	        $total_fee      = $_GET['total_fee'];
	        $out_trade_no = trim($_GET['out_trade_no']);
	 if(preg_match ("/S-P[0-9]+RN[0-9]/",$order_sn)) {
	            //检查支付金额是否相符
	            $row = $this->dsql->GetOne("SELECT * FROM ym_shops_orders WHERE oid = '{$order_sn}'");
	            if ($row['priceCount'] != $_GET['total_fee'])
	            {
	                return $msg = "支付失败,支付金额与商品总价不相符!";
	            }
	            $this->mid = $row['userid'];
	          /* 检查数字签名是否正确 */
	        ksort($_GET);
	        reset($_GET);
	       $sign = '';
	        foreach ($_GET AS $key => $val)
	        {
	            if("" != $val && "sign" != $key && $key != 'code') {
	                $sign  .= "$key=$val&";
	            }
	        }
	           $sign .= "key=".$payment['tenpay_key'];
	  if(strtolower(md5($sign))==strtolower($_GET['sign']))
	{
	            if($trade_state==0)
	            {      
	                     /* 改变订单状态 */
	               if($this->success_db($out_trade_no))  
	               return $msg = "支付成功!<br> <a href='/'>返回主页</a> <a href='/member'>会员中心</a>";
	               else  return $msg = "支付失败!<br> <a href='/'>返回主页</a> <a href='/member'>会员中心</a>";
	            }   
	}
	else{
	   //return $msg = "支付失败!<br> <a href='/'>返回主页</a> <a href='/member'>会员中心</a>";
	  }
	   }
	    /*处理物品交易*/
	    function success_db($order_sn)
	    {
	        $time=time();
	        $mid=$this->mid;
	        //获取订单信息,检查订单的有效性
	        $row = $this->dsql->GetOne("SELECT state,priceCount FROM ym_shops_orders WHERE oid='$order_sn' ");
	        if($row['state'] > 0)
	        {
	            return TRUE;
	        }  
	        /* 改变订单状态_支付成功 */
	        $sql = "UPDATE `ym_shops_orders` SET `state`='1' WHERE `oid`='$order_sn' AND `userid`='".$this->mid."'";
	        if($this->dsql->ExecuteNoneQuery($sql))
	        {
	            $this->log_result("verify_success,订单号:".$order_sn); //将验证结果存入文件
	            return TRUE;
	        } else {
	            $this->log_result ("verify_failed,订单号:".$order_sn);//将验证结果存入文件
	            return FALSE;
	        }
	    }
	    function  log_result($word) {
	        global $cfg_cmspath;
	        $fp = fopen(dirname(__FILE__)."/../../data/payment/log.txt","a");
	        flock($fp, LOCK_EX) ;
	        fwrite($fp,$word.",执行日期:".strftime("%Y-%m-%d %H:%I:%S",time())."\r\n");
	        flock($fp, LOCK_UN);
	        fclose($fp);
	    }
	}