更dedeeims添加在线支付系统
因为数据库部分我已经写过一篇文章:给dedeims添加在线支付的功能之数据库设置,本文以该文章的数据库为准来写,如果没看过此文的网友,可以通过http://www.miaoqiyuan.cn/p/dedeims-online-pay来查看。
首先在dedeeims的会员面板中添加在线支付的链接。很简单,在menu中添加:
<li>
<h4 class=”sort”><a class=”icon par” href=”../member/pay.php”> < ?php echo GetLang('pay'); ?> </a></h4>
</li>
然后在语言文件/include/lang/下相应的语言文件中添加上对应的文字描述。
因为网银有很多,支付接口也很多,我们用的时候可能要添加多个接口,所以我们要做一个网银配置脚本:bank_config.php
< ?php
$bank_List=Array(
'网银在线'=>'chinabank'
);
?>
首先来说dedeeims在线支付的前台,很简单。pay.php,一个简单的表单,这里不再详述,代码如下:
<form class="mTB10 mL10 mR10" name="form2" action="bank.php" method="post" target="_blank">
<table cellspacing="1" class="submit">
<tbody>
<tr>
<td style="text-align:right;">支付接口:</td>
<td>
<select name="bank" id="sbank" style="width:160px">
<?php
foreach($bank_List as $bankName=>$bankEn){
?>
<option value="<?php echo $bankEn?>"><?php echo $bankName?></option>
<?php
}
?>
</select><span style="color:red;">*</span>
</td>
</tr>
<tr>
<td style="text-align:right;">支付金额:</td>
<td><input name="money" type="text" id="smoney" size="15" class="text" style="width:150px;" value="<?php echo $pay ?>"/><span style="color:red;">*</span></td>
</tr>
<tr>
<td> </td>
<td><button class="button2" type="submit">充值</button><button class="button2 mL10" type="reset">重填</button></td>
</tr>
</tbody>
</table>
</form>
现在提交到bank.php。bank.php根据选择的接口自动提交的接口文件,然后返回(这些支付接口有示例文件,直接修改下就可以)。
bank.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="css/index.css" rel="stylesheet" type="text/css">
</head>
< ?php
require_once(dirname(__FILE__)."/bank/config.php");
require_once(dirname(__FILE__)."/config.php");
CheckRank(0,0);
$bank=$_POST['bank'];
if(!in_Array($bank=$_POST['bank'],$bank_List)){ShowMsg('错误的银行,请返回重新选择', '-1',0,5000);die();}
if(!is_Numeric($money=$_POST['money'])){ShowMsg('充值金额必须是数字,请重新填写', '-1',0,5000);die();}
$row=$dsql->GetOne("select * from `#@__member` where mid='".$cfg_ml->M_ID."'");
$orderid=date('Ymd',time())."-".$cfg_ml->M_LoginID."-".date('His',time());
?>
<body onLoad="javascript:document.Bank_FORM.submit()">
载入中...<form name="Bank_FORM" id="Bank_FORM" action="./bank/<?php echo $bank ?>/Pay.php" method="post">
<input name="orderid" value="<?php echo $orderid?>" type="hidden"/>
<input name="money" value="<?php echo $money?>" type="hidden"/>
<input name="user" value="<?php echo $cfg_ml->M_LoginID?>" type="hidden"/>
<input name="uid" value="<?php echo $cfg_ml->M_ID?>" type="hidden"/>
<input name="moeny" value="<?php echo $money?>" type="hidden"/>
<input name="email" value="<?php echo $row['email']; ?>" type="hidden"/>
<input name="uname" value="<?php echo $row['uname']; ?>" type="hidden"/>
<input name="company" value="<?php echo $row['company']; ?>" type="hidden"/>
<input name="mobile" value="<?php echo $row['mobile']; ?>" type="hidden"/>
<input name="tel" value="<?php echo $row['tel']; ?>" type="hidden"/>
<input name="fax" value="<?php echo $row['fax']; ?>" type="hidden"/>
<input name="address" value="<?php echo $row['address']; ?>" type="hidden"/>
</form></body></html>
返回的时候为了统一,我们写一个通用的函数,用于为用户充值,并记录到日志:
< ?php
function payok($money,$logkey,$logdesc,$uid=1,$dsql){
if(!$dsql->GetOne("select `id` from `#@__paylog` where `mid`='".$uid."' and `desc` like '%".$logkey."%'")){
$res=$dsql->GetOne("select `money` from `#@__member` where `mid`='".$uid."'");
$oldMoney=$res['money'];
$query="insert into `#@__paylog`(`mid`,`paytype`,`money`,`money_s`,`money_e`,`desc`,`dateline`)values('$uid','0','$money','".$oldMoney."','".($oldMoney+$money)."','$logdesc','".time()."')";
$dsql->ExecuteNoneQuery($query);
$query="update `#@__member` set `money`=`money`+'".$money."' where `mid`='".$uid."'";
$dsql->ExecuteNoneQuery($query);
ShowMsg('充值成功!', './../../pay_log.php?type=pay',0,1500);
}else{
ShowMsg('<span style=color:#F00>重复点击,只充值一次!', './../../pay_log.php?type=pay',0,15000);
};
die();
}
?>
现在就支付完毕了,为了方便差财务,我们在写一个充值记录的页面,这个就比较简单了,在此就不再熬述了。
因网银在线的为例,调用的时候,直接使用一下代码:
if ($v_md5str==$md5string)
{
if($v_pstatus=="20")
{
payok($v_amount,':'.$v_oid.';','网银在线('.$v_pmode.'):'.$v_oid.';'.$v_moneytype.':'.$v_amount,$cfg_ml->M_ID,$dsql);
//支付成功,可进行逻辑处理!
//商户系统的逻辑处理(例如判断金额,判断支付状态,更新订单状态等等)......
}
}