官方php版(php中文版)

本文目錄一覽:

php 支付寶介面官方給的md5簽名版本和rsa簽名版本的區別

雖然支付寶官方還未提供相關SDK,PHP確實可以實現RSA方式的簽名,這點其實很重要,由於不熟悉,在遇到困難的時候,經常會不由自主地想到是否PHP不支持RSA簽名,乾脆用MD5得了,這樣就沒有了前進的動力。其實說穿了MD5和RSA簽名,不同的只是簽名方式的區別,其他的都一樣,因此我這裡主要說一下如何用RSA進行簽名和驗簽。

首先你需要準備下面的東西:

php的openssl擴展里已經封裝好了驗簽的方法openssl_verify。

如果在Windows下的php.ini需要開啟Openssl模塊: extension=php_openssl.dll

商戶私鑰:

即RSA私鑰,按照手冊,按以下方式生成:

openssl genrsa -out rsa_private_key.pem 1024

商戶公鑰:

即RSA私鑰,按照手冊,按以下方式生成:

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

生成之後,按照手冊的說明,需要在簽約平台上傳公鑰,需要注意的是,上傳的時候需要把所有的注釋和換行都去掉。

另外手冊中還有如下命令:

openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt

該命令將RSA私鑰轉換成PKCS8格式,對於PHP來說,不需要。

支付寶公鑰:

根據手冊,在簽約平台獲得。

如果你直接複製下來的話,會得到一個字元串,需要進行下面的轉換;

1)把空格變成換行

2)添加註釋

比如你複製下來的公鑰是:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRBMjkaBznjXk06ddsL751KyYt

ztPFg0D3tu7jLqCacgqL+lbshIaItDGEXAMZmKa3DV6Wxy+l48YMo0RyS+dWze4M

UmuxHU/v6tiT0ZTXJN3EwrjCtCyyttdv/ROB3CkheXnTKB76reTkQqg57OWW+m9j

TCoccYMDXEIWYTs3CwIDAQAB,那轉換之後為:

—–BEGIN PUBLIC KEY—–

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRBMjkaBznjXk06ddsL751KyYt

ztPFg0D3tu7jLqCacgqL+lbshIaItDGEXAMZmKa3DV6Wxy+l48YMo0RyS+dWze4M

UmuxHU/v6tiT0ZTXJN3EwrjCtCyyttdv/ROB3CkheXnTKB76reTkQqg57OWW+m9j

TCoccYMDXEIWYTs3CwIDAQAB

—–END PUBLIC KEY—–

把公鑰保存在文件里。

注意這個是2048位的公鑰應該是9行或者10行,不能為1行,不然PHP的openssl_pkey_get_public無法讀取,pub_key_id的結果為false,如果沒有—–BEGIN PUBLIC KEY—– 和 —–END PUBLIC KEY—– 可以自己加上,最後保存到一個rsa_public_key.pem文件中。

好了,現在已經有了所有的東西,先看簽名函數:

複製代碼

1 ?php

2 /**

3 * 簽名字元串

4 * @param $prestr 需要簽名的字元串

5 * return 簽名結果

6 */

7 function rsaSign($prestr) {

8 $public_key= file_get_contents(‘rsa_private_key.pem’);

9 $pkeyid = openssl_get_privatekey($public_key);

10 openssl_sign($prestr, $sign, $pkeyid);

11 openssl_free_key($pkeyid);

12 $sign = base64_encode($sign);

13 return $sign;

14 }

15 ?

複製代碼

注意點:

1.$prestr的內容和MD5一樣(參見手冊,但不包含最後的MD5密碼)

2.簽名用商戶私鑰

3.最後的簽名,需要用base64編碼

4.這個函數返回的值,就是這次請求的RSA簽名。

驗簽函數:

複製代碼

1 ?php

2 /**

3 * 驗證簽名

4 * @param $prestr 需要簽名的字元串

5 * @param $sign 簽名結果

6 * return 簽名結果

7 */

8 function rsaVerify($prestr, $sign) {

9 $sign = base64_decode($sign);

10 $public_key= file_get_contents(‘rsa_public_key.pem’);

11 $pkeyid = openssl_get_publickey($public_key);

12 if ($pkeyid) {

13 $verify = openssl_verify($prestr, $sign, $pkeyid);

14 openssl_free_key($pkeyid);

15 }

16 if($verify == 1){

17 return true;

18 }else{

19 return false;

20 }

21 }

22 ?

複製代碼

注意點:

1.$prestr的內容和MD5一樣(參見手冊)

2.$sign是支付寶介面返回的sign參數用base64_decode解碼之後的二進位

3.驗簽用支付寶公鑰

4.這個函數返回一個布爾值,直接告訴你,驗簽是否通過

支付寶官方提供的PHP版SDK demo中只對MD5加密方式進行了處理,但android 端和ios端 請求支付寶加密方式只能用RSA加密演算法,這時服務端PHP就無法驗證簽名了,所以需要對demo進行一些修改。

1、修改alipay_notify.class.php文件

verifyNotify 函數第46行

$isSign = $this-getSignVeryfy($_POST, $_POST[“sign”]);

改成

$isSign = $this-getSignVeryfy($_POST, $_POST[“sign”], $_POST[“sign_type”]);

verifyReturn 函數第83行

$isSign = $this-getSignVeryfy($_GET, $_GET[“sign”]);

改成

$isSign = $this-getSignVeryfy($_GET, $_GET[“sign”], $_GET[“sign_type”]);

getSignVeryfy 函數 116行

function getSignVeryfy($para_temp, $sign) {

改成

function getSignVeryfy($para_temp, $sign, $sign_type) {

getSignVeryfy 函數 127行

switch (strtoupper(trim($this-alipay_config[‘sign_type’]))) {

case “MD5” :

$isSgin = md5Verify($prestr, $sign, $this-alipay_config[‘key’]);

break;

default :

$isSgin = false;

}

改成

switch (strtoupper(trim($sign_type))) {

case “MD5” :

$isSgin = md5Verify($prestr, $sign, $this-alipay_config[‘key’]);

break;

case “RSA” :

$isSgin = rsaVerify($prestr, $sign);

break;

default :

$isSgin = false;

}

2、新建一個alipay_rsa.function.php文件

複製代碼

1 ?php

2 /* *

3 * RSA

4 * 詳細:RSA加密

5 * 版本:3.3

6 * 日期:2014-02-20

7 * 說明:

8 * 以下代碼只是為了方便商戶測試而提供的樣例代碼,商戶可以根據自己網站的需要,按照技術文檔編寫,並非一定要使用該代碼。

9 * 該代碼僅供學習和研究支付寶介面使用,只是提供一個參考。

10 */

11 /**

12 * 簽名字元串

13 * @param $prestr 需要簽名的字元串

14 * return 簽名結果

15 */

16 function rsaSign($prestr) {

17 $public_key= file_get_contents(‘rsa_private_key.pem’);

18 $pkeyid = openssl_get_privatekey($public_key);

19 openssl_sign($prestr, $sign, $pkeyid);

20 openssl_free_key($pkeyid);

21 $sign = base64_encode($sign);

22 return $sign;

23 }

24 /**

25 * 驗證簽名

26 * @param $prestr 需要簽名的字元串

27 * @param $sign 簽名結果

28 * return 簽名結果

29 */

30 function rsaVerify($prestr, $sign) {

31 $sign = base64_decode($sign);

32 $public_key= file_get_contents(‘rsa_public_key.pem’);

33 $pkeyid = openssl_get_publickey($public_key);

34 if ($pkeyid) {

35 $verify = openssl_verify($prestr, $sign, $pkeyid);

36 openssl_free_key($pkeyid);

37 }

38 if($verify == 1){

39 return true;

40 }else{

41 return false;

42 }

43 }

44 ?

php官方網址是什麼

PHP網站是用PHP語言寫的服務端腳本做成的網站。基本上沒什麼可視化編輯軟體,最多也就是能編HTML部份。PHP部份還是直接編輯代碼。編輯代碼個人覺得 UltraEdit 比較好用。

官方出來說一下thinkphp3.23究竟支持哪幾個php的版本

框架本身沒有什麼特別模塊要求,具體的應用系統運行環境要求視開發所涉及的模塊。ThinkPHP底層運行的內存消耗極低,而本身的文件大小也是輕量級的,因此不會出現空間和內存佔用的瓶頸。

PHP版本要求

PHP5.3以上版本(注意:PHP5.3dev版本和PHP6均不支持)

支持的伺服器和資料庫環境

支持Windows/Unix伺服器環境

可運行於包括Apache、IIS和nginx在內的多種WEB伺服器和模式

支持Mysql、MsSQL、PgSQL、Sqlite、Oracle、Ibase、Mongo以及PDO等多種資料庫和連接

對於剛剛接觸PHP或者ThinkPHP的新手,我們推薦使用集成開發環境WAMPServer(wampserver是一個集成了Apache、PHP和MySQL的開發套件,而且支持不同PHP版本、MySQL版本和Apache版本的切換)來使用ThinkPHP進行本地開發和測試。

原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/128525.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-10-03 23:25
下一篇 2024-10-03 23:25

相關推薦

  • Python官網中文版:解決你的編程問題

    Python是一種高級編程語言,它可以用於Web開發、科學計算、人工智慧等領域。Python官網中文版提供了全面的資源和教程,可以幫助你入門學習和進一步提高編程技能。 一、Pyth…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python中文版下載官網的完整指南

    Python是一種廣泛使用的編程語言,具有簡潔、易讀易寫等特點。Python中文版下載官網是Python學習和使用過程中的重要資源,本文將從多個方面對Python中文版下載官網進行…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若伺服器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • PHP與Python的比較

    本文將會對PHP與Python進行比較和對比分析,包括語法特性、優缺點等方面。幫助讀者更好地理解和使用這兩種語言。 一、語法特性 PHP語法特性: <?php // 簡單的P…

    編程 2025-04-27
  • PHP版本管理工具phpenv詳解

    在PHP項目開發過程中,我們可能需要用到不同版本的PHP環境來試驗不同的功能或避免不同版本的兼容性問題。或者我們需要在同一台伺服器上同時運行多個不同版本的PHP語言。但是每次手動安…

    編程 2025-04-24
  • PHP數組去重詳解

    一、array_unique函數 array_unique是php中常用的數組去重函數,它基於值來判斷元素是否重複,具體使用方法如下: $array = array(‘a’, ‘b…

    編程 2025-04-24

發表回復

登錄後才能評論