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: Hypertext Preprocessor,中文名:「超文本預處理器」)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。

php支付寶介面

登錄支付寶,然後有個商戶版的,進入申請雙功能介面,

然後下載下來的介麵包文件有很多語言的源碼

我們選擇PHP版的UFT-8

裡面包括一些文件

images文件里是支付寶相關的一些標誌的圖片,lib文件很重要,是整個介面的核心類文件;

alipay.config.php是相關參數的配置文件

alipayapi.php 是支付寶介面入口文件

notify_url.php 是伺服器非同步通知頁面文件;

return_url.php 是頁面跳轉同步通知文件;

按照開發文檔開發即可

?php

//這裡有一些教程 希望能幫到你

// 

?

望採納

php中支付寶介面怎麼做

下載介面代碼,之後根據裡面的代碼和技術文檔還有說明來做。

如果你根本就不會編程,那麼登陸支付寶的網站,在商家服務 合同列表 里的 申請集成,去提交申請吧。前提是你要已經是簽約商戶。

下載介面資料的地方,由於不能貼地址,所以文字告訴你。

登陸支付寶的網站,在商家服務 合同列表 文檔下載,進去就是。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/305028.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-01 11:06
下一篇 2025-01-01 11:06

相關推薦

  • PHP和Python哪個好找工作?

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

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

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

    編程 2025-04-29
  • Java 監控介面返回信息報錯信息怎麼處理

    本文將從多個方面對 Java 監控介面返回信息報錯信息的處理方法進行詳細的闡述,其中包括如何捕獲異常、如何使用日誌輸出錯誤信息、以及如何通過異常處理機制解決報錯問題等等。以下是詳細…

    編程 2025-04-29
  • Java微信支付寶分賬指南

    本文將詳細介紹如何使用Java代碼實現微信和支付寶分賬功能,以及實現自定義分賬規則和查詢分賬結果。 一、微信支付分賬 微信支付分賬是指商戶將訂單的資金分給多個分賬接收方。常用於分潤…

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

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

    編程 2025-04-28
  • Python介面自動化測試

    本文將從如下多個方面對Python編寫介面自動化進行詳細闡述,包括基本介紹、常用工具、測試框架、常見問題及解決方法 一、基本介紹 介面自動化測試是軟體測試中的一種自動化測試方式。通…

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

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

    編程 2025-04-27
  • Python爬蟲流程用法介紹

    本文將介紹Python爬蟲的流程,包括數據採集、數據處理以及數據存儲等方面。如果想要使用Python爬取網站數據,本文將為您提供詳細的指導和實例。 一、數據採集 1、確定目標網站 …

    編程 2025-04-27
  • Jadoor門鎖開發介面接入指南

    本文將從多個方面詳細介紹如何將門鎖接入Jadoor平台的開發介面,方便開發者們快速實現門鎖遠程控制、開鎖記錄查看等功能。 一、Jadoor門鎖開發介面簡介 Jadoor是一款用於密…

    編程 2025-04-27
  • 後端介面設計開發經驗分享

    在受到前端某些限制或特殊需求時,後端介面的設計和開發顯得尤為重要。下面從以下幾個方面進行講述。 一、命名規範 合理的命名規範可以大大提高介面的可讀性和可維護性。以下是一些命名規範的…

    編程 2025-04-27

發表回復

登錄後才能評論