这是我上个月花重金购买的四方系统源码,现在免费分享给大家。
源码内附安装教程,20多项功能及安全方面的更新文档,源码说明等,小白也能轻松搭建。
能够轻松应对高并发,等以前版本无法应对的并发问题,也不会被恶意补单漏洞侵扰,全站修复了XSS攻击漏洞。
【主要功能说明】
1、支付类型可包含 H5、当面付、公众号、扫码、银联、快捷;
2、结算类型包含 普通结算、代付结算、手动结算;
3、枫控限制 轮询、IP限制、金额限制、当日总金额等;
4、完整的账单统计;
5、文档分为在线文档和可下载文档压缩包;
【应用场景】作为第三方、四方支付平台。该有的功能都有。
作为可以对接微信支付宝官方接口也可以对接第三方支付接口还可以对接免签约接口还可以对接微信公众号支付支付宝当面付、对接其他四方支付系统、跑分系统等.可以多通道轮训,可对单个帐户设置多种规则。
【帐号类型】系统后台多类型管理员、商户代理、普通商户、接口用户;对用的板块后台都不一样相关的数据统计齐全有效。
免责申明:
源码免费提供,所有功能效果与演示站一致,无法满足所有客户的个性化需求,源码开源,如有个性化需求可自行对源码二次开发,谢谢!
该源码仅供交流研究测试使用,不可用于非法用途!否则后果自负。
【温馨提示】代码已经几经N多个测试验证,虚拟主机空间不支持平台搭建的。需要使用widows、Linux系统搭建。
环境:
Nginx 1.20.2
MySQL 5.6.50
PHP-5.6
phpMyAdmin 4.4
php安装拓展:
ZendGuardLoader
Fileinfo3
#**支付系统接口文档**
系统的注意安装事项
1.Nginx 1.15或apche2.4
2.MySQL 5.5
3.php5.6
宝塔控制台
导入数据库
解压源码 修改数据库
Application\Common\Conf\db.php
下面这里的网址替换成你的,名字替换成你的
Application\Common\Conf\website.php
后台登陆地址 网站地址/admin
账号taoke
密码123456
站点设置里,域名要改为你的网站地址
上游支付对接目录 \Application\Pay\Controller
上游代付对接目录 \Application\Payment\Controller
商户开发文档目录 \Uploads\demo.zip
商户对接教程
支付请求
“`Post“` 网站地址/Pay_Index.html
***
>###**请求参数:**
| 参数名称 | 参数含义 | 是否必填 | 参与签名 | 参数说明 |
| —— |:—–|:—–|:—–|:—–|
|pay_memberid |商户号 |是 |是 |平台分配商户号
|pay_orderid |订单号 |是 |是 |上送订单号唯一, 字符长度20
|pay_applydate |提交时间 |是 |是 |时间格式:2016-12-26 18:18:18
|pay_bankcode |银行编码 |是 |是 |参考后续说明
|pay_notifyurl |服务端通知 |是 |是 |服务端返回地址.(POST返回数据)
|pay_callbackurl |页面跳转通知 |是 |是 |页面跳转返回地址(POST返回数据)
|pay_amount |订单金额 |是 |是 |商品金额
|pay_md5sign |MD5签名 |是 |否 |请看MD5签名字段格式
|pay_attach |附加字段 |否 |否 |此字段在返回时按原样返回(中文需要url编码)
|pay_productname |商品名称 |否 |否
|pay_productnum |商户品数量 |否 |否
|pay_productdesc |商品描述 |否 |否
|pay_producturl |商户链接地址 |否 |否
***
>###**签名算法:**
签名生成的通用步骤如下:
第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串。
第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。
“`
stringSignTemp=”pay_amount=pay_amount&pay_applydate=pay_applydate&pay_bankcode=pay_bankcode&pay_callbackurl=pay_callbackurl&pay_memberid=pay_memberid&pay_notifyurl=pay_notifyurl&pay_orderid=pay_orderid&key=key”
sign=MD5(stringSignTemp).toUpperCase()
“`
***
>###**支付结果通知:**
如果接收到服务器点对点通讯时,在页面输出“OK”(没有双引号,OK两个字母大写),否则会重复3次发送点对点通知.
| 参数名称 | 参数含义 |参数说明 |
|:——:|:—–:|:—–|
|memberid |商户编号|
|orderid |订单号|
|amount |订单金额|
|datetime |交易时间|
|returncode |交易状态| “00” 为成功
|attach |扩展返回| 商户附加数据返回
|sign |签名 |请看验证签名字段格式
注:签名见签名算法。
>###**附:银行编码**
| 银行编码 | 银行名称 |
|:—-:|:—-:|
|901 |微信公众号
|902 |微信扫码支付
|903 |支付宝扫码支付
|904 |支付宝手机
|905 |QQ手机支付
|907 |网银支付
|908 |QQ扫码支付
|909 |百度钱包
|910 |京东支付
>###**接入示例(PHP)**
“index.php“
“`
<?php
error_reporting(0);
header(“Content-type: text/html; charset=utf-8”);
$pay_memberid = “10002”; //商户ID
$pay_orderid = ‘E’.date(“YmdHis”).rand(100000,999999); //订单号
$pay_amount = “0.01”; //交易金额
$pay_applydate = date(“Y-m-d H:i:s”); //订单时间
$pay_notifyurl = “http://www.yourdomain.com/demo/server.php”; //服务端返回地址
$pay_callbackurl = “http://www.yourdomain.com/demo/page.php”; //页面跳转返回地址
$Md5key = “t4ig5acnpx4fet4zapshjacjd9o4bhbi”; //密钥
$tjurl = “http://www.yourdomain.com/Pay_Index.html”; //提交地址
$pay_bankcode = “903”; //银行编码
//扫码
$native = array(
“pay_memberid” => $pay_memberid,
“pay_orderid” => $pay_orderid,
“pay_amount” => $pay_amount,
“pay_applydate” => $pay_applydate,
“pay_bankcode” => $pay_bankcode,
“pay_notifyurl” => $pay_notifyurl,
“pay_callbackurl” => $pay_callbackurl,
);
ksort($native);
$md5str = “”;
foreach ($native as $key => $val) {
$md5str = $md5str . $key . “=” . $val . “&”;
}
//echo($md5str . “key=” . $Md5key);
$sign = strtoupper(md5($md5str . “key=” . $Md5key));
$native[“pay_md5sign”] = $sign;
$native[‘pay_attach’] = “1234|456″;
$native[‘pay_productname’] =’VIP基础服务’;
?>
<!DOCTYPE html>
<html>
<head>
<meta charset=”utf-8″>
<meta http-equiv=”X-UA-Compatible” content=”IE=edge”>
<meta name=”viewport” content=”width=device-width, initial-scale=1″>
<title>支付Demo</title>
<!– Bootstrap –>
<link rel=”stylesheet” href=”https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css”
integrity=”sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u” crossorigin=”anonymous”>
<!–[if lt IE 9]>
<script src=”https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js”></script>
<script src=”https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js”></script>
<![endif]–>
</head>
<body>
<div>
<div style=”margin:15px;0;”>
<div>
<form method=”post” action=”<?php echo $tjurl; ?>”>
<?php
foreach ($native as $key => $val) {
echo ‘<input type=”hidden” name=”‘ . $key . ‘” value=”‘ . $val . ‘”>’;
}
?>
<button type=”submit” class=”btn btn-success btn-lg”>扫码支付(金额:<?php echo $pay_amount; ?>元)</button>
</form>
</div>
</div>
</div>
<script src=”https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js”></script>
<script src=”https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js”
integrity=”sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa”
crossorigin=”anonymous”></script>
</body>
</html>
“page.php“同步通知
<?php
header(‘Content-type:text/html;charset=utf-8’);
$returnArray = array( // 返回字段
“memberid” => $_REQUEST[“memberid”], // 商户ID
“orderid” => $_REQUEST[“orderid”], // 订单号
“amount” => $_REQUEST[“amount”], // 交易金额
“datetime” => $_REQUEST[“datetime”], // 交易时间
“transaction_id” => $_REQUEST[“transaction_id”], // 流水号
“returncode” => $_REQUEST[“returncode”]
);
$md5key = “t4ig5acnpx4fet4zapshjacjd9o4bhbi”;
ksort($returnArray);
reset($returnArray);
$md5str = “”;
foreach ($returnArray as $key => $val) {
$md5str = $md5str . $key . “=” . $val . “&”;
}
$sign = strtoupper(md5($md5str . “key=” . $md5key));
if ($sign == $_REQUEST[“sign”]) {
if ($_REQUEST[“returncode”] == “00”) {
$str = “交易成功!订单号:”.$_REQUEST[“orderid”];
exit($str);
}
}
?>
“`
“server.php“ 异步通知
<?php
$returnArray = array( // 返回字段
“memberid” => $_REQUEST[“memberid”], // 商户ID
“orderid” => $_REQUEST[“orderid”], // 订单号
“amount” => $_REQUEST[“amount”], // 交易金额
“datetime” => $_REQUEST[“datetime”], // 交易时间
“transaction_id” => $_REQUEST[“transaction_id”], // 支付流水号
“returncode” => $_REQUEST[“returncode”],
);
$md5key = “t4ig5acnpx4fet4zapshjacjd9o4bhbi”;
ksort($returnArray);
reset($returnArray);
$md5str = “”;
foreach ($returnArray as $key => $val) {
$md5str = $md5str . $key . “=” . $val . “&”;
}
$sign = strtoupper(md5($md5str . “key=” . $md5key));
if ($sign == $_REQUEST[“sign”]) {
if ($_REQUEST[“returncode”] == “00”) {
$str = “交易成功!订单号:”.$_REQUEST[“orderid”];
file_put_contents(“success.txt”,$str.”\n”, FILE_APPEND);
exit(“ok”);
}
}
?>
“`
新装系统后,一定要设置伪静态,不然后台和商户你是登录不了的
计划任务部署:建议使用宝塔面板里的 计划任务功能来自动执行
任务标题:#解冻保证金计划任务
执行命令: cd /www/wwwroot/wwww.zhkpay.com; php cli.php unfreeze
任务标题:#自动提交代付计划任务
执行命令:cd /www/wwwroot/wwww.zhkpay.com; php cli.php autodf
任务标题:#自动查询代付计划任务
执行命令:cd /www/wwwroot/www.zhkpay.com; php cli.php autodf_dfquery
任务标题:#解冻资金计划任务
执行命令:cd /www/wwwroot/www.zhkpay.com; php cli.php unfreezeMoney