bobcoders9/cashier

1.0.0 2022-09-04 09:16 UTC

This package is auto-updated.

Last update: 2024-09-04 13:28:39 UTC


README

支持网关

介绍

在对接第三方支付时,尤其是需要对接多个第三方支付时,需要阅读第三方文档,然后花费大量时间拼装和调试参数,例如调用第三方下单创建支付,如果需要同时接入微信和支付宝支付,那么就需要收集文档,可以想象是非常麻烦的(其实还好.. hhh..)。

这个组件提供的将与第三方通信分为三部分

  1. request,请求,主动调用第三方
  2. response,响应,主动调用第三方获得的响应
  3. notification,通知,第三方的各类通知

而每部分又分为不同的动作,每个动作绑定一个固定的表单(Form),每个表单的内容是固定的。

例如主动调用第三方下单创建支付(ChargeRequest),他使用的表单是 ChargeRequestForm。填写好表单后,传入组件,即可由组件加工好参数并调用第三方支付。

这样就能做到,只需要了解组件的表单内容,就可以接入多个第三方支付,一劳永逸(不存在的 hhh)。

使用

这里以支付宝PC网站支付为例,如果需要使用其他的支付网关,只需要修改实例化 Cashier 时传入的 $gateway 即可。

注意,组件使用的基本货币单位是分。

<?php

use BobCoderS9\Cashier\Cashier;

// 按格式组装好配置
$config = [
    'app_id' => 'xxxx',
    'app_private_key' => 'xxxxx',
    'alipay_public_key' => 'xxxxx',
];

// 创建实例, 传入要使用的 Gateway
$cashier = new Cashier('alipay_web', $config);

创建付款

<?php
// 组装 ChargeRequestForm
$data = [
    'order_id' => '151627101400000071',
    'subject' => 'testing',
    'amount' => 1,
    'currency' => 'CNY',
    'description' => 'testing description',
    'return_url' => 'https://www.baidu.com',
    'expired_at' => '2018-01-23 19:00:00',
];

$form = $cashier->charge($data);

// 以 laravel 为例
return redirect($form->get('charge_url'));

查询支付

<?php

$form = $cashier->query([
    'order_id' => '151627101400000071',
]);

var_dump('paid' === $form->get('status'));

接收通知

<?php
$form = $cashier->notify('charge');

var_dump('paid' === $form->get('status'));

var_dump($form->get('trade_sn'));   // 取得第三方交易号

退款

<?php

$form = $cashier->refund([
    'order_id' => '151627101400000071',
    'refund_id' => '3151627101400000071',
    'total_amount' => 1,
    'refund_amount' => 1,
]);

表单及字段说明

ChargeRequestForm

其他依旧待补充...

常见问题解答

Q: 相比其他的 sdk 优点在哪 ?

A: 无论标榜多优雅多好用的 sdk,大多都是要求你按照第三方的参数名传入参数,那就免不了要看文档,免不了在代码里要做很多处理。我想要的是,从数据库里取出订单后,做一遍处理就能解决接入多种支付。

Q: 是不是就完全不必看第三方支付的文档了 ?

A: 并不是,我建议还是需要看,并且组件中某些支付(例如微信公众号)是需要传入一些特殊参数的。组件只是帮你解决烦心的调用问题。

许可证

MIT