主頁(yè) > 知識(shí)庫(kù) > ThinkPHP框架下整合支付寶支付功能圖文教程

ThinkPHP框架下整合支付寶支付功能圖文教程

熱門(mén)標(biāo)簽:地下城堡2圖九地圖標(biāo)注 阿里云400電話申請(qǐng)加工單 海南人工外呼系統(tǒng)有效果嗎 抖音有個(gè)地圖標(biāo)注是什么意思 西區(qū)企業(yè)怎么做地圖標(biāo)注入駐 九江外呼系統(tǒng) 智能電話機(jī)器人排名前十名南京 保定crm外呼系統(tǒng)運(yùn)營(yíng)商 七魚(yú)外呼系統(tǒng)停用嗎

本文實(shí)例講述了ThinkPHP框架下整合支付寶支付功能。分享給大家供大家參考,具體如下:

背景

  • 近期項(xiàng)目需要接入支付寶支付功能,其中開(kāi)發(fā)使用了ThinkPHP3.2.3框架,通過(guò)參考開(kāi)發(fā)平臺(tái)文檔可以知道,網(wǎng)站開(kāi)發(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
  • 第二步:配置密鑰
  • 第三步:搭建和配置開(kāi)發(fā)環(huán)境
  • 第四步:調(diào)用接口

2).配置截圖

3).提示說(shuō)明

雖然官方文檔已經(jīng)做的很詳細(xì)、成熟,不過(guò)還是有幾點(diǎn)需要著重提醒一下,以免不必要的糾結(jié)。

  • 應(yīng)用創(chuàng)建成功后需要大概一到三天的審核
  • 配置密鑰時(shí)建議下載其提供的加密工具,可參考RSA密鑰生成方法
  • 此處我所下載的是開(kāi)發(fā)平臺(tái)服務(wù)端SDK中的PHP版資源,而非DEMO文件,相信兩者還是有所區(qū)別的

二.手機(jī)網(wǎng)站支付接口實(shí)現(xiàn)

1).測(cè)試入口頁(yè)面

如下圖所示,我在此創(chuàng)建了一個(gè)簡(jiǎn)單的入口文件,根據(jù)開(kāi)發(fā)文檔中的介紹是需要統(tǒng)一編碼格式的,此處我選擇的是UTF-8

2).html代碼參考

需要注意的是,接口指明需要POST方式進(jìn)行提交請(qǐng)求

3).支付寶配置信息

對(duì)于支付寶的配置信息,我寫(xiě)在 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)用后生成
    //由開(kāi)發(fā)者自己生成: 請(qǐng)?zhí)顚?xiě)開(kāi)發(fā)者私鑰去頭去尾去回車(chē),一行字符串
    'rsaPrivateKey'     => 'MIIExxxxxxxxxxxxxxxxxxxxxxxxxxxq',
    //支付寶公鑰,由支付寶生成: 請(qǐng)?zhí)顚?xiě)支付寶公鑰,一行字符串
    '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ì)于各文件類(lèi)的引用會(huì)依據(jù)代碼框架而不同,需要自行確認(rèn)。

5).支付接口實(shí)現(xiàn)

在請(qǐng)求喚醒支付寶支付的路徑中進(jìn)行接口代碼的編輯

提示

  • 通過(guò)實(shí)驗(yàn)發(fā)現(xiàn),如果在電腦端進(jìn)行此功能的支付測(cè)試,會(huì)報(bào)出如下的類(lèi)似錯(cuò)誤,個(gè)人認(rèn)為源于手機(jī)和PC的內(nèi)置配置不同
  • 對(duì)于手機(jī)網(wǎng)站支付需要在手機(jī)上測(cè)試,可自行配置虛擬域名手機(jī)訪問(wèn)即可,不要在此問(wèn)題上花費(fèi)不必要的時(shí)間
  • 因?yàn)楸救司褪窃陔娔X有報(bào)錯(cuò),手機(jī)端訪問(wèn)卻能完美實(shí)現(xiàn),從而走了驗(yàn)證簽名的過(guò)程到最后卻并非錯(cuò)在簽名,當(dāng)然也不排除你的操作過(guò)程簽名一定是沒(méi)問(wèn)題的哦.


代碼實(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ù)中提取,具體安全起見(jiàn)可自行加密操作 此處僅舉例測(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)買(mǎi)商品,愿您購(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í),通過(guò)獲取所提交過(guò)來(lái)的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ì)比來(lái)看,其實(shí) PC 端的代碼設(shè)計(jì)與手機(jī)端大同小異,在此點(diǎn)明一下使用情景,可進(jìn)行參考。

1).支付接口實(shí)現(xiàn)

提示:

  • 測(cè)試發(fā)現(xiàn),接口中定義“subject”時(shí),對(duì)于文字的數(shù)目有要求,不能超過(guò)四個(gè)字,至于字母似乎沒(méi)有特別限制,開(kāi)發(fā)過(guò)程中原想顯示全部的商品名稱(chēng)卻無(wú)法實(shí)現(xiàn),還請(qǐng)注意。

  • 提供的代碼暫時(shí)未進(jìn)行界面的設(shè)計(jì),可參考 手機(jī)端接口思想,接收并處理訂單信息后再喚醒支付寶,當(dāng)前的代碼可以在公共文件配置正確的情況下,直接公網(wǎng)訪問(wèn)接口鏈接即可展示效果。

  • 支付成功后的通知處理,請(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)容感興趣的讀者可查看本站專(zhuān)題:《ThinkPHP入門(mén)教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門(mén)教程》、《CI(CodeIgniter)框架進(jìn)階教程》、《Zend FrameWork框架入門(mén)教程》及《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框架整合微信支付之刷卡模式圖文詳解

標(biāo)簽:涼山 九江 甘肅 昭通 韶關(guān) 十堰 梅河口 遼陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ThinkPHP框架下整合支付寶支付功能圖文教程》,本文關(guān)鍵詞  ThinkPHP,框架,下,整合,支付,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《ThinkPHP框架下整合支付寶支付功能圖文教程》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于ThinkPHP框架下整合支付寶支付功能圖文教程的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章