Skip to content

第三方支付装载器

niucloud-admin框架已经内置实现支付宝支付、微信支付、微信支付v3。 框架可设置不同端口,对于不同支付方式的配置与开启,以及调整支付方式的优先顺序。

支付装载器

PayLoader负责加载和管理各类支付驱动,如微信支付、支付宝支付等。

文件目录 niucloud\core\pay\PayLoader.php

php
class PayLoader extends Loader
{
    /**
     * 空间名
     * @var string
     */
    protected $namespace = '\\core\\pay\\';

    protected $config_name = 'pay';
    /**
     * 默认驱动
     * @return mixed
     */
    protected function getDefault()
    {
        return config('pay.default');
    }
}

支付配置

php
return [
    //默认驱动
    'default' => 'wechatpay',
    //驱动
    'drivers' => [
        //微信
        'wechatpay' => [],
        //支付宝
        'alipay' => [],
    ]
];

驱动里面可以配置支付的额外参数。default为系统默认支付方法。目前系统并没有调用上述配置的具体的参数。只是为了装载器来装载对应的类(反射)。具体的各个支付方式的参数配置调用都取自数据库表。

使用方法

php
$notify_url = (string)url("/api/pay/notify/$this->site_id/$this->channel/$this->type/$action", [], '', true);//异步回调通知地址
$this->config['notify_url'] = $notify_url;
return new PayLoader($this->type, $this->config);

一般来说,系统已经把具体的各种支付方法进行了封装(CorePayEventService )。不需要用户调用上面的具体支付方法。

具体的使用在相关业务类中调用。一般在Service中,app\service\pay\ 进行调用。

开发扩展支付插件(举例开发银联支付)

首先增加支付类型配置

1.修改config/pay.php

php
return [
    //默认驱动
    'default' => 'wechatpay',
    //驱动
    'drivers' => [
        //微信
        'wechatpay' => [],
        //支付宝
        'alipay' => [],
        //银联支付
        'union_pay '=>[
                'driver' \=> 'addon\\unionPay\\unionPay', //反射类的名字
        ],

    ]
];

上面配置文件需要注意的地方,对于框架内置的路径来说,一般为app\core\pay\。装载器会自动装载本命名空间实例化。对于第三方开发者开发,一般为插件Addon下,所以要指定具体的驱动命名空间位置。系统会自动加载该驱动。

2.创建文件:/Addon/unionPay/UnionPay.php

需要完成以下接口

php
namespace core\pay;

use core\loader\Storage;

/**
 * 支付管理驱动类
 * Class BasePay
 */
class UnionPay extends BasePay
{
    protected $config;//配置

    /**
     * 初始化
     * @param array $config
     * @return mixed|void
     */
    protected function initialize(array $config = [])
    {

    }

    /**
     * 网页支付
     * @param $save_dir
     * @return mixed
     */
    abstract protected function web(array $params);

    /**
     * 手机网站支付
     * @param $dir
     * @return mixed
     */
    abstract protected function wap(array $params);

    /**
     * app支付
     * @param $dir
     * @return mixed
     */
    abstract protected function app(array $params);

    /**
     * 小程序支付
     * @param $dir
     * @return mixed
     */
    abstract protected function mini(array $params);
    /**
     * 付款码支付
     * @param $dir
     * @return mixed
     */
    abstract protected function pos(array $params);
    /**
     * 扫码支付
     * @param $dir
     * @return mixed
     */
    abstract protected function scan(array $params);
    /**
     * 转账
     * @param $dir
     * @return mixed
     */
    abstract protected function transfer(array $params);
    /**
     * 公众号支付
     * @param $dir
     * @return mixed
     */
    abstract protected function mp(array $params);

    /**
     * 支付关闭
     * @param string $out_trade_no
     * @return mixed
     */
    abstract protected function close(string $out_trade_no);

    /**
     * 退款
     * @param array $params
     * @return mixed
     */
    abstract protected function refund(array $params);

    /**
     * 支付通知
     * @param callable $callback
     * @return mixed
     */
    abstract protected function notify(Callable $callback);

    /**
     * 查询支付订单
     * @param array $params
     * @return mixed
     */
    abstract protected function getOrder(array $params);

    /**
     * 查询退款订单
     * @param string|null $out_trade_no
     * @param string|null $refund_no
     * @return mixed
     */
    abstract protected function getRefund(string $out_trade_no, ?string $refund_no);

    /**
     * 查询转账订单
     * @param string $transfer_no
     * @return mixed
     */
    abstract protected function getTransfer(string $transfer_no);

}

银联扩展使用方法

增加银联支付后,系统的CorePayEventService 会自动调用银联支付。 整个的支付流程会与上面的微信支付、支付宝支付一样。

基于 MIT 协议发布