支付寶證書簽名 PHP SDK


PHP 接入支付寶證書方式簽名以及驗簽

支付寶在 2019.10.25 日左右更新了新的 PHP SDK (v4.1.0)。 之前的 PHP SDK(v3.4.2) 僅支持公鑰方式加簽。這次更新之后 PHP SDK 也可以使用證書進行簽名和驗簽了。

支付寶官方 SDK 下載地址

下載解壓 並將文件夾中的 aop 文件夾 直接復制到項目中你想要放到文件夾里,例如 extend
文件夾 (為了測試 crt 證書文件也已經放到同目錄下 cert 目錄中了)
在這里插入圖片描述
先修正 SDK 中的1個小錯誤:AopCertClient.php 中
478 行左右 有一個檢查是否為空的方法
在這里插入圖片描述
修改為

	if (method_exists($request, 'getApiVersion')){
        $iv = $request->getApiVersion();
    }else{
        $iv = $this->apiVersion;
    }

   
   
  
  
          

引入文件

	require_once EXTEND_PATH.'aop/AopCertClient.php';
	require_once EXTEND_PATH.'aop/AopCertification.php';
	require_once EXTEND_PATH.'aop/request/AlipayTradeQueryRequest.php';
	require_once EXTEND_PATH.'aop/request/AlipayTradeWapPayRequest.php';
	require_once EXTEND_PATH.'aop/request/AlipayOpenOperationOpenbizmockBizQueryRequest.php';

   
   
  
  
          

從 aop/test/ 目錄下 找下 AopCertClientTest.php (因為是使用證書進行簽名,如果是使用公鑰進行簽名,就應該參考 AopClientTest.php 文件,不做贅述)直接復制相關代碼進行修改比如 我復制的就是

	//1、execute 使用
	$aop = new AopCertClient ();
	$appCertPath = "應用證書路徑(要確保證書文件可讀),例如:/home/admin/cert/appCertPublicKey.crt";
	$alipayCertPath = "支付寶公鑰證書路徑(要確保證書文件可讀),例如:/home/admin/cert/alipayCertPublicKey_RSA2.crt";
	$rootCertPath = "支付寶根證書路徑(要確保證書文件可讀),例如:/home/admin/cert/alipayRootCert.crt";
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">gatewayUrl</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'https://openapi.alipay.com/gateway.do'</span><span class="token punctuation">;</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">appId</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'你的appid'</span><span class="token punctuation">;</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">rsaPrivateKey</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'你的應用私鑰'</span><span class="token punctuation">;</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">alipayrsaPublicKey</span> <span class="token operator">=</span> <span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">getPublicKey</span><span class="token punctuation">(</span><span class="token variable">$alipayCertPath</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//調用getPublicKey從支付寶公鑰證書中提取公鑰</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">apiVersion</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'1.0'</span><span class="token punctuation">;</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">signType</span> <span class="token operator">=</span> <span class="token single-quoted-string string">'RSA2'</span><span class="token punctuation">;</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">postCharset</span><span class="token operator">=</span><span class="token single-quoted-string string">'utf-8'</span><span class="token punctuation">;</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">format</span><span class="token operator">=</span><span class="token single-quoted-string string">'json'</span><span class="token punctuation">;</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">isCheckAlipayPublicCert</span> <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span><span class="token comment">//是否校驗自動下載的支付寶公鑰證書,如果開啟校驗要保證支付寶根證書在有效期內</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">appCertSN</span> <span class="token operator">=</span> <span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">getCertSN</span><span class="token punctuation">(</span><span class="token variable">$appCertPath</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//調用getCertSN獲取證書序列號</span>
<span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">alipayRootCertSN</span> <span class="token operator">=</span> <span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">getRootCertSN</span><span class="token punctuation">(</span><span class="token variable">$rootCertPath</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//調用getRootCertSN獲取支付寶根證書序列號</span>

<span class="token variable">$request</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AlipayTradeQueryRequest</span> <span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$request</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token function">setBizContent</span><span class="token punctuation">(</span><span class="token double-quoted-string string">"{"</span> <span class="token punctuation">.</span>
    <span class="token double-quoted-string string">"\"out_trade_no\":\"20150320010101001\","</span> <span class="token punctuation">.</span>
    <span class="token double-quoted-string string">"\"trade_no\":\"2014112611001004680 073956707\","</span> <span class="token punctuation">.</span>
    <span class="token double-quoted-string string">"\"org_pid\":\"2088101117952222\","</span> <span class="token punctuation">.</span>
    <span class="token double-quoted-string string">"      \"query_options\":["</span> <span class="token punctuation">.</span>
    <span class="token double-quoted-string string">"        \"TRADE_SETTE_INFO\""</span> <span class="token punctuation">.</span>
    <span class="token double-quoted-string string">"      ]"</span> <span class="token punctuation">.</span>
    <span class="token double-quoted-string string">"  }"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$result</span> <span class="token operator">=</span> <span class="token variable">$aop</span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token property">execute</span> <span class="token punctuation">(</span> <span class="token variable">$request</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token variable">$result</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

因為我要用的是 單筆轉賬到支付寶賬戶的接口。
所以 上面的代碼要修改兩個地方。

	$request = new AlipayFundTransToaccountTransferRequest ();
	// 官方示例 切記要自己修改
	$request->setBizContent("{" .
	"\"out_biz_no\":\"3142321423432\"," .
	"\"payee_type\":\"ALIPAY_LOGONID\"," .
	"\"payee_account\":\"abc@sina.com\"," .
	"\"amount\":\"12.23\"," .
	"\"payer_show_name\":\"上海交通卡退款\"," .
	"\"payee_real_name\":\"張三\"," .
	"\"remark\":\"轉賬備注\"" .
	" }");

   
   
  
  
          

修改完成之后,就可以跑代碼進行測試了。

                                </div>

原文:https://blog.csdn.net/csd465038717/article/details/102748277


免責聲明!

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



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