php支付寶app支付後臺處理(老版)

以下代碼爲後臺處理部分,真實可用:哈哈哈哈哈,沒騙人,具體支付寶app支付的申請,簽約我就不說了,具體的去看官方文檔

--》https://docs.open.alipay.com/204

 public function create_signOp(){
        $pay_sn = $_POST['pay_sn'];
        if (!preg_match('/^\d{18}$/',$pay_sn)){
            output_error('該訂單不存在');
        }
        $mygoods=array();
        //合作身份者id,以2088開頭的16位純數字
        $mygoods['partner']="2088xxxxxxxxxx";
        //商家賬號
        $mygoods['seller_id']="[email protected]";
        $mygoods['service']="mobile.securitypay.pay";
        $mygoods['payment_type']="1";
        $mygoods['_input_charset']="utf-8";
        $mygoods['it_b_pay']="30m";
        //訂單號
        $mygoods['out_trade_no']=$pay['pay_sn'];
        //主題
        $mygoods['subject']=$pay['pay_sn'];
        //商品描述信息
        $mygoods['body']=$pay['pay_sn'];
        //商品價格
        $mygoods['total_fee']=$_order_info['order_amount'];
        //服務器端異步響應地址
        $mygoods['notify_url']= "";
        //排序
//        print_r($mygoods);
//        exit();
        $mygoods = $this->argSort($mygoods);
        //拼接
        $mystr = $this->createLinkstring($mygoods);
        //簽名
        $sign = $this->rsaSign($mystr);
        //對簽名進行urlencode轉碼
//        $sign ='TGsHKw4XLpQUq34YVIp4pxFnZkjCJMt09FJpBm56grRpRDgcwZRh94txZQAB94HxOd89XwTZqdncczrCcgXlPETcpuWDa70GBCAEkn8RtTs2t6UopDWcfU7ZT3/Evhsapgf58+zAS7x9lynYpw1JdoshKIgU5pnfS5vWC1VsbvU=';
        $sign = urlencode($sign);
//        $res = $this->verify($mystr,$sign);
//        var_dump($res);
//        exit();

        //生成最終簽名信息
        $mystr = $this->createstr($mygoods);
//        exit(json_encode(array('sign'=>$sign,'shopping'=>$mygoods)));
//        $orderInfor = $mystr."&sign=".'"'.$sign.'"'."&sign_type=".'"'.RSA.'"';
        $data=array();
        $data['status'] = 1;
        $data['sign'] = $sign;
        $data['pay_info'] = $mygoods;

        exit(json_encode($data));
    }
    function rsaSign($data, $private_key_path) {

        $private_key_path='/www/wwwroot/mall2/appinterface/control/rsa_private_key.pem';
        $priKey = file_get_contents($private_key_path);
        $res =  openssl_pkey_get_private($priKey);
        openssl_sign($data, $sign, $res);
        openssl_free_key($res);
        //base64編碼
        $sign = base64_encode($sign);
//        echo $sign;
        return $sign;
    }
    function createLinkstring($para) {
        $arg = "";
        while (list ($key, $val) = each ($para)) {
            $arg.=$key."=".$val."&";
        }
        //去掉最後一個&字符
        $arg = substr($arg,0,count($arg)-2);
        //如果存在轉義字符,那麼去掉轉義
        if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
        return $arg;
    }
    function createstr($para) {
        $arg = "";
        while (list ($key, $val) = each ($para)) {
            $arg.=$key."=".$val."&";
        }
        //去掉最後一個&字符
        $arg = substr($arg,0,count($arg)-2);
        //如果存在轉義字符,那麼去掉轉義
        if(get_magic_quotes_gpc()){$arg = stripslashes($arg);}
        return $arg;
    }
    function argSort($para) {
        ksort($para);
        reset($para);
        return $para;
    }
    function verify($data, $sign) {
        //讀取支付寶公鑰文件
        $pubKey = "/www/wwwroot/mall2/appinterface/control/rsa_public_key.pem";
        //轉換爲openssl格式密鑰
        $priKeys = file_get_contents($pubKey);
        $res = openssl_get_publickey($priKeys);
        //調用openssl內置方法驗籤,返回bool值
        $result = (bool)openssl_verify($data, base64_decode($sign), $res);
        //釋放資源
        openssl_free_key($res);
        //返回資源是否成功
        var_dump($result);
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章