发卡源码项目地址:https://github.com/Tai7sy/card-system
因为想做一个发卡平台,所以想到了风铃的UI,比较喜欢,又想对接易支付平台,故写一个教程,防止新人掉坑。
首先安装宝塔面板
环境PHP7.3+,删除被禁用的函数:putenv。
创建你的域名后,在ssh里执行:
cd /www/wwwroot/你的域名文件夹
curl -L -o card_release.tar.gz https://github.com/Tai7sy/card-system/releases/download/3.0/card_release.tar.gz && tar -zxf card_release.tar.gz && \cp -rf card_system_free_dist/. . && rm -rf card_system_free_dist card_release.tar.gz
chmod -R 777 storage/
chmod -R 777 bootstrap/cache/
php -r "copy('.env.example', '.env');"
然后去宝塔里,文件-你的域名文件夹找到.env,修改数据库信息即可。
构建数据库
cd /www/wwwroot/你的域名文件夹
php artisan key:generate
php artisan migrate:fresh --seed
php artisan cache:clear
提示: 若这一步出现红色错误内容: 'xxx' has been disabled
, 是由于宝塔自动禁用了很多函数, 请到php设置里面启用相应的函数,PHP7.3理论是只需要开启putenv就行的,前面已经说过了。
面板网站设置:
进入面板, 网站, 设置, 网站目录
关闭防跨站攻击(open_basedir)
, 并设置运行目录为/public
点击保存
重启php, 网站正常访问
注意: 若为Nginx, 请在这一步手动点击伪静态, 配置规则, 参考如下:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
后台设置:
默认账号密码 [email protected]/123456, 请及时修改
进入后台 域名/admin
管理中心 – 网站设置 – 常规, 填写 网站地址
与 网站API地址
, 保存配置
管理中心 – 支付渠道, 配置你的支付信息
网站安装完毕, 可以开始使用了~
以上是搭建风铃发卡的教程。基本按照他的教程就可以完成,我也是差不多按照原教程搬运的。
下面就是对接易支付的教程了。
宝塔文件打开到:/www/wwwroot/你的域名文件夹/app/Library/Gateway/Pay
创建文件夹EPay,进去后创建文件Api.php,编辑写入:
<?php
namespace Gateway\Pay\EPay;
use App\Library\CurlRequest;
use Gateway\Pay\ApiInterface;
use Illuminate\Support\Facades\Log;
class Api implements ApiInterface
{
//异步通知页面需要隐藏防止CC之类的验证导致返回失败
private $url_notify = '';
private $url_return = '';
private $pay_id;
public function __construct($id)
{
$this->url_notify = SYS_URL_API . '/pay/notify/' . $id;
$this->url_return = SYS_URL . '/pay/return/' . $id;
$this->pay_id = $id;
}
private function getSign($params, $sign_type, $sign_key)
{
ksort($params);
reset($params);
$sign_str = '';
foreach ($params as $key => $val) {
if (!$val || $key == 'sign' || $key == 'sign_type')
continue;
$sign_str .= $key . '=' . $val . '&';
}
//去掉最后一个&字符
$sign_str = substr($sign_str, 0, -1);
if ($sign_type === 'MD5') {
return md5($sign_str . $sign_key);
} else {
return '';
}
}
/**
* @param array $config
* @param string $out_trade_no
* @param string $subject
* @param string $body
* @param int $amount_cent
* @throws \Exception
*/
function goPay($config, $out_trade_no, $subject, $body, $amount_cent)
{
if (!isset($config['gateway'])) {
$config['gateway'] = 'https://pay.youcai.pro';
}
if (!isset($config['pid'])) {
throw new \Exception('请填写pid');
}
if (!isset($config['key'])) {
throw new \Exception('请填写key');
}
$amount = sprintf('%.2f', $amount_cent / 100); // 元为单位
// alipay:支付宝,wxpay:微信支付,qqpay:QQ钱包
$payway = strtolower($config['payway']);
$params = [
'pid' => $config['pid'],
'type' => $payway,
'out_trade_no' => $out_trade_no,
'notify_url' => $this->url_notify,
'return_url' => $this->url_return,
'name' => $subject,
'money' => $amount,
'sitename' => SYS_NAME
];
$params['sign_type'] = 'MD5';
$params['sign'] = $this->getSign($params, $params['sign_type'], $config['key']);
die('
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>正在转到付款页</title>
</head>
<body onload="document.pay.submit()">
<form name="pay" action="' . $config['gateway'] . '/submit.php" method="post">
<input type="hidden" name="pid" value="' . $params['pid'] . '">
<input type="hidden" name="type" value="' . $params['type'] . '">
<input type="hidden" name="out_trade_no" value="' . $params['out_trade_no'] . '">
<input type="hidden" name="notify_url" value="' . $params['notify_url'] . '">
<input type="hidden" name="return_url" value="' . $params['return_url'] . '">
<input type="hidden" name="name" value="' . $params['name'] . '">
<input type="hidden" name="money" value="' . $params['money'] . '">
<input type="hidden" name="sitename" value="' . $params['sitename'] . '">
<input type="hidden" name="sign_type" value="' . $params['sign_type'] . '">
<input type="hidden" name="sign" value="' . $params['sign'] . '">
</form>
</body>
');
}
function verify($config, $successCallback)
{
$isNotify = isset($config['isNotify']) && $config['isNotify'];
if (!isset($config['gateway'])) {
$config['gateway'] = 'https://pay.youcai.pro';
}
if ($isNotify) {
$can = $_GET;
$data = [
'pid' => $config['pid'],
'trade_no' => $can['trade_no'],
'out_trade_no' => $can['out_trade_no'],
'type' => $can['type'],
'name' => $can['name'],
'money' => $can['money'],
'trade_status' => $can['trade_status']
];
$data['sign_type'] = 'MD5';
$data['sign'] = $this->getSign($data, $data['sign_type'], $config['key']);
if ($data['sign'] === $can['sign']) {
echo "success";
$successCallback($data['out_trade_no'], (int)round($data['money'] * 100), $data['trade_no']);
return true;
} else {
echo "error sign";
return false;
}
} else {
if (empty($config['out_trade_no'])) {
// return page
$can = $_GET;
$data = [
'pid' => $config['pid'],
'trade_no' => $can['trade_no'],
'out_trade_no' => $can['out_trade_no'],
'type' => $can['type'],
'name' => $can['name'],
'money' => $can['money'],
'trade_status' => $can['trade_status']
];
$data['sign_type'] = 'MD5';
$data['sign'] = $this->getSign($data, $data['sign_type'], $config['key']);
if ($data['sign'] === $can['sign']) {
$successCallback($data['out_trade_no'], (int)round($data['money'] * 100), $data['trade_no']);
return true;
} else {
return false;
}
} else {
// 主动查询
$params = [
'act' => 'order', // 操作类型
'pid' => $config['pid'], // 商户ID
'key' => $config['key'], // 商户密钥
'out_trade_no' => $config['out_trade_no'], // 商户订单号
];
$ret_raw = CurlRequest::get($config['gateway'] . 'api.php?' . http_build_query($params));
$data = @json_decode($ret_raw, true);
if (!$data || !isset($data['code'])) {
Log::error('Pay.EPay.query error#1', ['ret_raw' => $ret_raw]);
return false;
}
if (@$data['status'] === '1') {
$successCallback($data['out_trade_no'], (int)round($data['money'] * 100), $data['trade_no']);
return true;
}
return false;
}
}
}
/**
* 退款操作
* @param array $config 支付渠道配置
* @param string $order_no 订单号
* @param string $pay_trade_no 支付渠道流水号
* @param int $amount_cent 金额/分
* @return true|string true 退款成功 string 失败原因
*/
function refund($config, $order_no, $pay_trade_no, $amount_cent)
{
return '此支付渠道不支持发起退款, 请手动操作';
}
}
注意!
需要用到别的易支付了,只需要修改里面的易支付地址即可。
修改两个地方,搜索http就行了,是网址的,改一下就行。
然后到发卡平台后台:
管理中心-支付渠道,右上角有个添加。
名称:随意
费率:一般写0
启用:√
驱动:EPay
方式:alipay/wxpay/qqpay//三选一
备注:随便
配置:选json
写入:
{
"pid": "你的PID",
"key": "你的KYE密钥"
}
PID和密钥修改为你易支付平台的,不用多说。
每次添加一个支付方式,想要别的方式再添加一边,修改支付方式就行了,比如上次你填的alipay,下个就填wxpay,其他不变。
然后点前台支付,修改支付宝渠道为你的易支付方式,选择电脑/手机全部启用。,其他的自己慢慢设置吧。
转载需标明出处。