本文為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
- defined('BASEPATH') OR exit('No direct script access allowed');
- // 加載支付寶支付
- require_once APPPATH.'libraries/AliPay/lib/alipay_submit.class.php';
- /**
- * 為CI擴展支付寶支付類
- */
- class CI_Alipay extends AlipaySubmit {
- public function __construct(){
- parent::__construct();
- }
- }
4、在CI框架application/config/目錄下 新建alipay_config.php 內容如下:
- <?php
- defined('BASEPATH') OR exit('No direct script access allowed');
- /* *
- * 配置文件
- * 版本:3.4
- * 修改日期:2016-03-08
- * 說明:
- * 以下代碼只是為了方便商戶測試而提供的樣例代碼,商戶可以根據自己網站的需要,按照技術文檔編寫,並非一定要使用該代碼。
- * 該代碼僅供學習和研究支付寶接口使用,只是提供一個參考。
- * 安全校驗碼查看時,輸入支付密碼后,頁面呈灰色的現象,怎么辦?
- * 解決方法:
- * 1、檢查瀏覽器配置,不讓瀏覽器做彈框屏蔽設置
- * 2、更換瀏覽器或電腦,重新登錄查詢。
- */
- //↓↓↓↓↓↓↓↓↓↓請在這里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
- //合作身份者ID,簽約賬號,以2088開頭由16位純數字組成的字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
- $config['partner'] = '';
- //收款支付寶賬號,以2088開頭由16位純數字組成的字符串,一般情況下收款賬號就是簽約賬號
- $config['seller_id'] = $config['partner'];
- // MD5密鑰,安全檢驗碼,由數字和字母組成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
- $config['key'] = '';
- // 服務器異步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常訪問
- $config['notify_url'] = 'http://'.$_SERVER['HTTP_HOST'].'/order/alipayNotifyUrl';
- // 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常訪問
- $config['return_url'] = 'http://'.$_SERVER['HTTP_HOST'].'/order/alipayReturnUrl';
- //簽名方式
- $config['sign_type'] = strtoupper('MD5');
- //字符編碼格式 目前支持 gbk 或 utf-8
- $config['input_charset']= strtolower('utf-8');
- //ca證書路徑地址,用於curl中ssl校驗
- //請保證cacert.pem文件在當前文件夾目錄中
- $config['cacert'] = APPPATH.'libraries/AliPay/cacert.pem';
- //訪問模式,根據自己的服務器是否支持ssl訪問,若支持請選擇https;若不支持請選擇http
- $config['transport'] = 'http';
- // 支付類型 ,無需修改
- $config['payment_type'] = "1";
- // 產品類型,無需修改
- $config['service'] = "create_direct_pay_by_user";
- //↑↑↑↑↑↑↑↑↑↑請在這里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
- //↓↓↓↓↓↓↓↓↓↓ 請在這里配置防釣魚信息,如果沒開通防釣魚功能,為空即可 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
- // 防釣魚時間戳 若要使用請調用類文件submit中的query_timestamp函數
- $config['anti_phishing_key'] = "";
- // 客戶端的IP地址 非局域網的外網IP地址,如:221.0.0.1
- $config['exter_invoke_ip'] = "";
- //↑↑↑↑↑↑↑↑↑↑請在這里配置防釣魚信息,如果沒開通防釣魚功能,為空即可 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
5、在項目控制器controllers/ 目錄下新建order.php 內容如下:
- <?php
- defined('BASEPATH') OR exit('No direct script access allowed');
- /**
- * Order Controller
- * 訂單控制器
- */
- class Order extends MY_Controller {
- public function __construct(){
- $this->isNeedLogin = TRUE;
- parent::__construct();
- }
- /**
- * aliPay 【支付寶支付接口】
- * @param int $id 訂單ID
- * @author lyne
- */
- public function aliPay($id){
- // 調用支付寶支付接口配置信息
- $this->load->config('alipay_config',TRUE);
- /*>>>>>>>>>>>>> 查預先生成的訂單信息,根據自己情況 <<<<<<<<<<<<<<
- 根據訂單ID查詢預訂單信息
- 包括:
- 訂單總額、訂單編號、訂單商品等。
- >>>>>>>>>>>>> 根據自己情況 END <<<<<<<<<<<<<<<<<*/
- // 加載支付寶支付請求類庫
- $this->load->library('CI_Alipay',$this->config->item('alipay_config'));
- $parameter = array(
- 'service' => $this->config->item('service','alipay_config'),
- 'partner' => $this->config->item('partner','alipay_config'),
- 'payment_type' => $this->config->item('payment_type','alipay_config'),
- 'notify_url' => $this->config->item('notify_url','alipay_config'),
- 'return_url' => $this->config->item('return_url','alipay_config'),
- 'seller_id' => $this->config->item('seller_id','alipay_config'),
- 'out_trade_no' => '訂單編號', // 訂單編號
- 'subject' => '填寫訂單商品', // 訂單商品
- 'total_fee' => '訂單總額', // 訂單總額
- 'body' => '商品描述', // 商品描述
- 'show_url' => '', // 選填
- 'anti_phishing_key' => '', // 選填
- 'exter_invoke_ip' => '', // 選填
- '_input_charset' => $this->config->item('input_charset','alipay_config')
- );
- $body = $this->ci_alipay->buildRequestForm($parameter,"get","確認");
- echo $body;
- }
- }
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控制器內了。看你心情哈
- /**
- * alipayNotifyUrl 異步(處理支付成功后邏輯)
- */
- public function alipayNotifyUrl(){
- require_once(APPPATH."/libraries/AliPay/lib/alipay_notify.class.php");
- // 調用支付寶支付接口配置信息
- $this->load->config('alipay_config');
- $alconfig['partner']=$this->config->item('partner'); // 合作身份者ID
- $alconfig['seller_id']=$this->config->item('seller_id'); // 收款支付寶賬號
- $alconfig['key']=$this->config->item('key'); // MD5密鑰,安全檢驗碼
- $alconfig['notify_url']=$this->config->item('notify_url'); // 服務器異步通知頁面路徑
- $alconfig['return_url']=$this->config->item('return_url'); // 頁面跳轉同步通知頁面路徑
- $alconfig['input_charset']=$this->config->item('input_charset'); // 字符編碼格式
- $alconfig['cacert']=$this->config->item('cacert'); // ca證書路徑地址
- $alconfig['transport']=$this->config->item('transport'); // 訪問模式
- $alconfig['payment_type']=$this->config->item('payment_type'); // 支付類型
- $alconfig['service']=$this->config->item('service'); // 產品類型
- $alconfig['sign_type']=$this->config->item('sign_type'); // 簽名方式
- //計算得出通知驗證結果
- $alipayNotify = new AlipayNotify($alconfig);
- $verify_result = $alipayNotify->verifyNotify();
- // log_message('error',$verify_result); 可以用ci自帶日志調試或使用支付寶的logResult();
- if($verify_result) {//驗證成功
- //獲取支付寶的通知返回參數,可參考技術文檔中服務器異步通知參數列表
- //商戶訂單號
- $out_trade_no = $_POST['out_trade_no'];
- //支付寶交易號
- $trade_no = $_POST['trade_no'];
- //交易狀態
- $trade_status = $_POST['trade_status'];
- if($_POST['trade_status'] == 'TRADE_SUCCESS') {
- // 支付成功處理業務邏輯,例如修改訂單支付狀態等等
- // >>>>>>>>>>>>>>>> 根據自身情況,處理業務邏輯 <<<<<<<<<<<<<<<<<<<
- }
- echo "success"; //請不要修改或刪除
- } else {
- //驗證失敗
- echo "fail";
- //調試用,寫文本函數記錄程序運行情況是否正常
- //logResult("這里寫入想要調試的代碼變量值,或其他運行的結果記錄");
- }
- }
9、同步通知 內容如下:我也寫在了order控制器內了。看你心情哈
- /**
- * alipayReturnUrl 支付寶頁面跳轉同步通知頁面(處理支付成功后提示頁面)
- * @author lyne
- */
- public function alipayReturnUrl(){
- require_once(APPPATH."/libraries/AliPay/lib/alipay_notify.class.php");
- // 調用支付寶支付接口配置信息
- $this->load->config('alipay_config');
- $alconfig['partner']=$this->config->item('partner'); // 合作身份者ID
- $alconfig['seller_id']=$this->config->item('seller_id'); // 收款支付寶賬號
- $alconfig['key']=$this->config->item('key'); // MD5密鑰,安全檢驗碼
- $alconfig['notify_url']=$this->config->item('notify_url'); // 服務器異步通知頁面路徑
- $alconfig['return_url']=$this->config->item('return_url'); // 頁面跳轉同步通知頁面路徑
- $alconfig['input_charset']=$this->config->item('input_charset'); // 字符編碼格式
- $alconfig['cacert']=$this->config->item('cacert'); // ca證書路徑地址
- $alconfig['transport']=$this->config->item('transport'); // 訪問模式
- $alconfig['payment_type']=$this->config->item('payment_type'); // 支付類型
- $alconfig['service']=$this->config->item('service'); // 產品類型
- $alconfig['sign_type']=$this->config->item('sign_type'); // 簽名方式
- //計算得出通知驗證結果
- $alipayNotify = new AlipayNotify($alconfig);
- $verify_result = $alipayNotify->verifyReturn();
- if($verify_result) {//驗證成功
- //獲取支付寶的通知返回參數,可參考技術文檔中頁面跳轉同步通知參數列表
- //商戶訂單號
- $out_trade_no = $_GET['out_trade_no'];
- //支付寶交易號
- $trade_no = $_GET['trade_no'];
- //交易狀態
- $trade_status = $_GET['trade_status'];
- if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {
- //判斷該筆訂單是否在商戶網站中已經做過處理
- //如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程序
- // echo '交易成功!跳轉成功頁面';
- //如果有做過處理,不執行商戶的業務程序
- }else {
- echo "trade_status=".$_GET['trade_status'];
- }
- } else {
- //驗證失敗
- //如要調試,請看alipay_notify.php頁面的verifyReturn函數
- echo "驗證失敗";
- }
- }
10、即時到賬有密退款接口也都差不多,我這里就不多說了。想必做到這里你也玩轉支付寶支付了吧。是不是so easy~
轉:http://blog.csdn.net/lyne_007/article/details/51752068
支付寶網頁即時到賬功能,可讓用戶在線向開發者的支付寶賬號支付資金,交易資金即時到賬,幫助開發者快速回籠資金。
交易步驟少,簡單、方便。
交易資金三個月內可退款,提升買家購物保障。
本產品涵蓋以下接口功能:
- 即時到賬交易接口(create_direct_pay_by_user)
- 即時到賬批量退款有密接口(refund_fastpay_by_platform_pwd)
-
應用范例
-
買家選擇心儀產品
-
跳轉到收銀台頁面
0. 用戶可以打開手機錢包選擇“掃一掃”,對准屏幕掃碼,待手機提示付款后選擇支付工具輸入密碼支付即可;
0. 如果不想使用手機支付,可以點擊上圖所示頁面右側的“登錄賬戶付款”,輸入支付寶賬號和密碼登錄。 -
買家選擇付款方式
-
付款成功
注意:本流程僅為示例,開發者可根據自身網站進行調整。
-