這次帶給大家在服務端實現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中文網其他相關文章!

TheSecretTokeEpingAphp-PowerEdwebSiterUnningSmoothlyShyunderHeavyLoadInVolvOLVOLVOLDEVERSALKEYSTRATICES:1)emplactopCodeCachingWithOpcachingWithOpCacheToreCescriptexecution Time,2)使用atabasequercachingCachingCachingWithRedataBasEndataBaseLeSendataBaseLoad,3)

你應該關心DependencyInjection(DI),因為它能讓你的代碼更清晰、更易維護。 1)DI通過解耦類,使其更模塊化,2)提高了測試的便捷性和代碼的靈活性,3)使用DI容器可以管理複雜的依賴關係,但要注意性能影響和循環依賴問題,4)最佳實踐是依賴於抽象接口,實現鬆散耦合。

是的,優化papplicationispossibleandessential.1)empartcachingingcachingusedapcutorediucedsatabaseload.2)優化的atabaseswithexing,高效Quereteries,and ConconnectionPooling.3)EnhanceCodeWithBuilt-unctions,避免使用,避免使用ingglobalalairaiables,並避免使用

theKeyStrategiestosigantificallyBoostPhpaPplicationPerformenCeare:1)UseOpCodeCachingLikeLikeLikeLikeLikeCacheToreDuceExecutiontime,2)優化AtabaseInteractionswithPreparedStateTementStatementStatementAndProperIndexing,3)配置

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增強codemodocultion,可驗證性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

選擇DependencyInjection(DI)用於大型應用,ServiceLocator適合小型項目或原型。 1)DI通過構造函數注入依賴,提高代碼的測試性和模塊化。 2)ServiceLocator通過中心註冊獲取服務,方便但可能導致代碼耦合度增加。

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)啟用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替換loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

phpemailvalidation invoLvesthreesteps:1)格式化進行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

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

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver CS6
視覺化網頁開發工具