首頁 >後端開發 >php教程 >支付寶APP之php後台簽名以及驗簽實作方法

支付寶APP之php後台簽名以及驗簽實作方法

小云云
小云云原創
2018-03-14 11:29:053717瀏覽

簽名和驗簽在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(舊) 
204&articleId=105465&docType=1(舊) 
#https://docs.open

1 .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後台簽名以及驗簽實作方法



三、驗簽 支付寶APP之php後台簽名以及驗簽實作方法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';
    }

後記: 支付寶APP之php後台簽名以及驗簽實作方法之前一直驗簽失敗,找了好久,終於解決了。文件中說,驗簽用的是支付寶公鑰,並不是RSA2公鑰,這裡要特別注意,不要用錯了 


支付寶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
    1 .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字符串


支付寶APP之php後台簽名以及驗簽實作方法

    //公共参数
    $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 支付成功后会有返回字符串,客服端也需要判断,这里不罗嗦,如下图: 
支付寶APP之php後台簽名以及驗簽實作方法 
下一步就是在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公钥,这里需要特别注意,不要用错了 
支付寶APP之php後台簽名以及驗簽實作方法

请看截图: 
支付寶APP之php後台簽名以及驗簽實作方法

相关推荐:

支付宝支付之php后台签名实现方法


以上是支付寶APP之php後台簽名以及驗簽實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn