tp5对接支付宝支付简单集成

对于每个刚开始工作的新手来说,无论支付宝支付还是微信支付都是跑不掉的一个小门槛。

在加上本人比较技术比较渣(比较懒导致的),不太喜欢引用那么大的SDK,于是就简单集成了一下支付宝的支付。

但也只是只有支付而已哦,其他的一些功能还是自己用自己在集成吧,嘻嘻(#^.^#)还是懒。

废话不多说了,直接上代码:

/**
 * 支付宝支付
 */
class  Alipay
{
    private $config =[ 
        "app_id"        => "************",   //支付宝APPid
        "rsaPrivateKey" => "************",   //支付宝私钥
        "rsaPublicKey"  => "************",   //支付宝公钥
        "charset"       => "utf-8",
        "sign_type"     => "RSA2",
        "version"       => "1.0",
    ];
    private $submitUrl = "https://openapi.alipay.com/gateway.do" ;//提交地址
    public $calltype = "app";//pc电脑端 app 手机和app端公用
    public $submit_auto=true;
    
    public function index($data)
    {
        $calltype=$this->calltype;
        return $this->$calltype($data);
    } 
    public function app($data)
    {
        $return_url=$data['return_url'];
        $notify_url=$data['notify_url'];
        $subject=$data['subject'];
        $order_sn=$data['order_sn'];
        $total=$data['total'];

        $biz_content=[
            'body'=>'',
            'subject'=>$subject,
            'out_trade_no'=>$order_sn,
            'timeout_express'=>'30m',
            'total_amount'=>$total,
            'product_code'=>'QUICK_MSECURITY_PAY',
        ];
        $postdata=[
            'app_id'=>$this->config['app_id'],
            'method'=>'alipay.trade.app.pay',
            'format'=>'json',
            'charset'=>$this->config['charset'],
            'sign_type'=>$this->config['sign_type'],
            'sign'=>'',
            'timestamp'=>date('Y-m-d H:i:s'),
            'version'=>'1.0',
            'notify_url'=>$notify_url,
            'biz_content'=>json_encode($biz_content),
        ];

        $signdata=$this->alisign($postdata);
        $str=$this->keyandvalStr($signdata,1);
        //返回链接不能带官方https链接
        return $str;
        
    }
    public function pc($data)
    {
        $return_url=$data['return_url'];
        $notify_url=$data['notify_url'];
        $biz_content=[
            "total_amount"=>$data['total'],
            "product_code"=>"FAST_INSTANT_TRADE_PAY",
            "subject"=>$data['subject'],
            "out_trade_no"=>$data['order_sn'],
            "goods_type"=>1,//商品类型 0虚拟商品 1实物商品
        ];

        $post=[
            'app_id'=>$this->config['app_id'],
            'method'=>'alipay.trade.page.pay',
            'format'=>'JSON',
            'return_url'=>$return_url,
            'charset'=>$this->config['charset'],
            'sign_type'=>$this->config['sign_type'],
            // 'sign'=>$sign,
            'timestamp'=>date('Y-m-d H:i:s'),
            'version'=>$this->config['version'],
            'notify_url'=>$notify_url,
            'biz_content'=>json_encode($biz_content),
        ];

        $signdata=$this->alisign($post);

        $html=$this->formsubmithtml($this->submitUrl,$signdata);

        return $html;
    }
    public function mobile($data)
    {
        $return_url=$data['return_url'];
        $notify_url=$data['notify_url'];
        $biz_content=[
            "total_amount"=>$data['total'],
            "product_code"=>"QUICK_WAP_WAY",
            "subject"=>$data['subject'],
            "out_trade_no"=>$data['order_sn'],
            "goods_type"=>1,//商品类型 0虚拟商品 1实物商品
        ];

        $post=[
            'app_id'=>$this->config['app_id'],
            'method'=>'alipay.trade.wap.pay',
            'format'=>'JSON',
            'return_url'=>$return_url,
            'charset'=>$this->config['charset'],
            'sign_type'=>$this->config['sign_type'],
            // 'sign'=>$sign,
            'timestamp'=>date('Y-m-d H:i:s'),
            'version'=>$this->config['version'],
            'notify_url'=>$notify_url,
            'biz_content'=>json_encode($biz_content),
        ];

        $signdata=$this->alisign($post);
        $str=$this->keyandvalStr($signdata,1);

        $url="https://openapi.alipay.com/gateway.do?".$str;

        return $url;
    }
    public function alisign($data)
    {
        $rsaPrivateKey=$this->config['rsaPrivateKey'];
        $buff = "";
        ksort($data);
        $buff=$this->keyandvalStr($data);
        $str  = chunk_split($rsaPrivateKey, 64, "\n");
        $res = "-----BEGIN RSA PRIVATE KEY-----\n$str-----END RSA PRIVATE KEY-----\n";

        $sign=$this->ras2Sign($buff,$res);
        $data['sign']=$sign;
        return $data;
    }
    function keyandvalStr($data,$flg=0)
    {
        $buff="";
        foreach ($data as $k => $v) {
            if($flg!=0 && $v != "" && !is_array($v))
            {
                $v=urlencode($v);
                $buff .= $k . "=" . $v . "&";
            }else{
                if($k != "sign" && $v != "" && !is_array($v)){
                    $buff .= $k . "=" . $v . "&";
                }
            }
        }
        $buff = trim($buff, "&");
        return $buff;
    }
    function ras2Sign($buff,$res)
    {
        $sign='';
        openssl_sign($buff, $sign, $res, OPENSSL_ALGO_SHA256);
        $sign = base64_encode($sign);
        return $sign;
    }
    function formsubmithtml($action,$data)
    {
        $sHtml = "<form id='alipaysubmit' name='alipaysubmit' action='".$action."' method='POST'>";
        foreach ($data as $key => $value) {
            $val = str_replace("'","&apos;",$value);
            $sHtml.= "<input type='hidden' name='".$key."' value='".$val."'/>";     
        }
        $sHtml = $sHtml."<input type='submit' class='paysubmit' value='ok' ></form>";
        if($this->submit_auto==true)
        {
            $sHtml = $sHtml."<script>document.forms['alipaysubmit'].submit();</script>";
        }
        
        return $sHtml;
    }

}

调用方法:

use pay\Alipay;

    $callD=[
        'return_url' => '支付完成跳转路径',
        'notify_url' => '回调路径',
        'total'      => '支付总额',
        'subject'    => '支付说明',
        'order_sn'   => '生成订单号',
    ];
    $url=$this->Alipay($callD);


    public function Alipay($data,$flg=true)
    {
        $pay = new Alipay();
        $pay->calltype='app';
        $pay->submit_auto=$flg;
        $pay=$pay->index($data);
        return $pay;
    }

以上即是本次分享的内容。

感谢您的观看。

2019年05月10日

转载于:https://www.cnblogs.com/YFYQ/p/10845426.html

<?php /**  * 支付宝支付  */ return [         //应用ID,您的APPID。         'app_id' => "",         //商户私钥, 请把生成的私钥文件中字符串拷贝在此         'merchant_private_key' => "",         //异步通知地址         'notify_url' => "",         //同步跳转         'return_url' => "",         //编码格式         'charset' => "UTF-8",         //签名方式         'sign_type'=>"RSA2",         //支付宝网关         'gatewayUrl' => "https://openapi.alipay.com/gateway.do",         //支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。         'alipay_public_key' => "", ];ThinkPHP5 支付宝支付扩展库, 包括手机网站支付、电脑网站支付、支付查询、退款、退款查询、对账单等。用法电脑网站支付 Pagepay.php调用 \alipay\Pagepay::pay($params) 即可手机网站支付 Wappay.php调用 \alipay\Wappay::pay($params) 即可交易查询接口 Query.php调用 \alipay\Query::exec($query_no) 即可交易退款接口 Refund.php调用 \alipay\Refund::exec($params) 即可退款统一订单查询 RefundQuery.php调用 \alipay\RefundQuery::exec($params) 即可交易关闭接口 Close.php调用 \alipay\Close::exec($query_no) 即可查询账单下载地址接口 Datadownload.php调用 \alipay\Datadownload::exec($bill_type, $bill_date) 即可验签 Notify.php调用 \alipay\Notify::checkSign($params) 即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值