用织梦做了个旅游网站,客户要求财付通支付,上网找了下 不是要买就是要钱,只有自己写了。
代码:
复制代码 代码如下:<?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); }}