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日


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM