财付通php接口
财付通是腾讯推出的一项类似支付宝的在线交易工具,分为两种:一种是财付通即时到帐交易,另外一种是财付通担保交易,即时到帐交易网上有很多接口,下面我谈谈财付通担保交易,基本程序如下图所示:
1:tenpay_config.php 程序代码:
//此文件为财付通支付配置文件
//????????????财付通测试开关 0 关闭测试 1 开启测试????????????
$beta_switch ="0";
//????????????系统配置????????????
//以下每一项都必须要配置,并准确
$version = "2";
//版本号 2
$cmdno = "12";
//任务代码,定值:12
$encode_type = "1" ;
//编码
$chnid = "3692020";
//平台提供者,***商的财付通账号
$mch_type = "1";
//交易类型:1、实物交易,2、虚拟交
易。
//????????????财付通支付配置项。????????????
//以下每一项都必须要配置,并准确
$seller ="573432430" ;
//卖家帐号(我这里是乱配的,你需要填写正确的)
$sp_key ="520530" ;
//密钥(我这里是乱配的,你需要填写正确的)
$domain ="" ;
//商户网站域名
$tenpay_dir ="/tenpay";
//财付通安装目录
$site_name ="顺心门业";
//商户网站名称
$attach ="tencent_magichu";
//支付附加数据,非中文标准字符
$imgtitle ="财付通支付";
//图片说明
$imgsrc =tenpay_dir&"/image/tenpay_buy.gif";
//图片地址
$pay_url =";;
//财付通支付网关地址
$need_buyerinfo ="2";
$mch_returl = ""; //通知URL
$show_url = $domain . $tenpay_dir ."/tenpay_show.php"; //返回URL
?>
2:md5_request.php 程序代码:
AddParameter($buffer, "attach", $attach);
$buffer = $this->AddParameter($buffer, "chnid", $chnid);
$buffer = $this->AddParameter($buffer, "cmdno", "12");
$buffer = $this->AddParameter($buffer, "encode_type", $encode_type);
$buffer = $this->AddParameter($buffer, "mch_desc", $mch_desc);
$buffer = $this->AddParameter($buffer, "mch_name", $mch_name);
$buffer = $this->AddParameter($buffer, "mch_price", $mch_price);
$buffer = $this->AddParameter($buffer, "mch_returl", $mch_returl);
$buffer = $this->AddParameter($buffer, "mch_type", $mch_type);
$buffer = $this->AddParameter($buffer, "mch_vno", $mch_vno);
$buffer = $this->AddParameter($buffer, "need_buyerinfo", $need_buyerinfo);
$buffer = $this->AddParameter($buffer, "seller", $seller);
$buffer = $this->AddParameter($buffer, "show_url", $how_url);
$buffer = $this->AddParameter($buffer, "transport_desc", $transport_desc);
$buffer = $this->AddParameter($buffer, "transport_fee", $transport_fee);
$buffer = $this->AddParameter($buffer, "version", $version);
$md5_sign =strtoupper(md5($buffer."&key=".$sp_key));
$redurl = $pay_url . "?".$buffer . "&sign=" . $md5_sign;
echo $retcode . "
".$retmsg."
";
echo $redurl;
return $redurl;
}
else
{
if ($retcode < "09000")
{
$buffer = $this->AddParameter($buffer, "attach", $attach);
$buffer = $this->AddParameter($buffer, "chnid", $chnid);
$buffer = $this->AddParameter($buffer, "cmdno", "12");
$buffer = $this->AddParameter($buffer, "encode_type", $encode_type);
$buffer = $this->AddParameter($buffer, "mch_desc", $mch_desc);
$buffer = $this->AddParameter($buffer, "mch_name", $mch_name);
$buffer = $this->AddParameter($buffer, "mch_price", $mch_price);
$buffer = $this->AddParameter($buffer, "mch_returl", $mch_returl);
$buffer = $this->AddParameter($buffer, "mch_type", $mch_type);
$buffer = $this->AddParameter($buffer, "mch_vno", $mch_vno);
$buffer = $this->AddParameter($buffer, "need_buyerinfo", $need_buyerinfo);
$buffer = $this->AddParameter($buffer, "seller", $seller);
$buffer = $this->AddParameter($buffer, "show_url", $show_url);
$buffer = $this->AddParameter($buffer, "transport_desc", $transport_desc);
$buffer = $this->AddParameter($buffer, "transport_fee", $transport_fee);
$buffer = $this->AddParameter($buffer, "version", $version);
$md5_sign = strtoupper(md5($buffer."&key=".$sp_key));
$redurl = $pay_url . "?".$buffer . "&sign=" . $md5_sign;
return $redurl;
}
}
}
}
?>
3:tenpay_show.php 程序代码:
include_once("tenpay_config.php");
require_once("md5_request.php");
$tenpay = new tenpay_online_payment;
import_request_variables("gpc", "frm_");
$cmdno = $frm_cmdno;
$version = $frm_version;
$retcode = $frm_retcode;
$status = $frm_status;
$seller = $frm_seller;
$total_fee = $frm_total_fee;
$trade_price = $frm_trade_price;
$transport_fee = $frm_transport_fee;
$buyer_id = $frm_buyer_id;
$chnid = $frm_chnid;
$cft_tid = $frm_cft_tid;
$smch_vno = $frm_mch_vno;
$attach = $frm_attach;
$version = $frm_version;
$sign = $frm_sign;
$iRetOK = 0; // 成功
$iInvalidSpid = 1; // 商户号错误
$iInvalidSign = 2; // 签名错误
$iTenpayErr = 3; // 财付通返往返支付失败
$buffer = $tenpay->AddParameter($buffer, "attach", $attach);
$buffer = $tenpay->AddParameter($buffer, "buyer_id", $buyer_id);
$buffer = $tenpay->AddParameter($buffer, "cft_tid", $cft_tid);
$buffer = $tenpay->AddParameter($buffer, "chnid", $chnid);
$buffer = $tenpay->AddParameter($buffer, "cmdno", $cmdno);
$buffer = $tenpay->AddParameter($buffer, "mch_vno", $mch_vno);
$buffer = $tenpay->AddParameter($buffer, "retcode", $retcode);
$buffer = $tenpay->AddParameter($buffer, "seller", $seller);
$buffer = $tenpay->AddParameter($buffer, "status", $status);
$buffer = $tenpay->AddParameter($buffer, "total_fee", $total_fee);
$buffer = $tenpay->AddParameter($buffer, "trade_price", $trade_price);
$buffer = $tenpay->AddParameter($buffer, "transport_fee", $transport_fee);
$buffer = $tenpay->AddParameter($buffer, "version", $version);
$strLocalSign = strtoupper(md5($buffer."&key=".$sp_key));
if ($strLocalSign == $sign )
{
//验证MD5签名成功
if ($retcode == "0")
{
//支付成功,在这里处理业务逻辑注意判断订单是否重复的逻辑,注意订单金额为分
//echo "
";
if($status=="3")
{
//支付成功,在这里处理业务逻辑注意判断订单是否重复的逻辑,注意订单金额为分
echo "支付成功";
}
else
{
//支付失败,请根据retcode进行错误逻辑处理
}
}
}
else
{
//签名失败,请进行非法操作的逻辑处理
}
?>
4:tenpay_notify.php 程序代码:
include_once("tenpay_config.php");
require_once("md5_request.php");
$tenpay = new tenpay_online_payment;
import_request_variables("gpc", "frm_");
$cmdno = $frm_cmdno;
$retcode = $frm_retcode;
$status = $frm_status;
$seller = $frm_seller;
$total_fee = $frm_total_fee;
$trade_price = $frm_trade_price;
$transport_fee = $frm_transport_fee;
$buyer_id = $frm_buyer_id;
$chnid = $frm_chnid;
$cft_tid = $frm_cft_tid;
$mch_vno = $frm_mch_vno;
$attach = $frm_attach;
$version = $frm_version;
$sign = $frm_sign; $iRetOK = 0; // 成功
$iInvalidSpid = 1; // 商户号错误
$iInvalidSign = 2; // 签名错误
$iTenpayErr = 3; // 财付通返往返支付失败
$buffer = $tenpay->AddParameter($buffer, "attach", $attach);
$buffer = $tenpay->AddParameter($buffer, "buyer_id", $buyer_id);
$buffer = $tenpay->AddParameter($buffer, "cft_tid", $cft_tid);
$buffer = $tenpay->AddParameter($buffer, "chnid", $chnid);
$buffer = $tenpay->AddParameter($buffer, "cmdno", $cmdno);
$buffer = $tenpay->AddParameter($buffer, "mch_vno", $mch_vno);
$buffer = $tenpay->AddParameter($buffer, "retcode", $retcode);
$buffer = $tenpay->AddParameter($buffer, "seller", $seller);
$buffer = $tenpay->AddParameter($buffer, "status", $status);
$buffer = $tenpay->AddParameter($buffer, "total_fee", $total_fee);
$buffer = $tenpay->AddParameter($buffer, "trade_price", $trade_price);
$buffer = $tenpay->AddParameter($buffer, "transport_fee", $transport_fee);
$buffer = $tenpay->AddParameter($buffer, "version", $version);
$strLocalSign = strtoupper(md5($buffer."&key=".$sp_key));
if ($strLocalSign == $sign )
{
//验证MD5签名成功
if ($retcode == "0")
{
//支付成功,在这里处理业务逻辑注意判断订单是否重复的逻辑,注意订单金额为分
echo "
";
echo $status;
switch(($status)) {
case 1:
//交易创建
break;
case 2:
//收获地址填写完毕
break;
case 3:
//买家付款成功,注意判断订单是否重复的逻辑
echo "test pay success";
break;
case 4:
//卖家发货成功
break;
case 5:
//买家收货确认,交易成功
break;
case 6:
//交易关闭,未完成超时关闭
break;
case 7:
//修改交易***成功
break;
case 8:
//买家发起退款
break;
case 9:
//退款成功
break;
case 10:
//退款关闭
break;
default:
//error
}
}
else
{
//支付失败,请根据retcode入行错误逻辑处理
echo "retcode";
}
}
else
{
echo "qianming";
//签名失败,请进行非法操作的逻辑处理
}
?>
5:index.php 程序代码:
无标题文档
//
require_once("md5_request.php");
$tenpay = new tenpay_online_payment;
$url = $tenpay->tenpay_interface_pay ("0023_09050711031337","1213","","","财付通中介保护交易","021453587");
// 0023_09050711031337:是商品的订单号,也可以是名字,1213:是***(财付通***是乘以100计算,比如说你的***是120,那么连接的财付通这里的时候,你需要120*100才正确)
print_r("
");
?>