GlobalPay

反对国际版领取的 PHP SDK,目前只反对支付宝国际版。因目前支付宝跨境在线领取服务只反对 app、wap、web 和报关这四种,本 SDK 提供了 app、wap、web 这三种跨境领取,详见国内支付宝官网文档 。

装置

composer require pudongping/global-pay -vvv

特点

  • 命名标准
  • 暗藏开发者不须要关注的细枝末节
  • 合乎 PSR 标准,能够不便的与各种 PHP 框架集成
  • 有良好的文档,蕴含各种示例办法以及官网返回后果。文档地址 : https://pudongping.github.io/...

运行环境

  • PHP >= 7.1.3
  • Composer

反对的领取办法

支付宝

  • 电脑领取
  • 手机网站领取
  • APP 领取
method形容
web电脑领取
wap手机网站领取
appAPP 领取

反对的办法

所有网关均反对以下办法
  • find(array|string $order)
    阐明: 查找订单接口
    参数: $orderstring 类型时,请传入零碎订单号,对应跨境支付宝中的 out_trade_no 参数; array 类型时,参数请参考支付宝境外订单单笔查问文档 。
    返回: 查问胜利,返回 Illuminate\Support\Collection 实例,能够通过 $collection->toArray() 或者 $collection->all() 或者 $collection->get('field') 拜访服务器返回的数据。
  • refund(array $order)
    阐明: 退款接口
    参数: $order 数组格局,退款参数请参考支付宝境外退款接口文档 。
    返回: 退款胜利,返回 Illuminate\Support\Collection 实例,能够通过 $collection->toArray() 或者 $collection->all() 或者 $collection->get('field') 拜访服务器返回的数据。
  • verify()
    阐明: 验证服务器返回数据是否非法
    返回: 验证胜利,返回 Illuminate\Support\Collection 实例,能够通过 $collection->toArray() 或者 $collection->all() 或者 $collection->get('field') 拜访服务器返回的数据。

其余通用办法

  • getExchangeRate()
    阐明: 获取汇率。详见支付宝境外汇率查问接口 。
    返回: 获取胜利,返回 Illuminate\Support\Collection 实例,能够通过 $collection->toArray() 或者 $collection->all() 或者 $collection->get('field') 拜访服务器返回的数据。
    留神: 1、货币间的汇率会在北京工夫每日 9:00 到 11:00 间变动一次; 2、汇率每日获取下限为 100 次。 (可能须要思考通过缓存保留汇率,避免接口出现异常,因为本 SDK 没有做缓存解决)
  • getHbFqCost(float $totalAmount, bool $isShowAll = false, bool $isSellerPercent = false)
    阐明: 获取花呗分期计费状况
    参数: $totalAmount 为分期的本金,$isShowAll 为是否显示每一期的还款数,$isSellerPercenttrue 示意商家承当全副手续费,为 false 示意用户承当全副手续费。
    返回: 获取胜利,返回 Illuminate\Support\Collection 实例,能够通过 $collection->toArray() 或者 $collection->all() 或者 $collection->get('field') 拜访服务器返回的数据。

返回参数阐明

参数含意
nper期数
total_amount本金
total_charge总手续费
rate利率
per_charge每期手续费
per_amount每期本金
per_total_amount每期总费用
refund_list还款列表
refund_list.nper第几期
refund_list.charge当后期数所须要领取的手续费
refund_list.amount当后期数所须要领取的本金数
refund_list.current_total_amount当后期数所须要领取的总费用

应用阐明

非花呗分期领取

<?phpdeclare(strict_types=1);namespace App\Controller;use Pudongping\GlobalPay\GlobalPay;use Pudongping\GlobalPay\Log;class PayController{    protected $config = [        'partner' => '2088000000000000',  // 单干身份者 id,以 2088 结尾的 16 位纯数字        'notify_url' => 'http://a90b-8-37-43-168.demo.io/index/notify_url',  // 异步回调地址        'return_url' => 'http://a90b-8-37-43-168.demo.io/index/return_url',  // 同步回调地址        'refer_url' => 'https://www.demo.net',  // 二级商户网站地址        'seller_email' => 'xxxx@gmail.com',  // 签约支付宝账号或卖家支付宝帐户        'key' => 'xxxx',  // 平安检验码,以数字和字母组成的 32 位字符        'sign_type' => 'RSA',  // 不须要批改        'input_charset' => 'UTF-8',  // 商户网站应用的编码格局,倡议不须要批改        'transport' => 'http',  // 拜访模式,依据本人的服务器是否反对 ssl 拜访,若反对请抉择 https;若不反对请抉择 http        'split_fund' => '2088000000000000:0.10',  // 承受分账资金的支付宝账户 ID 和比例,用逗号分隔其余帐号信息。ID 是以 2088 结尾的纯 16 位数字。        'private_key' => '/Users/pudongping/glory/key/alipay_private_key.pem',  // 私钥门路        'public_key' => '/Users/pudongping/glory/key/alipay_public_key.pem',  // 公钥门路        'log' => [ // optional            'file' => 'alipay.log',  // 当前目录下            'level' => 'debug', // 倡议生产环境等级调整为 info,开发环境为 debug            'type' => 'single', // optional, 可选 daily.            'max_file' => 30, // optional, 当 type 为 daily 时无效,默认 30 天        ],        'http' => [ // optional            'timeout' => 5.0,            'connect_timeout' => 5.0,            // 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)        ],        'mode' => 'dev', // optional,设置此参数,将进入沙箱模式    ];    /**     * document link: https://global.alipay.com/docs/ac/web_cn/about     *     * @return mixed     */    public function web()    {        $order = [            'out_trade_no' => time(),            'subject' => '交易 alex ',            'currency' => 'JPY',            'rmb_fee' => '0.20',            'trade_information' => json_encode([                'business_type' => 4,                'goods_info' => '変身ベ...^1',                'total_quantity' => 1            ], 256),            // '_only_args' => true  // 只须要返回参数模式时减少        ];        $globalPay = GlobalPay::alipay($this->config)->web($order);        return $globalPay->send();        // 如果设置了 `_only_args` 为 true,则应用以下办法获取所有的参数        // var_dump($globalPay->getContent());    }    /**     * document link:  https://global.alipay.com/docs/ac/wap_cn/start     *     * @return mixed     */    public function wap()    {        $order = [            'out_trade_no' => time(),            'subject' => '交易 alex ',            'currency' => 'JPY',            'rmb_fee' => '0.10',            'trade_information' => json_encode([                'business_type' => 4,                'goods_info' => '変身ベ...^1',                'total_quantity' => 1            ], 256),            // '_only_args' => true  // 只须要返回参数模式时减少        ];        $globalPay = GlobalPay::alipay($this->config)->wap($order);        return $globalPay->send();        // 如果设置了 `_only_args` 为 true,则应用以下办法获取所有的参数        // var_dump($globalPay->getContent());    }    /**     * document link: https://global.alipay.com/docs/ac/app_cn/about     */    public function app()    {        $order = [            'out_trade_no' => 'alex_' . time(),            'subject' => '交易 5200',            'currency' => 'JPY',            'rmb_fee' => '1.01',            'trade_information' => json_encode([                'business_type' => 4,                'goods_info' => '大海にて^1',                'total_quantity' => 1            ], 256),        ];        $globalPay = GlobalPay::alipay($this->config)->app($order);        $content = $globalPay->getContent();        var_dump($content);    }    /**     * 单笔查问接口 document link: https://global.alipay.com/docs/ac/global/single_trade_query_cn     */    public function find()    {        // out_trade_no 和 trade_no 参数能够同时含有,也能够二选一        $order = [            'out_trade_no' => 'alex_1629950066',            // 'trade_no' => '2021082622001364941434754996',        ];        $globalPay = GlobalPay::alipay($this->config)->find($order);        var_dump($globalPay->toArray());    }    /**     * 退款接口 document link: https://global.alipay.com/docs/ac/global/forex_refund_cn     */    public function refund()    {        $order = [            'out_return_no' => 'alex_refund_' . time(),            'out_trade_no' => 'alex_1629950066',            'return_rmb_amount' => '1.01',            'currency' => 'JPY',            'reason' => '退款测试',            // 'is_sync' => 'N',  // 如果 is_sync => N 则开启异步告诉,否则不开启异步告诉,不开启异步告诉 notify_url 参数将会生效(不须要开启时,则不须要设置)            // 'notify_url' => 'http://api.demo.com:8016/v2/alipay/forexNotify',  // $order['notify_url'] 设置了,则应用 $order['notify_url'] 的值,否则应用配置文件中的 notify_url 参数            // 'type' => 'pc',  // 如果是网站领取,则须要设置 type 参数为 pc,手机浏览器或支付宝钱包领取时,不须要设置        ];        $globalPay = GlobalPay::alipay($this->config)->refund($order);        var_dump($globalPay->toArray());    }    /**     * 同步验签     */    public function return()    {        $data = GlobalPay::alipay($this->config)->verify();    }    /**     * 异步验签     *     * @return mixed     */    public function notify()    {        $globalPay = GlobalPay::alipay($this->config);        try {            $data = $globalPay->verify();  // 验签            // 倡议必须对以下几个参数进行业务逻辑验证            $outTradeNo = $data->get('out_trade_no');  // 商户须要验证该告诉数据中的 out_trade_no 是否为商户零碎中创立的订单号。            $tradeStatus = $data->get('trade_status');  // 在支付宝的业务告诉中,只有交易告诉状态为 TRADE_FINISHED 时,支付宝才会认定为买家付款胜利。            $totalFee = $data->get('total_fee');  // 该笔订单的总金额。申请时对应的参数,原样告诉回来。(外币金额)            Log::debug('GlobalPay Notify ===> ', $data->all());        } catch (\Exception $exception) {            Log::error('异步告诉异样 ===> ' . $exception->getMessage());            return $globalPay->fail()->send();  // 其余框架            // return $globalPay->fail();  // Laravel 框架能够间接这样        }        return $globalPay->success()->send();  // 其余框架        // return $globalPay->success();  //  Laravel 框架能够间接这样    }    /**     * 获取汇率     */    public function getExchangeRate()    {        $globalPay = GlobalPay::alipay($this->config)->getExchangeRate();        var_dump($globalPay->toArray());    }}

花呗分期领取

<?phpdeclare(strict_types=1);namespace App\Controller;use Pudongping\GlobalPay\GlobalPay;use Pudongping\GlobalPay\Log;class HbfqPayController{    public function web()    {        $order = [            'out_trade_no' => time(),            'subject' => '交易 alex',            'currency' => 'JPY',            'rmb_fee' => 5.45,            'trade_information' => json_encode([                'business_type' => 4,                'goods_info' => '交易费用^1',                'total_quantity' => 1            ], 256),            'hb_fq_param' => [                'num' => 3,  // 花呗分期分期数,只反对 3、6、12 期                // 只有 is_has_household 为 true, is_seller_percent 能力设置为 true                'is_has_household' => false,  // 是否领有出资户,只有领有出资户,商家能力贴息,否则只能用户贴息                'is_seller_percent' => false,  // 是否商家贴息                // 花呗分期开启订单传参贴息流动(不反对 PC 领取,无论是国内还是国内的交易都不反对)                // 因而相比 app 领取,不能传递 is_order_subsidy 参数            ],            // '_only_args' => true  // 只须要返回参数模式时减少        ];        $globalPay = GlobalPay::alipay($this->config)->web($order);        return $globalPay->send();        // 如果设置了 `_only_args` 为 true,则应用以下办法获取所有的参数        // var_dump($globalPay->getContent());    }    public function wap()    {        $order = [            'out_trade_no' => time(),            'subject' => '交易 alex',            'currency' => 'JPY',            'rmb_fee' => 5.45,            'trade_information' => json_encode([                'business_type' => 4,                'goods_info' => '交易费用^1',                'total_quantity' => 1            ], 256),            'hb_fq_param' => [                'num' => 3,  // 花呗分期分期数,只反对 3、6、12 期                // 只有 is_has_household 为 true, is_seller_percent 能力设置为 true                'is_has_household' => false,  // 是否领有出资户,只有领有出资户,商家能力贴息,否则只能用户贴息                'is_seller_percent' => false,  // 是否商家贴息                // 花呗分期开启订单传参贴息流动(不反对 PC 领取,无论是国内还是国内的交易都不反对)                // 因而相比 app 领取,不能传递 is_order_subsidy 参数            ],            // '_only_args' => true  // 只须要返回参数模式时减少        ];        $globalPay = GlobalPay::alipay($this->config)->wap($order);        return $globalPay->send();        // 如果设置了 `_only_args` 为 true,则应用以下办法获取所有的参数        // var_dump($globalPay->getContent());    }    public function app()    {        $order = [            'out_trade_no' => time(),            'subject' => '交易 alex',            'currency' => 'JPY',            'rmb_fee' => 3.45,            'trade_information' => json_encode([                'business_type' => 4,                'goods_info' => '交易费用^1',                'total_quantity' => 1            ], 256),            'hb_fq_param' => [                'num' => 3,  // 花呗分期分期数,只反对 3、6、12 期                // 只有 is_has_household 为 true, is_seller_percent 能力设置为 true,否则 is_seller_percent 只能设置为 false                'is_has_household' => false,  // 是否领有出资户,只有领有出资户,商家能力贴息,否则只能用户贴息                'is_seller_percent' => false,  // 是否商家贴息, true 为商家贴息, false 为用户贴息                'is_order_subsidy' => false,  // 是否开启订单传参贴息流动                // 出资户贴息和订单传参贴息只能容许一个为 true            ],        ];        $globalPay = GlobalPay::alipay($this->config)->app($order);        $content = $globalPay->getContent();        var_dump($content);    }    public function find()    {        // out_trade_no 和 trade_no 参数能够同时含有,也能够二选一        $order = [            'out_trade_no' => 'alex_1629950066',            // 'trade_no' => '2021082622001364941434754996',            'is_hbfq' => true,  // 该笔订单是否为花呗分期领取,订单查问进去的后果会含有 hb_fq_num 参数,不是花呗分期订单则没有这个参数        ];        $globalPay = GlobalPay::alipay($this->config)->find($order);        var_dump($globalPay->toArray());    }    public function refund()    {        // 花呗分期退款和非花呗分期退款操作流程统一        $order = [            'out_return_no' => 'alex_refund_' . time(),            'out_trade_no' => 'alex_1629950066',            'return_rmb_amount' => 3.45,            'currency' => 'JPY',            'reason' => '退款测试',            // 'is_sync' => 'N',  // 如果 is_sync => N 则开启异步告诉,否则不开启异步告诉,不开启异步告诉 notify_url 参数将会生效(不须要开启时,则不须要设置)            // 'notify_url' => 'http://api.demo.com:8016/v2/alipay/forexNotify',  // $order['notify_url'] 设置了,则应用 $order['notify_url'] 的值,否则应用配置文件中的 notify_url 参数            // 'type' => 'pc',  // 如果是网站领取,则须要设置 type 参数为 pc,手机浏览器或支付宝钱包领取时,不须要设置        ];        $globalPay = GlobalPay::alipay($this->config)->refund($order);        var_dump($globalPay->toArray());    }    public function return()    {        $data = GlobalPay::alipay($this->config)->verify();    }    public function notify()    {        $globalPay = GlobalPay::alipay($this->config);        try {            $data = $globalPay->verify();  // 验签            // 倡议必须对以下几个参数进行业务逻辑验证            $outTradeNo = $data->get('out_trade_no');  // 商户须要验证该告诉数据中的 out_trade_no 是否为商户零碎中创立的订单号。            $tradeStatus = $data->get('trade_status');  // 在支付宝的业务告诉中,只有交易告诉状态为 TRADE_FINISHED 时,支付宝才会认定为买家付款胜利。            $totalFee = $data->get('total_fee');  // 该笔订单的总金额。申请时对应的参数,原样告诉回来。(外币金额)            Log::debug('GlobalPay Notify ===> ', $data->all());        } catch (\Exception $exception) {            Log::error('异步告诉异样 ===> ' . $exception->getMessage());            return $globalPay->fail()->send();  // 其余框架            // return $globalPay->fail();  // Laravel 框架能够间接这样        }        return $globalPay->success()->send();  // 其余框架        // return $globalPay->success();  //  Laravel 框架能够间接这样    }    /**     * 获取花呗分期计费状况     */    public function getHbFqCost()    {        $totalAmount = 100.88;        // 只须要获取 3 6 12 期绝对应的还款数        // $globalPay = GlobalPay::alipay($this->config)->getHbFqCost($totalAmount);        // 获取 3 6 12 期绝对应到还款数且显示出每一期的还款状况(用户承当所有的手续费)        // $globalPay = GlobalPay::alipay($this->config)->getHbFqCost($totalAmount, true);        // 获取 3 6 12 期绝对应到还款数且显示出每一期的还款状况(商家承当所有的手续费)        $globalPay = GlobalPay::alipay($this->config)->getHbFqCost($totalAmount, true, true);        var_dump($globalPay->toArray());    }}

LICENSE

MIT