news 发表于 2015-9-1 12:41:11

dedecms集成财付通支付接口



<?php

if(!defined('DEDEINC')) exit('Request Error!');

/**

*财付通接口类

*/

class tenpay

{

    var $dsql;

    var $mid;

    var $reqURL_onLine = "<a href="http://www.tenpay.com">http://www.tenpay.com</a>";

    var $return_url='/plus/carbuyaction.php?dopost=return'; //返回处理地址

    /**

    * 构造函数

    *

    * @accesspublic

    * @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="<a href="https://gw.tenpay.com/gateway/pay.htm?'.$param">https://gw.tenpay.com/gateway/pay.htm?'.$param</a>. '&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+RN/",$order_sn)) {

            //检查支付金额是否相符

            $row = $this->dsql->GetOne("SELECT * FROM <a href="mailto:#@__shops_orders">#@__shops_orders</a> 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>";

               elsereturn $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 <a href="mailto:#@__shops_orders">#@__shops_orders</a> WHERE oid='$order_sn' ");

      if($row['state'] > 0)

      {

            return TRUE;

      }

      /* 改变订单状态_支付成功 */

      $sql = "UPDATE <a href="mailto:`#@__shops_orders">`#@__shops_orders</a>` 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;

      }

    }

    functionlog_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);

    }

}
页: [1]
查看完整版本: dedecms集成财付通支付接口