报告近期状况

感觉有一段时间没更新博客了,干嘛去了?先是被学校抓取充人数,开发《湖南工业大学毕业设计管理系统》,后来有遇到了一个创业的网友,叫我去帮忙。

直到今天才有空更新一下博客,就是为了告诉大家我还活在,我没其他的意思。

秋天了,看来去年的努力没白费呀~

今天回来,总不能一直灌水吧~还是给大家带来了点东西。

网上支付系统的应用 — 腾付通(PS:跟TX没有半毛钱关系,他就爱取这个名字。)

其实网上支付平台的搭建很简单,比thinkphp应用容易多了。下面一张图就可以告诉你真相

网上支付业务流程图

网上支付业务流程图

看完流程图可以了解:

用户是通过商户交易平台链接到支付平台,再由支付平台跟银行进行数据交换。通过返回信息来确定是否支付成功

业务逻辑弄清楚了,其他的事就好办了,看看支付平台要什么数据,你就给他发送什么就可以了

字段 输入项名称 属性 注释 长度
code 支付交易代码 必输 ORD001   建立商品订单
merOrderId 商品订单号 必输 商户平台生成的用于标识该笔订单的唯一号码 20
returnUrl 同步返回URL 必输 针对该交易的交易状态同步通知接收URL 120
notifyUrl 异步通知URL 必输 结果返回URL,仅适用于立即返回处理结果的接口。支付系统处理完请求后,立即将处理结果返回给这个URL 120
chkMethod 签名方式 必输 默认:1 4
merBusType 商户业务类型 必输 01-充值;02-转账;03-提现;04-退款;05-结算;10-普通商品;11-书籍;12-机票;13-酒店;14-彩票;99-其它 2
payType 付款类型 必输 0-直接到账付款 ; 1
merOrderAmt 订单总金额 必输 单笔订单的总费用 15
custPhone 买方手机号 可选 用户手机号 11
merOrderUrl 商品展示网址 可选 由接口发起必须输入 120
merOrderName 商品名称 可选 50
merShortName 商品简称 可选 商品简称 8
merOrderDesc 商品描述 可选 对商品的说明信息 500
Remark 商户备注 可选 为商户的自定义字段,该字段在交易完成后由中间账户系统原样返回 500
Price 商品单价 可选 单个商品的价格 15
merOrderCount 购买数量 可选 单个商品的购买数量 6
saleAcct 卖方账号 可选 可不输入,不输缺省为商户对应的账号 20
saleAmt 卖方金额 可选 可不输入,缺省为订单金额 15
payMethod 默认支付方式 可选 0-手机支付;1-固定支付; 1
merRemak 商户备注 可选 对账时原封不动送回 500

这个是腾付通提交的API接口需求数据。

再通过表单收集,再传给后台处理,发送给腾付通支付平台就可以了。每个支付平台不一样,处理的方式不一样,这个在支付平台提供的API里面有说明,下面看看腾付通的后台处理类是怎么写的

[php]
<?php

/**

* 注:以下只作为开发参考代码

*/

?>

<meta http-equiv="Content-Type" content="text/html; charse="utf-8">

<a href="index.php">返回</a><br/>

<?php

if(isset($_POST[‘hsubmit’]) && $_POST[‘hsubmit’]==1){

if(empty($_POST[‘merOrderId’]) || empty($_POST[‘merOrderAmt’]))exit("商品总价和订单编号不

能为空");

require ("config.php");//加载配置文件

$ps = new Processing();

$ps->setCharset($config["charset"]);

$ps->setCode($config["code"]);

$ps->setGateUrl($config["gateUrl"]);

$ps->setMerId($config["merId"]);

$ps->setParameter("returnUrl", $config["returnUrl"]);

$ps->setParameter("notifyUrl", $config["notifyUrl"]);

$ps->setParameter("chkMethod", $config["chkMethod"]

$ps->setParameter("merBusType", $config["merBusType

$ps->setParameter("payType", $config["payType"]);

$ps->setParameter("payMethod", $config["payMethod"]

$ps->setParameter("merOrderName", $_POST[‘merOrd

$ps->setParameter("merOrderId", $_POST[‘merOrderId

$ps->setParameter("merOrderAmt", $_POST[‘merOrde

$ps->setParameter("Price", $_POST[‘Price’]);

$ps->setParameter("merOrderCount", $_POST[‘merOrd

$ps->setParameter("Remark", $_POST[‘Remark’]);

$ps->createXml();

//签名处理

$rsa = new Rsa();

$rsa->setPriKey($config["priKeyPath"], $config["priKeyPass"]); //获取私钥

$rsa->setPubKey($config["pubKeyPath"]); //获取公钥

$signmessage = $rsa->getSslSign($ps->getXml());//签名

if(!$rsa->isContinue())exit("签名失败");

$ps->setParameter("Signmessage", $signmessage);//添加签名

$ps->createXml(); //重组xml

$data = $rsa->priEncrypt($ps->getXml()); //私钥加密

if(!$rsa->isContinue())exit("加密失败");

$xml = $ps->getServerData($data); //获取服务器返回数据xml格式

$data = $ps->loadXml($xml); //解析xml

//解析从服务器获取的xml,成功则解密返回的数据

if($data[‘Errorcode’]==’0000000000′){

//成功

$xml = $rsa->pubDecrypt($data[‘returnMessage’]); //公钥解密

if(!$rsa->isContinue())exit("解密失败");

unset($data);

$data = $ps->loadXml($xml);

//检查是否需要验证签名 若无signmessage,则无需做签名验证

if(isset($data[‘Signmessage’])){

$xml = preg_replace(‘/(<data name="Signmessage[^>]+>)/is’, "", $xml);

if(!$rsa->getSslVerify($xml, $data[‘Signmessage’])){

exit("签名验证失败");
}

}

echo "<br/>支付系统日期 :",$data[‘paySysDate’];

echo "<br/>后台流水 :",$data[‘serialNum’];

echo "<br/>商户号 :",$data[‘merNo’];

echo "<br/>商品订单号 :",$data[‘merOrderId’];

echo "<br/>商品名称 :",$data[‘merOrderName’]

echo "<br/>商品简称 :",$data[‘merShortName’]

echo "<br/>商品单价 :",$data[‘price’];

echo "<br/>订单总金额 :",$data[‘merOrderAmt’];

echo "<br/>购买数量 :",$data[‘merOrderCount’

echo "<br/>付款类型 :",$data[‘payType’];

echo "<br/>卖方支付账号 :",$data[‘salePayAcct’];

echo "<br/>买方支付账号 :",$data[‘custPayAcct’];

echo "<br/>订单状态 :",$data[‘merOrderStatus’

echo "<br/>支付URL :",$data[‘payUrl’];

}else{

//失败

echo "<br/>错误:".$data[‘returnMessage’];

}

}

?>
[/php]

上面后台处理支付平台提供的dome。这里接受到了数据要怎么传送给腾付通?

后台生成的XML里面有,打印出来,你就看的见:http://www.tftpay.com/middleWeb/OMCGPUB6/FormTrans7.dow?merNo=xxxxxx&orderNo=xxxxx

只需要传两个值过去,一个是商品订单号和商户号就可以了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注