第三方支付装载器
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 会自动调用银联支付。 整个的支付流程会与上面的微信支付、支付宝支付一样。
