支付寶APP支付-php后台簽名以及驗簽


簽名和驗簽在APP端也是可以完成的,考慮到安全問題,簽名和驗簽最好在服務端完成,支付寶官方建議也是這樣的,所以php端需要把簽名好的參數傳給APP端。詳細步驟見正文: 
一、 下載php支付寶sdk 
https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.eCtVsf&treeId=54&articleId=103419&docType=1 (舊) 
https://docs.open.alipay.com/54/103419/(新) 
二、 查看支付寶App支付請求參數文檔,拼接請求參數,簽名 
App支付請求參數說明 
https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.wM4mV1&treeId=204&articleId=105465&docType=1(舊) 
https://docs.open.alipay.com/204/105465/(新) 
先是參數拼接生成簽名,再把前面的參數和簽名進行組裝。核心代碼如下:

   require_once '/Alipay/aop/AopClient.php';
    $private_path =  "/Alipay/key/rsa_private_key.pem";//私鑰路徑
    //構造業務請求參數的集合(訂單信息)
    $content = array();
    $content['subject'] = "商品的標題/交易標題/訂單標題/訂單關鍵字等";
    $content['out_trade_no'] = "商戶網站唯一訂單號";
    $content['timeout_express'] = "該筆訂單允許的最晚付款時間";
    $content['total_amount'] = "訂單總金額(必須定義成浮點型)";
    $content['product_code'] = "QUICK_MSECURITY_PAY";/銷售產品碼,固定值
    $con = json_encode($content);//$content是biz_content的值,將之轉化成json字符串

 

    //公共參數
    $Client = new \AopClient();//實例化支付寶sdk里面的AopClient類,下單時需要的操作,都在這個類里面
    $param['app_id'] = '支付寶分配給開發者的應用ID';
    $param['method'] = 'alipay.trade.app.pay';//接口名稱,固定值
    $param['charset'] = 'utf-8';//請求使用的編碼格式
    $param['sign_type'] = 'RSA2';//商戶生成簽名字符串所使用的簽名算法類型
    $param['timestamp'] = date("Y-m-d Hi:i:s");//發送請求的時間
    $param['version'] = '1.0';//調用的接口版本,固定為:1.0
    $param['notify_url'] = '支付寶服務器異步回調地址';
    $param['biz_content'] = $con;//業務請求參數的集合,長度不限,json格式,即前面一步得到的

    $paramStr = $Client->getSignContent($param);//組裝請求簽名參數
    $sign = $Client->alonersaSign($paramStr, $private_path, 'RSA2', true);//生成簽名
    $param['sign'] = $sign;
    $str = $Client->getSignContentUrlencode($param);//最終請求參數

 

請求的說明,支付寶說的很清楚,這里再重新附上截圖: 
這里寫圖片描述

三、驗簽 
App 支付成功后會有返回字符串,客服端也需要判斷,這里不羅嗦,如下圖: 
這里寫圖片描述 
下一步就是在php服務端進行驗簽,支付寶異步會以post方式返回數據到異步回調地址:

   function notify()
    {
        require_once('/alipay/aop/AopClient.php');
        $aop = new \AopClient;
        //$public_path = "key/rsa_public_key.pem";//公鑰路徑
        $aop->alipayrsaPublicKey = "支付寶公鑰";
        //此處驗簽方式必須與下單時的簽名方式一致
        $flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");
        //驗簽通過后再實現業務邏輯,比如修改訂單表中的支付狀態。
        /**
         *  ①驗簽通過后核實如下參數out_trade_no、total_amount、seller_id
         *  ②修改訂單表
        **/
        //打印success,應答支付寶。必須保證本界面無錯誤。只打印了success,否則支付寶將重復請求回調地址。
        echo 'success';
    }

 

后記: 
之前一直驗簽失敗,找了好久,終於解決了。文檔中說,驗簽用的是支付寶公鑰,並不是RSA2公鑰,這里需要特別注意,不要用錯了 
這里寫圖片描述

請看截圖: 
這里寫圖片描述


免責聲明!

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



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