***CodeIgniter框架集成支付寶即時到帳支付SDK

本文爲CI集成支付寶即時到帳支付接口php

一、下載支付寶官方demo ;即時到帳交易接口(create_direct_pay_by_user)(DEMO下載) 原文地址:https://doc.open.alipay.com/doc2/detail?treeId=62&articleId=103566&docType=1瀏覽器

二、登陸支付寶https://www.alipay.com/  下載CA證書。將證書放在下載的demo文件夾的根目錄下。
二、將下載的create_direct_pay_by_user-PHP-UTF-8文件夾改成AliPay;併到到CI框架libraries/ 目錄下。安全

三、在libraries/ 目錄下新建CI_Alipay.php 文件,內容以下:服務器

 

[php]  view plain  copy
 
  1. <?php  
  2. defined('BASEPATH') OR exit('No direct script access allowed');  
  3.   
  4. // 加載支付寶支付  
  5. require_once APPPATH.'libraries/AliPay/lib/alipay_submit.class.php';  
  6.   
  7. /** 
  8.  * 爲CI擴展支付寶支付類 
  9.  */  
  10. class CI_Alipay extends AlipaySubmit {  
  11.   
  12.     public function __construct(){  
  13.   
  14.         parent::__construct();  
  15.   
  16.     }  
  17. }  
 


四、在CI框架application/config/目錄下 新建alipay_config.php  內容以下:app

 

 

[php]  view plain  copy
 
  1. <?php  
  2. defined('BASEPATH') OR exit('No direct script access allowed');  
  3.   
  4. /* * 
  5.  * 配置文件 
  6.  * 版本:3.4 
  7.  * 修改日期:2016-03-08 
  8.  * 說明: 
  9.  * 如下代碼只是爲了方便商戶測試而提供的樣例代碼,商戶能夠根據本身網站的須要,按照技術文檔編寫,並不是必定要使用該代碼。 
  10.  * 該代碼僅供學習和研究支付寶接口使用,只是提供一個參考。 
  11.  
  12.  * 安全校驗碼查看時,輸入支付密碼後,頁面呈灰色的現象,怎麼辦? 
  13.  * 解決方法: 
  14.  * 一、檢查瀏覽器配置,不讓瀏覽器作彈框屏蔽設置 
  15.  * 二、更換瀏覽器或電腦,從新登陸查詢。 
  16.  */  
  17.    
  18. //↓↓↓↓↓↓↓↓↓↓請在這裏配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓  
  19. //合做身份者ID,簽約帳號,以2088開頭由16位純數字組成的字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm  
  20. $config['partner']      = '';  
  21.   
  22. //收款支付寶帳號,以2088開頭由16位純數字組成的字符串,通常狀況下收款帳號就是簽約帳號  
  23. $config['seller_id']    = $config['partner'];  
  24.   
  25. // MD5密鑰,安全檢驗碼,由數字和字母組成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm  
  26. $config['key']          = '';  
  27.   
  28. // 服務器異步通知頁面路徑  需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網能夠正常訪問  
  29. $config['notify_url'] = 'http://'.$_SERVER['HTTP_HOST'].'/order/alipayNotifyUrl';  
  30.   
  31. // 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網能夠正常訪問  
  32. $config['return_url'] = 'http://'.$_SERVER['HTTP_HOST'].'/order/alipayReturnUrl';  
  33.   
  34. //簽名方式  
  35. $config['sign_type']    = strtoupper('MD5');  
  36.   
  37. //字符編碼格式 目前支持 gbk 或 utf-8  
  38. $config['input_charset']= strtolower('utf-8');  
  39.   
  40. //ca證書路徑地址,用於curl中ssl校驗  
  41. //請保證cacert.pem文件在當前文件夾目錄中  
  42. $config['cacert']    = APPPATH.'libraries/AliPay/cacert.pem';  
  43.   
  44. //訪問模式,根據本身的服務器是否支持ssl訪問,若支持請選擇https;若不支持請選擇http  
  45. $config['transport']    = 'http';  
  46.   
  47. // 支付類型 ,無需修改  
  48. $config['payment_type'] = "1";  
  49.           
  50. // 產品類型,無需修改  
  51. $config['service'] = "create_direct_pay_by_user";  
  52.   
  53. //↑↑↑↑↑↑↑↑↑↑請在這裏配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑  
  54.   
  55.   
  56. //↓↓↓↓↓↓↓↓↓↓ 請在這裏配置防釣魚信息,若是沒開通防釣魚功能,爲空便可 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓  
  57.       
  58. // 防釣魚時間戳  若要使用請調用類文件submit中的query_timestamp函數  
  59. $config['anti_phishing_key'] = "";  
  60.       
  61. // 客戶端的IP地址 非局域網的外網IP地址,如:221.0.0.1  
  62. $config['exter_invoke_ip'] = "";  
  63.           
  64. //↑↑↑↑↑↑↑↑↑↑請在這裏配置防釣魚信息,若是沒開通防釣魚功能,爲空便可 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑  

 

五、在項目控制器controllers/ 目錄下新建order.php   內容以下:框架

 

[php]  view plain  copy
 
  1. <?php  
  2.     defined('BASEPATH') OR exit('No direct script access allowed');  
  3.   
  4.     /** 
  5.      * Order Controller 
  6.      * 訂單控制器 
  7.      */  
  8.     class Order extends MY_Controller {  
  9.   
  10.         public function __construct(){  
  11.             $this->isNeedLogin = TRUE;  
  12.             parent::__construct();  
  13.         }  
  14.   
  15.         /** 
  16.          * aliPay 【支付寶支付接口】 
  17.          * @param  int $id 訂單ID 
  18.          * @author lyne  
  19.          */  
  20.         public function aliPay($id){  
  21.             // 調用支付寶支付接口配置信息  
  22.             $this->load->config('alipay_config',TRUE);  
  23.             /*>>>>>>>>>>>>> 查預先生成的訂單信息,根據本身狀況 <<<<<<<<<<<<<< 
  24.                 根據訂單ID查詢預訂單信息 
  25.                 包括: 
  26.                 訂單總額、訂單編號、訂單商品等。 
  27.             >>>>>>>>>>>>> 根據本身狀況 END <<<<<<<<<<<<<<<<<*/  
  28.               
  29.             // 加載支付寶支付請求類庫  
  30.             $this->load->library('CI_Alipay',$this->config->item('alipay_config'));  
  31.             $parameter = array(  
  32.               'service'           => $this->config->item('service','alipay_config'),  
  33.               'partner'           => $this->config->item('partner','alipay_config'),  
  34.               'payment_type'      => $this->config->item('payment_type','alipay_config'),  
  35.               'notify_url'        => $this->config->item('notify_url','alipay_config'),  
  36.               'return_url'        => $this->config->item('return_url','alipay_config'),  
  37.               'seller_id'         => $this->config->item('seller_id','alipay_config'),  
  38.               'out_trade_no'      => '訂單編號',     // 訂單編號  
  39.               'subject'           => '填寫訂單商品', // 訂單商品  
  40.               'total_fee'         => '訂單總額',     // 訂單總額  
  41.               'body'              => '商品描述',     // 商品描述  
  42.               'show_url'          => '',             // 選填    
  43.               'anti_phishing_key' => '',             // 選填  
  44.               'exter_invoke_ip'   => '',             // 選填  
  45.               '_input_charset'    => $this->config->item('input_charset','alipay_config')  
  46.             );  
  47.   
  48.             $body = $this->ci_alipay->buildRequestForm($parameter,"get","確認");  
  49.               
  50.             echo $body;  
  51.         }  
  52.   
  53.     }  


六、以上步驟完成,下面支付就交給支付寶了。能夠選擇直接掃二維碼支付,能夠登陸支付寶帳號後操做curl

 

七、支付完成後,支付寶會經過異步通知地址(即alipay_config.php文件中的$config['notify_url']地址),隨後支付寶經過同步通知地址(即alipay_config.php文件中的$config['return_url']地址)。異步

7-一、那麼通常狀況咱們會在異步通知內接收到支付成功信息後處理業務邏輯。注意:在異步通知內收到通知後,必定要返回success告知支付寶我已經收到你的通知,讓它閉嘴。不然它會在25小時之內完成8次通知(通知的間隔頻率通常是:4m,10m,10m,1h,2h,6h,15h);函數

7-二、經過同步通知下收到成功信息後處理一些簡單驗證後跳轉或提示成功信息。工具

 

八、異步通知  內容以下:我也寫在了order控制器內了。看你心情哈

 

[php]  view plain  copy
 
  1. /** 
  2.   * alipayNotifyUrl 異步(處理支付成功後邏輯) 
  3.   */  
  4.  public function alipayNotifyUrl(){  
  5.   
  6.      require_once(APPPATH."/libraries/AliPay/lib/alipay_notify.class.php");  
  7.      // 調用支付寶支付接口配置信息  
  8.      $this->load->config('alipay_config');  
  9.      $alconfig['partner']=$this->config->item('partner');                // 合做身份者ID  
  10.      $alconfig['seller_id']=$this->config->item('seller_id');            // 收款支付寶帳號  
  11.      $alconfig['key']=$this->config->item('key');                        // MD5密鑰,安全檢驗碼  
  12.      $alconfig['notify_url']=$this->config->item('notify_url');          // 服務器異步通知頁面路徑  
  13.      $alconfig['return_url']=$this->config->item('return_url');          // 頁面跳轉同步通知頁面路徑  
  14.      $alconfig['input_charset']=$this->config->item('input_charset');    // 字符編碼格式  
  15.      $alconfig['cacert']=$this->config->item('cacert');                  // ca證書路徑地址  
  16.      $alconfig['transport']=$this->config->item('transport');            // 訪問模式  
  17.      $alconfig['payment_type']=$this->config->item('payment_type');      // 支付類型  
  18.      $alconfig['service']=$this->config->item('service');                // 產品類型  
  19.      $alconfig['sign_type']=$this->config->item('sign_type');            // 簽名方式  
  20.      //計算得出通知驗證結果  
  21.      $alipayNotify = new AlipayNotify($alconfig);  
  22.      $verify_result = $alipayNotify->verifyNotify();  
  23.   
  24.      // log_message('error',$verify_result); 能夠用ci自帶日誌調試或使用支付寶的logResult();  
  25.   
  26.      if($verify_result) {//驗證成功  
  27.   
  28.          //獲取支付寶的通知返回參數,可參考技術文檔中服務器異步通知參數列表  
  29.          //商戶訂單號  
  30.          $out_trade_no = $_POST['out_trade_no'];  
  31.          //支付寶交易號  
  32.          $trade_no = $_POST['trade_no'];  
  33.          //交易狀態  
  34.          $trade_status = $_POST['trade_status'];  
  35.   
  36.          if($_POST['trade_status'] == 'TRADE_SUCCESS') {  
  37.   
  38.              // 支付成功處理業務邏輯,例如修改訂單支付狀態等等  
  39.   
  40.              // >>>>>>>>>>>>>>>> 根據自身狀況,處理業務邏輯 <<<<<<<<<<<<<<<<<<<  
  41.   
  42.          }  
  43.          echo "success";     //請不要修改或刪除  
  44.             
  45.      } else {  
  46.   
  47.          //驗證失敗  
  48.          echo "fail";  
  49.   
  50.          //調試用,寫文本函數記錄程序運行狀況是否正常  
  51.          //logResult("這裏寫入想要調試的代碼變量值,或其餘運行的結果記錄");  
  52.      }  
  53.  }  



 

九、同步通知  內容以下:我也寫在了order控制器內了。看你心情哈

 

[php]  view plain  copy
 
  1. /** 
  2.   * alipayReturnUrl 支付寶頁面跳轉同步通知頁面(處理支付成功後提示頁面) 
  3.   * @author lyne 
  4.   */  
  5.  public function alipayReturnUrl(){  
  6.   
  7.      require_once(APPPATH."/libraries/AliPay/lib/alipay_notify.class.php");  
  8.      // 調用支付寶支付接口配置信息  
  9.      $this->load->config('alipay_config');  
  10.      $alconfig['partner']=$this->config->item('partner');             // 合做身份者ID  
  11.      $alconfig['seller_id']=$this->config->item('seller_id');         // 收款支付寶帳號  
  12.      $alconfig['key']=$this->config->item('key');                     // MD5密鑰,安全檢驗碼  
  13.      $alconfig['notify_url']=$this->config->item('notify_url');       // 服務器異步通知頁面路徑  
  14.      $alconfig['return_url']=$this->config->item('return_url');       // 頁面跳轉同步通知頁面路徑  
  15.      $alconfig['input_charset']=$this->config->item('input_charset'); // 字符編碼格式  
  16.      $alconfig['cacert']=$this->config->item('cacert');               // ca證書路徑地址  
  17.      $alconfig['transport']=$this->config->item('transport');         // 訪問模式  
  18.      $alconfig['payment_type']=$this->config->item('payment_type');   // 支付類型  
  19.      $alconfig['service']=$this->config->item('service');             // 產品類型  
  20.      $alconfig['sign_type']=$this->config->item('sign_type');         // 簽名方式  
  21.   
  22.      //計算得出通知驗證結果  
  23.      $alipayNotify = new AlipayNotify($alconfig);  
  24.      $verify_result = $alipayNotify->verifyReturn();  
  25.      if($verify_result) {//驗證成功  
  26.           
  27.          //獲取支付寶的通知返回參數,可參考技術文檔中頁面跳轉同步通知參數列表  
  28.          //商戶訂單號  
  29.          $out_trade_no = $_GET['out_trade_no'];  
  30.          //支付寶交易號  
  31.          $trade_no = $_GET['trade_no'];  
  32.          //交易狀態  
  33.          $trade_status = $_GET['trade_status'];  
  34.   
  35.          if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {  
  36.              //判斷該筆訂單是否在商戶網站中已經作過處理  
  37.              //若是沒有作過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程序  
  38.                
  39.              // echo '交易成功!跳轉成功頁面';  
  40.                
  41.              //若是有作過處理,不執行商戶的業務程序  
  42.          }else {  
  43.              echo "trade_status=".$_GET['trade_status'];  
  44.          }  
  45.   
  46.      } else {  
  47.          //驗證失敗  
  48.          //如要調試,請看alipay_notify.php頁面的verifyReturn函數  
  49.          echo "驗證失敗";  
  50.      }  
  51.  }  

 

十、即時到帳有密退款接口也都差很少,我這裏就很少說了。想必作到這裏你也玩轉支付寶支付了吧。是否是so easy~  

 

轉:http://blog.csdn.net/lyne_007/article/details/51752068

 


 

支付寶網頁即時到帳功能,可以讓用戶在線向開發者的支付寶帳號支付資金,交易資金即時到帳,幫助開發者快速回籠資金。 
交易步驟少,簡單、方便。 
交易資金三個月內可退款,提高買家購物保障。

本產品涵蓋如下接口功能:

    • 即時到帳交易接口(create_direct_pay_by_user)
    • 即時到帳批量退款有密接口(refund_fastpay_by_platform_pwd)
    • 應用範例

      1. 買家選擇心儀產品
        enter image description here

      2. 跳轉到收銀臺頁面
        0. 用戶能夠打開手機錢包選擇「掃一掃」,對準屏幕掃碼,待手機提示付款後選擇支付工具輸入密碼支付便可;
        image
        0. 若是不想使用手機支付,能夠點擊上圖所示頁面右側的「登陸帳戶付款」,輸入支付寶帳號和密碼登陸。
        image

      3. 買家選擇付款方式
        image

      4. 付款成功
        enter image description here

      注意:本流程僅爲示例,開發者可根據自身網站進行調整。

相關文章
相關標籤/搜索