首頁 後端開發 php教程 php 服務端整合支付寶APP付款的方法

php 服務端整合支付寶APP付款的方法

Jul 03, 2018 pm 04:57 PM

以下為大家分享一個php 服務端整合支付寶APP支付實例,具有很好的參考價值,希望對大家有幫助。一起過來看看吧

支付寶支付分為了很多種場景,這裡只講述支付寶APP支付功能集成,期間遇到了特別大的坑,因此我簡單描述下集成過程,並概述遇到的問題及解決方案

由於公司業務簡單,只支援支付寶支付,而無需關心退款,查詢等等額外功能,因此該篇內容僅講述支付寶支付接口時服務端如何準備APP拉取支付訂單的訊息,大概流程如下

一、創建應用程式及設定

首先,需要到螞蟻金服開發平台(open.alipay. com)註冊應用,並獲取應用ID,並配置應用,這裡在配置時主要是簽約,生成應用的RSA2公私鑰,同時獲取到支付寶提供的支付公鑰等,這部分官網後台都有提示,比較簡單

二、下載對應SDK

這裡我是在PHP後台整合服務,因此下載的是PHP SDK,位址:https:/ /docs.open.alipay.com/54/103419/

三、準備一個可以存取的真實網域名稱

四、案例

當以上三部完成之後,此時就可以進入配置我們自己的業務代碼了

4.1、組織APP支付時的支付訂單資訊

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

<?php

 

require_once (__DIR__.'/alipay-sdk-PHP-20171023143822/AopSdk.php');

 

class Alipay

{

 /**

 * 应用ID

 */

 const APPID = '你的应用ID';

 /**

 *请填写开发者私钥去头去尾去回车,一行字符串

 */

 const RSA_PRIVATE_KEY = '应用对应开发者私钥';

 /**

 *请填写支付宝公钥,一行字符串

 */

 const ALIPAY_RSA_PUBLIC_KEY = '支付宝提供的公钥';

 /**

 * 支付宝服务器主动通知商户服务器里指定的页面

 * @var string

 */

 private $callback = "http://www.test.com/notify/alipay_notify.php";

 

 /**

 *生成APP支付订单信息

 * @param string $orderId 商品订单ID

 * @param string $subject 支付商品的标题

 * @param string $body 支付商品描述

 * @param float $pre_price 商品总支付金额

 * @param int $expire 支付交易时间

 * @return bool|string 返回支付宝签名后订单信息,否则返回false

 */

 public function unifiedorder($orderId, $subject,$body,$pre_price,$expire){

 try{

  $aop = new \AopClient();

  $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";

  $aop->appId = self::APPID;

  $aop->rsaPrivateKey = self::RSA_PRIVATE_KEY;

  $aop->format = "json";

  $aop->charset = "UTF-8";

  $aop->signType = "RSA2";

  $aop->alipayrsaPublicKey = self::ALIPAY_RSA_PUBLIC_KEY;

  //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay

  $request = new \AlipayTradeAppPayRequest();

  //SDK已经封装掉了公共参数,这里只需要传入业务参数

  $bizcontent = "{\"body\":\"{$body}\"," //支付商品描述

  . "\"subject\":\"{$subject}\"," //支付商品的标题

  . "\"out_trade_no\":\"{$orderId}\"," //商户网站唯一订单号

  . "\"timeout_express\":\"{$expire}m\"," //该笔订单允许的最晚付款时间,逾期将关闭交易

  . "\"total_amount\":\"{$pre_price}\"," //订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]

  . "\"product_code\":\"QUICK_MSECURITY_PAY\""

  . "}";

  $request->setNotifyUrl($this->callback);

  $request->setBizContent($bizcontent);

  //这里和普通的接口调用不同,使用的是sdkExecute

  $response = $aop->sdkExecute($request);

  //htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题

  return htmlspecialchars($response);//就是orderString 可以直接给客户端请求,无需再做处理。

 }catch (\Exception $e){

  return false;

 }

 

 }

}

登入後複製
#4.2、支付寶支付成功之後非同步回呼處理

#

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

<?php

/**

 * alipay_notify.php.

 * User: lvfk

 * Date: 2017/10/26 0026

 * Time: 13:48

 * Desc: 支付宝支付成功异步通知

 */

include_once (__DIR__.'/../alipay-sdk-PHP-20171023143822/AopSdk.php');

 

//验证签名

$aop = new \AopClient();

$aop->alipayrsaPublicKey = \Comm\Pay\Alipay::ALIPAY_RSA_PUBLIC_KEY;

$flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");

 

//验签

if($flag){

 //处理业务,并从$_POST中提取需要的参数内容

 if($_POST['trade_status'] == 'TRADE_SUCCESS'

 || $_POST['trade_status'] == 'TRADE_FINISHED'){//处理交易完成或者支付成功的通知

 //获取订单号

 $orderId = $_POST['out_trade_no'];

 //交易号

 $trade_no = $_POST['trade_no'];

 //订单支付时间

 $gmt_payment = $_POST['gmt_payment'];

 //转换为时间戳

 $gtime = strtotime($gmt_payment);

 

 //此处编写回调处理逻辑

 

        //处理成功一定要返回 success 这7个字符组成的字符串,

        //die('success');//响应success表示业务处理成功,告知支付宝无需在异步通知

  

 }

}

登入後複製

五、遇到的問題

#5.1、一直報錯40001=>isv.invalid- signature

為了搞清楚原因,先後多次重新產生已套用的RSA2公私金鑰,發現都沒有作用。最後結合網路資料,才發現,

原來是支付寶回呼地址notifyUrl不能有'?' 以及?後面加參數

5.2、支付寶非同步通知成功了,但是$_POST為空

這個也花了一點時間查找,開始做的時候就是遵照支付寶的建議使用HTTS方式請求。但這樣應用程式後台一直通知沒有參數內容。最後才想起來由於我們的應用程式使用了HTTS雙向認證,這個原因導致支付寶的伺服器回呼的參數為空。最後,把回調位址改為了HTTP方式,驗證透過
透過遇到的問題,先查看支付寶的文檔描述以及支付寶提供的錯誤碼解釋,實在不行就百度或Google,再加上自己不斷測試驗證,最終一定可以解決問題

至此,支付寶APP支付這塊功能完成,其他的APP退款、對賬單等等功能就沒繼續做,不過按照支付寶官網文檔以及支付寶提供的SDK ,整合到自己應用也只是時間問題。 以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

PDO預處理語句PDOStatement物件

######PHP全功能無變形圖片裁切的操作類別與用法的介紹###########################

以上是php 服務端整合支付寶APP付款的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱門文章

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

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 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)

11個最佳PHP URL縮短腳本(免費和高級) 11個最佳PHP URL縮短腳本(免費和高級) Mar 03, 2025 am 10:49 AM

11個最佳PHP URL縮短腳本(免費和高級)

在Laravel中使用Flash會話數據 在Laravel中使用Flash會話數據 Mar 12, 2025 pm 05:08 PM

在Laravel中使用Flash會話數據

構建具有Laravel後端的React應用程序:第2部分,React 構建具有Laravel後端的React應用程序:第2部分,React Mar 04, 2025 am 09:33 AM

構建具有Laravel後端的React應用程序:第2部分,React

簡化的HTTP響應在Laravel測試中模擬了 簡化的HTTP響應在Laravel測試中模擬了 Mar 12, 2025 pm 05:09 PM

簡化的HTTP響應在Laravel測試中模擬了

php中的捲曲:如何在REST API中使用PHP捲曲擴展 php中的捲曲:如何在REST API中使用PHP捲曲擴展 Mar 14, 2025 am 11:42 AM

php中的捲曲:如何在REST API中使用PHP捲曲擴展

在Codecanyon上的12個最佳PHP聊天腳本 在Codecanyon上的12個最佳PHP聊天腳本 Mar 13, 2025 pm 12:08 PM

在Codecanyon上的12個最佳PHP聊天腳本

宣布 2025 年 PHP 形勢調查 宣布 2025 年 PHP 形勢調查 Mar 03, 2025 pm 04:20 PM

宣布 2025 年 PHP 形勢調查

Laravel中的通知 Laravel中的通知 Mar 04, 2025 am 09:22 AM

Laravel中的通知

See all articles