天天看點

CI內建支付寶即時到賬支付接口

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

2、登入支付寶https://www.alipay.com/  下載下傳CA憑證。将證書放在下載下傳的demo檔案夾的根目錄下。

2、将下載下傳的create_direct_pay_by_user-PHP-UTF-8檔案夾改為AliPay;并到到CI架構libraries/ 目錄下。

3、在libraries/ 目錄下建立CI_Alipay.php 檔案,内容如下:

[php]  view plain  copy

  1. <?php  
  2. defined('BASEPATH') OR exit('No direct script access allowed');  
  3. // 加載支付寶支付  
  4. require_once APPPATH.'libraries/AliPay/lib/alipay_submit.class.php';  
  5. class CI_Alipay extends AlipaySubmit {  
  6.     public function __construct(){  
  7.         parent::__construct();  
  8.     }  
  9. }  

4、在CI架構application/config/目錄下 建立alipay_config.php  内容如下:

[php]  view plain  copy

  1. <?php  
  2. defined('BASEPATH') OR exit('No direct script access allowed');  
  3. //↓↓↓↓↓↓↓↓↓↓請在這裡配置您的基本資訊↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓  
  4. //合作身份者ID,簽約賬号,以2088開頭由16位純數字組成的字元串,檢視位址:https://b.alipay.com/order/pidAndKey.htm  
  5. $config['partner']      = '';  
  6. //收款支付寶賬号,以2088開頭由16位純數字組成的字元串,一般情況下收款賬号就是簽約賬号  
  7. $config['seller_id']    = $config['partner'];  
  8. // MD5密鑰,安全檢驗碼,由數字和字母組成的32位字元串,檢視位址:https://b.alipay.com/order/pidAndKey.htm  
  9. $config['key']          = '';  
  10. // 伺服器異步通知頁面路徑  需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常通路  
  11. $config['notify_url'] = 'http://'.$_SERVER['HTTP_HOST'].'/order/alipayNotifyUrl';  
  12. // 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常通路  
  13. $config['return_url'] = 'http://'.$_SERVER['HTTP_HOST'].'/order/alipayReturnUrl';  
  14. //簽名方式  
  15. $config['sign_type']    = strtoupper('MD5');  
  16. //字元編碼格式 目前支援 gbk 或 utf-8  
  17. $config['input_charset']= strtolower('utf-8');  
  18. //ca證書路徑位址,用于curl中ssl校驗  
  19. //請保證cacert.pem檔案在目前檔案夾目錄中  
  20. $config['cacert']    = APPPATH.'libraries/AliPay/cacert.pem';  
  21. //通路模式,根據自己的伺服器是否支援ssl通路,若支援請選擇https;若不支援請選擇http  
  22. $config['transport']    = 'http';  
  23. // 支付類型 ,無需修改  
  24. $config['payment_type'] = "1";  
  25. // 産品類型,無需修改  
  26. $config['service'] = "create_direct_pay_by_user";  
  27. //↑↑↑↑↑↑↑↑↑↑請在這裡配置您的基本資訊↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑  
  28. //↓↓↓↓↓↓↓↓↓↓ 請在這裡配置防釣魚資訊,如果沒開通防釣魚功能,為空即可 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓  
  29. // 防釣魚時間戳  若要使用請調用類檔案submit中的query_timestamp函數  
  30. $config['anti_phishing_key'] = "";  
  31. // 用戶端的IP位址 非區域網路的外網IP位址,如:221.0.0.1  
  32. $config['exter_invoke_ip'] = "";  
  33. //↑↑↑↑↑↑↑↑↑↑請在這裡配置防釣魚資訊,如果沒開通防釣魚功能,為空即可 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑  

5、在項目控制器controllers/ 目錄下建立order.php   内容如下:

[php]  view plain  copy

  1. <?php  
  2.     defined('BASEPATH') OR exit('No direct script access allowed');  
  3.     class Order extends MY_Controller {  
  4.         public function __construct(){  
  5.             $this->isNeedLogin = TRUE;  
  6.             parent::__construct();  
  7.         }  
  8.         public function aliPay($id){  
  9.             // 調用支付寶支付接口配置資訊  
  10.             $this->load->config('alipay_config',TRUE);  
  11.             // 加載支付寶支付請求類庫  
  12.             $this->load->library('CI_Alipay',$this->config->item('alipay_config'));  
  13.             $parameter = array(  
  14.               'service'           => $this->config->item('service','alipay_config'),  
  15.               'partner'           => $this->config->item('partner','alipay_config'),  
  16.               'payment_type'      => $this->config->item('payment_type','alipay_config'),  
  17.               'notify_url'        => $this->config->item('notify_url','alipay_config'),  
  18.               'return_url'        => $this->config->item('return_url','alipay_config'),  
  19.               'seller_id'         => $this->config->item('seller_id','alipay_config'),  
  20.               'out_trade_no'      => '訂單編号',     // 訂單編号  
  21.               'subject'           => '填寫訂單商品', // 訂單商品  
  22.               'total_fee'         => '訂單總額',     // 訂單總額  
  23.               'body'              => '商品描述',     // 商品描述  
  24.               'show_url'          => '',             // 選填    
  25.               'anti_phishing_key' => '',             // 選填  
  26.               'exter_invoke_ip'   => '',             // 選填  
  27.               '_input_charset'    => $this->config->item('input_charset','alipay_config')  
  28.             );  
  29.             $body = $this->ci_alipay->buildRequestForm($parameter,"get","确認");  
  30.             echo $body;  
  31.         }  
  32.     }  

6、以上步驟完成,下面支付就交給支付寶了。可以選擇直接掃二維碼支付,可以登入支付寶賬号後操作

7、支付完成後,支付寶會通過異步通知位址(即alipay_config.php檔案中的$config['notify_url']位址),随後支付寶通過同步通知位址(即alipay_config.php檔案中的$config['return_url']位址)。

7-1、那麼一般情況我們會在異步通知内接收到支付成功資訊後處理業務邏輯。注意:在異步通知内收到通知後,一定要傳回success告知支付寶我已經收到你的通知,讓它閉嘴。否則它會在25小時以内完成8次通知(通知的間隔頻率一般是:4m,10m,10m,1h,2h,6h,15h);

7-2、通過同步通知下收到成功資訊後處理一些簡單驗證後跳轉或提示成功資訊。

8、異步通知  内容如下:我也寫在了order控制器内了。看你心情哈

[php]  view plain  copy

  1.  public function alipayNotifyUrl(){  
  2.      require_once(APPPATH."/libraries/AliPay/lib/alipay_notify.class.php");  
  3.      // 調用支付寶支付接口配置資訊  
  4.      $this->load->config('alipay_config');  
  5.      $alconfig['partner']=$this->config->item('partner');                // 合作身份者ID  
  6.      $alconfig['seller_id']=$this->config->item('seller_id');            // 收款支付寶賬号  
  7.      $alconfig['key']=$this->config->item('key');                        // MD5密鑰,安全檢驗碼  
  8.      $alconfig['notify_url']=$this->config->item('notify_url');          // 伺服器異步通知頁面路徑  
  9.      $alconfig['return_url']=$this->config->item('return_url');          // 頁面跳轉同步通知頁面路徑  
  10.      $alconfig['input_charset']=$this->config->item('input_charset');    // 字元編碼格式  
  11.      $alconfig['cacert']=$this->config->item('cacert');                  // ca證書路徑位址  
  12.      $alconfig['transport']=$this->config->item('transport');            // 通路模式  
  13.      $alconfig['payment_type']=$this->config->item('payment_type');      // 支付類型  
  14.      $alconfig['service']=$this->config->item('service');                // 産品類型  
  15.      $alconfig['sign_type']=$this->config->item('sign_type');            // 簽名方式  
  16.      //計算得出通知驗證結果  
  17.      $alipayNotify = new AlipayNotify($alconfig);  
  18.      $verify_result = $alipayNotify->verifyNotify();  
  19.      // log_message('error',$verify_result); 可以用ci自帶日志調試或使用支付寶的logResult();  
  20.      if($verify_result) {//驗證成功  
  21.          //擷取支付寶的通知傳回參數,可參考技術文檔中伺服器異步通知參數清單  
  22.          //商戶訂單号  
  23.          $out_trade_no = $_POST['out_trade_no'];  
  24.          //支付寶交易号  
  25.          $trade_no = $_POST['trade_no'];  
  26.          //交易狀态  
  27.          $trade_status = $_POST['trade_status'];  
  28.          if($_POST['trade_status'] == 'TRADE_SUCCESS') {  
  29.              // 支付成功處理業務邏輯,例如修改訂單支付狀态等等  
  30.              // >>>>>>>>>>>>>>>> 根據自身情況,處理業務邏輯 <<<<<<<<<<<<<<<<<<<  
  31.          }  
  32.          echo "success";     //請不要修改或删除  
  33.      } else {  
  34.          //驗證失敗  
  35.          echo "fail";  
  36.          //調試用,寫文本函數記錄程式運作情況是否正常  
  37.          //logResult("這裡寫入想要調試的代碼變量值,或其他運作的結果記錄");  
  38.      }  
  39.  }  

9、同步通知  内容如下:我也寫在了order控制器内了。看你心情哈

[php]  view plain  copy

  1.  public function alipayReturnUrl(){  
  2.      require_once(APPPATH."/libraries/AliPay/lib/alipay_notify.class.php");  
  3.      // 調用支付寶支付接口配置資訊  
  4.      $this->load->config('alipay_config');  
  5.      $alconfig['partner']=$this->config->item('partner');             // 合作身份者ID  
  6.      $alconfig['seller_id']=$this->config->item('seller_id');         // 收款支付寶賬号  
  7.      $alconfig['key']=$this->config->item('key');                     // MD5密鑰,安全檢驗碼  
  8.      $alconfig['notify_url']=$this->config->item('notify_url');       // 伺服器異步通知頁面路徑  
  9.      $alconfig['return_url']=$this->config->item('return_url');       // 頁面跳轉同步通知頁面路徑  
  10.      $alconfig['input_charset']=$this->config->item('input_charset'); // 字元編碼格式  
  11.      $alconfig['cacert']=$this->config->item('cacert');               // ca證書路徑位址  
  12.      $alconfig['transport']=$this->config->item('transport');         // 通路模式  
  13.      $alconfig['payment_type']=$this->config->item('payment_type');   // 支付類型  
  14.      $alconfig['service']=$this->config->item('service');             // 産品類型  
  15.      $alconfig['sign_type']=$this->config->item('sign_type');         // 簽名方式  
  16.      //計算得出通知驗證結果  
  17.      $alipayNotify = new AlipayNotify($alconfig);  
  18.      $verify_result = $alipayNotify->verifyReturn();  
  19.      if($verify_result) {//驗證成功  
  20.          //擷取支付寶的通知傳回參數,可參考技術文檔中頁面跳轉同步通知參數清單  
  21.          //商戶訂單号  
  22.          $out_trade_no = $_GET['out_trade_no'];  
  23.          //支付寶交易号  
  24.          $trade_no = $_GET['trade_no'];  
  25.          //交易狀态  
  26.          $trade_status = $_GET['trade_status'];  
  27.          if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {  
  28.              //判斷該筆訂單是否在商戶網站中已經做過處理  
  29.              //如果沒有做過處理,根據訂單号(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,并執行商戶的業務程式  
  30.              // echo '交易成功!跳轉成功頁面';  
  31.              //如果有做過處理,不執行商戶的業務程式  
  32.          }else {  
  33.              echo "trade_status=".$_GET['trade_status'];  
  34.          }  
  35.      } else {  
  36.          //驗證失敗  
  37.          //如要調試,請看alipay_notify.php頁面的verifyReturn函數  
  38.          echo "驗證失敗";  
  39.      }  
  40.  }  
CI內建支付寶即時到賬支付接口

10、即時到賬有密退款接口也都差不多,我這裡就不多說了。

原文位址 : http://blog.csdn.net/lyne_007/article/details/51752068