dedecms集成财付通支付接口
author:一佰互联 2019-04-28   click:155

用织梦做了个旅游网站,客户要求财付通支付,上网找了下 不是要买就是要钱,只有自己写了。

代码:

复制代码 代码如下:<?phpif(!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 #@__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 #@__shops_orders WHERE oid="$order_sn" ");        if($row["state"] > 0)        {            return TRUE;        }          /* 改变订单状态_支付成功 */        $sql = "UPDATE `#@__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())."");        flock($fp, LOCK_UN);        fclose($fp);    }}