风铃发卡搭建并对接易支付教程

发卡源码项目地址: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,其他不变。

然后点前台支付,修改支付宝渠道为你的易支付方式,选择电脑/手机全部启用。,其他的自己慢慢设置吧。

转载需标明出处。

学习教程

CentOS系统 更改ssh默认端口

2020-9-30 15:16:33

学习教程

v2ray各平台(windows、安卓、ios系统)客户端使用教程

2020-10-19 16:46:55

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索