国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php 服務端集成支付寶APP支付實例

2024-05-05 00:02:47
字體:
來源:轉載
供稿:網友

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

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

一、創建應用及配置

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

二、下載對應SDK

這里我是在PHP后臺集成服務,因此下載的是PHP SDK,地址:https://docs.open.alipay.com/54/103419/

三、準備一個可以訪問的真實域名

四、案例

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

4.1、組織APP支付時的支付訂單信息

<?phprequire_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、支付寶支付成功之后異步回調處理

<?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方式,驗證通過

通過遇到的問題,首先查看支付寶的文檔描述以及支付寶提供的錯誤碼解釋,實在不行就百度或者谷歌,再加上自己不斷測試驗證,最終一定可以解決問題

至此,支付寶APP支付這塊功能完成,其他的APP退款、對賬單等等功能就沒繼續做,不過按照支付寶官網文檔以及支付寶提供的SDK,集成到自己應用也只是時間問題。

以上這篇php 服務端集成支付寶APP支付實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 资溪县| 巴彦淖尔市| 涟源市| 大新县| 平舆县| 大化| 阿克陶县| 威信县| 临西县| 东丽区| 湘西| 得荣县| 年辖:市辖区| 高唐县| 汕头市| 睢宁县| 内丘县| 澄迈县| 万全县| 漠河县| 贞丰县| 阿拉善右旗| 萨嘎县| 沈阳市| 综艺| 友谊县| 鄂托克旗| 罗甸县| 湘乡市| 龙山县| 静安区| 方山县| 富川| 嘉禾县| 昌乐县| 邯郸市| 抚远县| 海阳市| 公安县| 惠水县| 宁明县|