标签

Honeymoon - Thomas Ng

归档

近期文章

支付宝转账到支付宝账户- yansongda/pay实例

本文环境 PHP7.3,Laravel6.0 不懂的可以评论或联系我邮箱:owen@owenzhang.com 著作权归OwenZhang所有。商业转载请联系OwenZhang获得授权,非商业转载请注明出处。

yansongda/pay引入项目中

composer require yansongda/pay

开通功能

  • 登录https://open.alipay.com/
  • 转账到支付宝账户
    支付宝转账到支付宝账户- yansongda/pay实例插图

转账到支付宝账户

/**
     * @notes : 帐户转账
     * https://opendocs.alipay.com/open/01zsdq?pathHash=9f308cb1
     * @param int    $alipayUserId 支付宝的会员ID
     * @param string $orderNo      订单号
     * @param float  $payMoney     订单金额,单位为元,精确到小数点后两位
     * @return array
     * @author: OwenZhang
     * @time  : 2023/4/11 15:02
     */
    public function transfer(int $alipayUserId, string $orderNo, float $payMoney)
    {
        $appEnv    = env('APP_ENV', 'dev');
        $redisKey  = 'payConfig:' . $appEnv;
        $redisData = Redis::get($redisKey);
        $payKey    = ($appEnv == 'dev') ? 'alipay-sh' : 'alipay';
        if (!$redisData) {
            $payConfig = self::payConfig($payKey);
            $redis     = Redis::set($redisKey, json_encode($payConfig, true), 1800);
        } else {
            $payConfig = json_decode($redisData, true);
        }

        // 使用公钥证书模式,请配置下面两个参数,同时修改ali_public_key为以.crt结尾的支付宝公钥证书路径,如(./cert/alipayCertPublicKey_RSA2.crt)
//        $isdir                            = app_path() . "/extend/cert/alipay/";//证书位置;绝对路径
//        $payConfig['app_cert_public_key'] = $isdir . 'appPublicCert.crt'; //应用公钥证书路径
//        $payConfig['alipay_root_cert']    = $isdir . 'alipayRootCert.crt'; //支付宝根证书路径
//        $payConfig['log']  = [
//            'file'     => './logs/alipay.log',
//            'level'    => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
//            'type'     => 'single', // optional, 可选 daily.
//            'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
//        ];
//        $payConfig['http'] = [
//            'timeout'         => 5.0,
//            'connect_timeout' => 5.0,
//            // 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
//        ];
        if ($appEnv == 'dev') {
            $payConfig['mode'] = 'dev'; // optional,设置此参数,将进入沙箱模式
            $alipayUserId      = 208823395231;
        }

        //订单信息
        $data = [
            'out_biz_no'   => $orderNo,//商户订单号,内部订单号
            'trans_amount' => $payMoney,  //订单总金额,单位为元,精确到小数点后两位,
            'biz_scene'    => 'DIRECT_TRANSFER',  //描述特定的业务场景,可传的参数如下:DIRECT_TRANSFER:单笔无密转账到支付宝,B2C现金红包PERSONAL_COLLECTION:C2C现金红包-领红包
            'product_code' => 'TRANS_ACCOUNT_NO_PWD',  //业务产品码,单笔无密转账到支付宝账户固定为:TRANS_ACCOUNT_NO_PWD;收发现金红包固定为:STD_RED_PACKET;
            'remark'       => 'owen提现-单笔转账',//业务备注
            'order_title'  => 'owen提现',//转账业务的标题,用于在支付宝用户的账单里显示
            'payee_info'   => [
                'identity'      => $alipayUserId,//参与方的唯一标识'208823395231'
                'identity_type' => 'ALIPAY_USER_ID',//参与方的标识类型,目前支持如下类型:1、ALIPAY_USER_ID 支付宝的会员ID2、ALIPAY_LOGON_ID:支付宝登录号,支持邮箱和手机号格式3、ALIPAY_OPEN_ID:支付宝openid
            ],//收款方信息
        ];

        try {
            $result = Pay::alipay($payConfig)->transfer($data)->toArray();
            //array(6) {
            //["code"]=>
            //string(5) "10000"
            //["msg"]=>
            //string(7) "Success"
            //["order_id"]=>
            //string(32) "2023042230018719111"//支付宝转账订单号
            //["out_biz_no"]=>
            //string(32) "vYjTkuCn6o32PdDkuwMfi9jFs"//商户订单号
            //["pay_fund_order_id"]=>
            //string(32) "202304201100230018886889"//支付宝支付资金流水号
            //["status"]=>
            //string(7) "SUCCESS"
            //}
            if (!empty($result['code'])) {
                if (($result['code'] == 10000) && ($result['status'] == 'SUCCESS')) {
                    $data = [
                        'order_id'          => $result['order_id'],
                        'pay_fund_order_id' => $result['pay_fund_order_id'],
                    ];
                    return ['code' => 200, 'msg' => $result['msg'], 'data' => $data];
                }
            }

            return ['code' => 400, 'msg' => $result['msg']];
        } catch (\Exception $e) {
            return ['code' => 400, 'msg' => $e->getMessage()];
        }
    }

Buy me a cup of coffee 🙂

觉得对你有帮助,就给我打赏吧,谢谢!

微信赞赏码链接,点击跳转:

https://www.owenzhang.com/wechat_reward.png

支付宝转账到支付宝账户- yansongda/pay实例插图1
Tags: