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

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

Mar 14, 2018 am 11:29 AM
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(舊) 
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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

CakePHP 專案配置 CakePHP 專案配置 Sep 10, 2024 pm 05:25 PM

CakePHP 專案配置

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

CakePHP 日期和時間

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

CakePHP 檔案上傳

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

CakePHP 路由

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

討論 CakePHP

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 快速指南

See all articles