在服務端實現APP支付功能
這次帶給大家在服務端實現APP支付功能,在服務端實現APP支付功能的注意事項有哪些,以下就是實戰案例,一起來看一下。
支付寶支付分為了很多種場景,這裡只講述支付寶APP支付功能集成,期間遇到了特別大的坑,因此我簡單描述下集成過程,並概述遇到的問題及解決方案
由於公司業務簡單,只支援支付寶支付,而無需關心退款,查詢等等額外功能,因此該篇內容僅講述支付寶支付接口時服務端如何準備APP拉取支付訂單的信息,大概流程如下
一、建立應用程式及設定
#首先,需要到螞蟻金服開發平台(open.alipay.com)註冊應用,並取得應用程式ID,並設定應用程式,這裡在設定時主要是簽約,產生應用程式的RSA2公私鑰,同時取得支付寶提供的支付公鑰等,這部分官網後台都有提示,比較簡單
二、下載對應SDK
這裡我是在PHP後台整合服務,因此下載的是PHP SDK,位址:https://docs.open.alipay.com/54/103419/
三、準備一個可以存取的真實網域名稱
#四、案例
當以上三部完成之後,此時就可以進入配置我們自己的業務代碼了
4.1、組織APP支付時的支付訂單資訊
<?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、支付寶支付成功之後異步回呼處理
<?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中文網其它相關文章!
推薦閱讀:
ThinkPHP實作微信支付(jsapi支付)流程教學詳解_php實例
以上是在服務端實現APP支付功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

百度地圖APP現在已經都成為了超多用戶們首選的出行導航的軟體,那麼這裡的一些功能全面,都能夠免費的讓大家進行選擇操作哦,解決自己日常出行方面會遇到的一些問題,完全都能夠查詢到自己的一些出行的路線,規劃自己的一些出行的方案,查詢完對應的這一些路線,都能根據自己的需求,選擇合適的一些出行方式,那麼你們不管是選擇一些公共交通,騎行,步行或是搭計程車等,都能滿足你們的,有著對應的一些導航路線,成功的帶領你們去往某地,那麼大家選擇打車的話,都能感到更加的方便,超多的一些司機們都是會在線上接單,搭計程車變得超級

vivox100s和x100手機都是vivo手機產品線中的代表機型,它們分別代表了vivo在不同時間段內的高端技術水平,因此這兩款手機在設計、性能和功能上均有一定區別。本文將從效能比較和功能解析兩個面向對這兩款手機進行詳細比較,幫助消費者更好地選擇適合自己的手機。首先,我們來看vivox100s和x100在效能上的比較。 vivox100s搭載了最新的

華為手機如何實現雙微信登入?隨著社群媒體的興起,微信已成為人們日常生活中不可或缺的溝通工具之一。然而,許多人可能會遇到一個問題:在同一部手機上同時登入多個微信帳號。對於華為手機用戶來說,實現雙微信登入並不困難,本文將介紹華為手機如何實現雙微信登入的方法。首先,華為手機自帶的EMUI系統提供了一個很方便的功能-應用程式雙開。透過應用程式雙開功能,用戶可以在手機上同

隨著網路的快速發展,自媒體這個概念已經深入人心。那麼,自媒體到底是什麼呢?它有哪些主要特點和功能呢?接下來,我們將一一探討這些問題。一、自媒體到底是什麼?自媒體,顧名思義,就是自己就是媒體。它是指透過網路平台,個人或團隊可以自主創建、編輯、發布和傳播內容的資訊載體。不同於傳統媒體,如報紙、電視、電台等,自媒體具有更強的互動性和個人化,讓每個人都能成為訊息的生產者和傳播者。二、自媒體的主要特色和功能有哪些? 1.低門檻:自媒體的崛起降低了進入媒體產業的門檻,不再需要繁瑣的設備和專業的團隊,一部手

程式語言PHP是一種用於Web開發的強大工具,能夠支援多種不同的程式設計邏輯和演算法。其中,實作斐波那契數列是一個常見且經典的程式設計問題。在這篇文章中,將介紹如何使用PHP程式語言來實作斐波那契數列的方法,並附上具體的程式碼範例。斐波那契數列是一個數學上的序列,其定義如下:數列的第一個和第二個元素為1,從第三個元素開始,每個元素的值等於前兩個元素的和。數列的前幾元

隨著小紅書在年輕人中的流行,越來越多的人開始利用這個平台分享各方面的經驗和生活見解。如何有效管理多個小紅書帳號成為關鍵問題。在本文中,我們將討論一些小紅書帳號管理軟體的功能,並探討如何更好地經營小紅書帳號。隨著社群媒體的發展,許多人發現自己需要管理多個社群帳號。對於小紅書用戶來說,這也是一個挑戰。一些小紅書帳號管理軟體可以幫助使用者更輕鬆地管理多個帳號,包括自動發佈內容、定時發布、資料分析等功能。透過這些工具,使用者可以更有效率地管理他們的帳號,提高帳號的曝光率和關注。另一、小紅書帳號管理軟體有

PHP技巧:快速實現回到上一頁功能在網頁開發中,常常會遇到需要實作返回上一頁的功能。這樣的操作可以提高使用者體驗,讓使用者更方便地在網頁之間進行導航。在PHP中,我們可以透過一些簡單的程式碼來實現這項功能。本文將介紹如何快速實現返回上一頁功能,並提供具體的PHP程式碼範例。在PHP中,我們可以使用$_SERVER['HTTP_REFERER']來取得上一頁的URL

如何在華為手機上實現微信分身功能隨著社群軟體的普及和人們對隱私安全的日益重視,微信分身功能逐漸成為人們關注的焦點。微信分身功能可以幫助使用者在同一台手機上同時登入多個微信帳號,方便管理和使用。在華為手機上實現微信分身功能並不困難,只需要按照以下步驟操作即可。第一步:確保手機系統版本和微信版本符合要求首先,確保你的華為手機系統版本已更新至最新版本,以及微信App
