ThinkPHP框架下整合支付寶支付功能圖文教程
本文實(shí)例講述了ThinkPHP框架下整合支付寶支付功能。分享給大家供大家參考,具體如下:
背景
- 近期項(xiàng)目需要接入支付寶支付功能,其中開發(fā)使用了ThinkPHP3.2.3框架,通過參考開發(fā)平臺(tái)文檔可以知道,網(wǎng)站開發(fā)有兩種場(chǎng)景,一種是手機(jī)網(wǎng)站支付,直接喚醒支付寶app進(jìn)入支付操作;另一種多是 PC 端顯示支付二維碼的形式,然后使用手機(jī)的支付寶app掃描。
- 此處主要介紹手機(jī)網(wǎng)站支付的實(shí)現(xiàn),后期補(bǔ)充掃碼支付。
一.接入配置
1).接入步驟
根據(jù)“快速接入”中的流程,兩者大同小異,都是進(jìn)行:
- 第一步:創(chuàng)建應(yīng)用并獲取APPID
- 第二步:配置密鑰
- 第三步:搭建和配置開發(fā)環(huán)境
- 第四步:調(diào)用接口
2).配置截圖
3).提示說明
雖然官方文檔已經(jīng)做的很詳細(xì)、成熟,不過還是有幾點(diǎn)需要著重提醒一下,以免不必要的糾結(jié)。
- 應(yīng)用創(chuàng)建成功后需要大概一到三天的審核
- 配置密鑰時(shí)建議下載其提供的加密工具,可參考RSA密鑰生成方法
- 此處我所下載的是開發(fā)平臺(tái)服務(wù)端SDK中的PHP版資源,而非DEMO文件,相信兩者還是有所區(qū)別的
二.手機(jī)網(wǎng)站支付接口實(shí)現(xiàn)
1).測(cè)試入口頁(yè)面
如下圖所示,我在此創(chuàng)建了一個(gè)簡(jiǎn)單的入口文件,根據(jù)開發(fā)文檔中的介紹是需要統(tǒng)一編碼格式的,此處我選擇的是UTF-8
2).html代碼參考
需要注意的是,接口指明需要POST方式進(jìn)行提交請(qǐng)求
3).支付寶配置信息
對(duì)于支付寶的配置信息,我寫在 Application/Common/Conf/config.php中
//支付寶 支付配置 'ALI_CONFIG' => array( 'gatewayUrl' => 'https://openapi.alipay.com/gateway.do',//支付寶網(wǎng)關(guān)(固定)' 'appId' => '2017xxxxxxxx9',//APPID即創(chuàng)建應(yīng)用后生成 //由開發(fā)者自己生成: 請(qǐng)?zhí)顚戦_發(fā)者私鑰去頭去尾去回車,一行字符串 'rsaPrivateKey' => 'MIIExxxxxxxxxxxxxxxxxxxxxxxxxxxq', //支付寶公鑰,由支付寶生成: 請(qǐng)?zhí)顚懼Ц秾毠€,一行字符串 'alipayrsaPublicKey' => 'IIBxxxxxxxxxxxxxxxxxxxEFAA', 'notifyUrl' => 'http://www.xxx.com/m/cartpay/notify_ali', // 支付成功通知地址 'returnUrl' => 'http://www.xxx.com', // 支付后跳轉(zhuǎn)地址 'returnPcUrl' => 'http://www.xxx.com/Home', // PC端掃碼支付后跳轉(zhuǎn)地址 ),
4).服務(wù)端SDK導(dǎo)入
將前面所下載的SDK放入自定義的位置,在此,我習(xí)慣放在如下的路徑中,…\ThinkPHP\Library\Vendor\Alipay,特別提醒一點(diǎn),對(duì)于各文件類的引用會(huì)依據(jù)代碼框架而不同,需要自行確認(rèn)。
5).支付接口實(shí)現(xiàn)
在請(qǐng)求喚醒支付寶支付的路徑中進(jìn)行接口代碼的編輯
提示
- 通過實(shí)驗(yàn)發(fā)現(xiàn),如果在電腦端進(jìn)行此功能的支付測(cè)試,會(huì)報(bào)出如下的類似錯(cuò)誤,個(gè)人認(rèn)為源于手機(jī)和PC的內(nèi)置配置不同
- 對(duì)于手機(jī)網(wǎng)站支付需要在手機(jī)上測(cè)試,可自行配置虛擬域名手機(jī)訪問即可,不要在此問題上花費(fèi)不必要的時(shí)間
- 因?yàn)楸救司褪窃陔娔X有報(bào)錯(cuò),手機(jī)端訪問卻能完美實(shí)現(xiàn),從而走了驗(yàn)證簽名的過程到最后卻并非錯(cuò)在簽名,當(dāng)然也不排除你的操作過程簽名一定是沒問題的哦.
![]()
代碼實(shí)現(xiàn)如下:
/** * 支付寶支付post提交頁(yè)面 */ public function alipay(){ if (IS_POST){ Vendor('Alipay.aop.AopClient'); Vendor('Alipay.aop.request.AlipayTradeWapPayRequest'); //$out_trade_no = I('post.order_sn'); /* * $out_trade_no 為自己業(yè)務(wù)邏輯中要支付的訂單號(hào) * 可從POST數(shù)據(jù)中提取,具體安全起見可自行加密操作 此處僅舉例測(cè)試數(shù)據(jù) * $order_amount 為要進(jìn)行支付的金額 注意要用小數(shù)轉(zhuǎn)換 * 例如:3.50,10.00 * $aliConfig 獲取支付寶配置數(shù)據(jù) */ $out_trade_no = '2017M'.time(); $body = '歡迎購(gòu)買商品,愿您購(gòu)物愉快'; $subject = '你好'; $order_amount = 9.00; $aliConfig = C('ALI_CONFIG'); $aop = new \AopClient(); $aop->gatewayUrl = $aliConfig['gatewayUrl']; $aop->appId = $aliConfig['appId']; $aop->rsaPrivateKey = $aliConfig['rsaPrivateKey']; $aop->alipayrsaPublicKey=$aliConfig['alipayrsaPublicKey']; $aop->apiVersion = '1.0'; $aop->postCharset='UTF-8'; $aop->format='json'; $aop->signType='RSA2'; $request = new \AlipayTradeWapPayRequest (); $bizContent = "{" . " \"body\":\"$body.\"," . " \"subject\":\"$subject\"," . " \"out_trade_no\":\"$out_trade_no\"," . " \"timeout_express\":\"90m\"," . " \"total_amount\":$order_amount," . " \"product_code\":\"QUICK_WAP_WAY\"" . " }"; $request->setBizContent($bizContent); $request->setNotifyUrl($aliConfig['notifyUrl']); $request->setReturnUrl($aliConfig['returnUrl']); $result = $aop->pageExecute ( $request); echo $result; }else{ echo 'sorry,非法請(qǐng)求失敗'; } }
6).支付成功后的通知處理
此時(shí),通過獲取所提交過來的post數(shù)據(jù),進(jìn)行訂單號(hào)的剝離,從而進(jìn)行下一步的業(yè)務(wù)邏輯處理即可.
[注意]:
- 接口文檔中有點(diǎn)明,支付通知功能最后需要輸出‘success'
- 此處的通知路徑要與配置中確定的 ‘notifyUrl'完全一致
/** * 支付寶支付通知功能 */ public function notify_ali(){ $out_trade_no = I('post.out_trade_no'); $this->toUpdatePayInfo($out_trade_no,'ali'); echo 'success'; }
三.電腦網(wǎng)站支付接口實(shí)現(xiàn)
對(duì)比來看,其實(shí) PC 端的代碼設(shè)計(jì)與手機(jī)端大同小異,在此點(diǎn)明一下使用情景,可進(jìn)行參考。
1).支付接口實(shí)現(xiàn)
提示:
測(cè)試發(fā)現(xiàn),接口中定義“subject”時(shí),對(duì)于文字的數(shù)目有要求,不能超過四個(gè)字,至于字母似乎沒有特別限制,開發(fā)過程中原想顯示全部的商品名稱卻無法實(shí)現(xiàn),還請(qǐng)注意。
提供的代碼暫時(shí)未進(jìn)行界面的設(shè)計(jì),可參考 手機(jī)端接口思想,接收并處理訂單信息后再喚醒支付寶,當(dāng)前的代碼可以在公共文件配置正確的情況下,直接公網(wǎng)訪問接口鏈接即可展示效果。
支付成功后的通知處理,請(qǐng)參考手機(jī)端實(shí)現(xiàn)方式.
2).實(shí)現(xiàn)效果截圖
3).代碼實(shí)現(xiàn)如下:
/** * 電腦端喚醒 支付寶掃碼支付接口 */ public function aliPayPage(){ $out_trade_no = '2017PC'.time(); $order_amount = '12.88'; $proName = "真米黑米 XXXXXX"; Vendor('Alipay.aop.AopClient'); Vendor('Alipay.aop.request.AlipayTradePagePayRequest'); //構(gòu)造參數(shù) $aop = new \AopClient(); $aliConfig = C('ALI_CONFIG'); $aop->gatewayUrl = $aliConfig['gatewayUrl']; $aop->appId = $aliConfig['appId']; $aop->rsaPrivateKey = $aliConfig['rsaPrivateKey']; $aop->apiVersion = '1.0'; $aop->signType = 'RSA2'; $aop->postCharset= 'utf-8'; $aop->format='json'; $request = new \AlipayTradePagePayRequest (); $request->setReturnUrl($aliConfig['returnPcUrl']); $request->setNotifyUrl($aliConfig['notifyUrl']); $request->setBizContent( "{" . " \"product_code\":\"FAST_INSTANT_TRADE_PAY\"," . " \"subject\":\"$proName\"," . " \"out_trade_no\":\"$out_trade_no\"," . " \"total_amount\":$order_amount," . " \"body\":\"Iphone6 16G\"" . " }"); //請(qǐng)求 $result = $aop->pageExecute ($request); //輸出 echo $result; }
附錄:
更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門教程》、《CI(CodeIgniter)框架進(jìn)階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術(shù)總結(jié)》。
希望本文所述對(duì)大家基于ThinkPHP框架的PHP程序設(shè)計(jì)有所幫助。
- ThinkPHP實(shí)現(xiàn)微信支付(jsapi支付)流程教程詳解
- Thinkphp整合微信支付功能
- thinkphp整合微信支付代碼分享
- Thinkphp和onethink實(shí)現(xiàn)微信支付插件
- ThinkPHP框架整合微信支付之Native 掃碼支付模式一圖文詳解
- ThinkPHP框架整合微信支付之JSAPI模式圖文詳解
- ThinkPHP框架整合微信支付之Native 掃碼支付模式二圖文詳解
- thinkPHP框架對(duì)接支付寶即時(shí)到賬接口回調(diào)操作示例
- Thinkphp微信公眾號(hào)支付接口
- ThinkPHP實(shí)現(xiàn)支付寶接口功能實(shí)例
- ThinkPHP框架整合微信支付之刷卡模式圖文詳解
相關(guān)文章
php側(cè)拉菜單 漂亮,可以向右或者向左展開,支持FF,IE
其中menu UL UL的left或者right控制向右或者向左顯示子菜單2009-10-10Laravel框架實(shí)現(xiàn)多數(shù)據(jù)庫(kù)連接操作詳解
這篇文章主要介紹了Laravel框架實(shí)現(xiàn)多數(shù)據(jù)庫(kù)連接操作,結(jié)合實(shí)例形式詳細(xì)分析了Laravel框架連接2個(gè)數(shù)據(jù)庫(kù)的具體操作步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-07-07wampserver改變默認(rèn)網(wǎng)站目錄的辦法
大家在做php項(xiàng)目時(shí),很多項(xiàng)目都會(huì)用到wampserver。WampServe集成了Apache、MySQL、PHP、phpmyadmin,支持Apache的mod_rewrite,PHP擴(kuò)展、Apache模塊只需要在菜單“開啟/關(guān)閉”上點(diǎn)點(diǎn)就搞定,省去了修改配置文件的麻煩,這里就簡(jiǎn)寫成wamp。2015-08-08tp5.1框架數(shù)據(jù)庫(kù)子查詢操作實(shí)例分析
這篇文章主要介紹了tp5.1框架數(shù)據(jù)庫(kù)子查詢操作,結(jié)合實(shí)例形式分析了tp5.1框架數(shù)據(jù)庫(kù)子查詢相關(guān)原理、操作實(shí)現(xiàn)方法與注意事項(xiàng),需要的朋友可以參考下2020-05-05編寫PHP程序檢查字符串中的中文字符個(gè)數(shù)的實(shí)例分享
這篇文章主要介紹了編寫PHP程序檢查字符串中的中文字符個(gè)數(shù)的實(shí)例分享,文中利用了PHP中mb_strlen函數(shù)的實(shí)現(xiàn)原理,需要的朋友可以參考下2016-03-03php web環(huán)境和命令行環(huán)境下查找php.ini的位置
這篇文章主要介紹了php web環(huán)境和命令行環(huán)境下如何查找php.ini的位置,需要的朋友可以參考下2019-07-07使用php的HTTP請(qǐng)求的庫(kù)Requests實(shí)現(xiàn)美女圖片墻
這篇文章主要介紹了使用php的HTTP請(qǐng)求的庫(kù)Requests實(shí)現(xiàn)美女圖片墻的方法,十分簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-02-02