日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 程序人生 > 隨筆 > CI框架集成支付寶即時到賬

CI框架集成支付寶即時到賬

來源:程序員人生   發布時間:2016-06-02 17:32:03 閱讀次數:8801次

不多說,直接上代碼,讓CI框架集成支付寶即時到賬

第一步,下載支付寶即時支付demo,我以utf8版本為例,下載下來的文件目錄如下

CI框架集成支付寶即時到賬

第二步,在CodeIgniter中 application/third_party 目錄下,新建文件夾alipay,將支付寶lib文件夾下的4個子文件全部放到alipay中

第三步,配置文件

在CodeIgniter中  application/config,新建alipay.php,將支付寶alipay.config.php的內容,全部搬進來,并且將數組$alipay_config重命名為$config

CI框架集成支付寶即時到賬


第四步,新建一個訂單控制器,代碼如下


load->view('order_show');
	}
	

  // 提交訂單,付款
  public function pay() {
     $order=$this->input->post();
	 
        //商戶訂單號,商戶網站訂單系統中唯一訂單號,必填
        $out_trade_no = $order['WIDout_trade_no'];
        //訂單名稱,必填
        $subject = $order['WIDsubject'];
        //付款金額,必填
        $total_fee = $order['WIDtotal_fee'];
        //商品描述,可空
        $body = $order['WIDbody'];


    // 加載支付寶配置
    $this->config->load('alipay', TRUE);
    // 加載支付寶支付請求類庫
    require_once(APPPATH."third_party/alipay/alipay_submit.class.php");
    $submit = new AlipaySubmit($this->config->item('alipay'));
   //構造要請求的參數數組,無需改
    $html_text = $submit->buildRequestForm(array(
		"service"       =>$this->config->item('service', 'alipay'),
		"partner"       => $this->config->item('partner', 'alipay'),
		"seller_id"  => $this->config->item('seller_id', 'alipay'),
		"payment_type"	=> $this->config->item('payment_type', 'alipay'),
		"notify_url"	=> $this->config->item('notify_url', 'alipay'),
		"return_url"	=> $this->config->item('return_url', 'alipay'),
		"anti_phishing_key"=>$this->config->item('anti_phishing_key', 'alipay'),
		"exter_invoke_ip"=>$this->config->item('exter_invoke_ip', 'alipay'),
		
		"out_trade_no"	=> $out_trade_no,
		"subject"	=> $subject,
		"total_fee"	=> $total_fee,
		"body"	=> $body,

      '_input_charset'    => $this->config->item('input_charset', 'alipay')
    ));

    // 渲染模板,原生的這么寫,我自己另外用smarty3
  echo $html_text;
  }

//支付寶付款后回調
// $method參數只能是'return'或'notify',對應URL
  public function callback ($method) {
    // 加載支付寶配置
    $this->config->load('alipay', TRUE);
    // 加載支付寶返回通知類庫
    require_once(APPPATH."third_party/alipay/alipay_notify.class.php");
    // 初始化支付寶返回通知類
    $alipayNotify = new AlipayNotify($this->config->item('alipay'));

    $input = array();
    $is_ajax = FALSE;
    $notify_status = 'success';
	

    // 這里做同步還是異步的判斷并獲取返回數據驗證請求
    switch ($method) {
      case 'notify':
        $result = $alipayNotify->verifyNotify();
        $input = $this->input->post();
        $is_ajax = TRUE;
        break;

      case 'return':
        $result = $alipayNotify->verifyReturn();
        $input = $this->input->get();
        break;
      
      default:
        return $this->out_not_found();
        break;
    }
	
	var_dump($input);exit;

    // 支付寶返回支付成功和交易結束標志
    if ($result && ($input['trade_status'] == 'TRADE_FINISHED' || $input['trade_status'] == 'TRADE_SUCCESS')) {
      $id = $input['out_trade_no'];

      // 驗證成功則更新訂單信息(略)
      // ...
    } else {
      // 否則置狀態為失敗
      $notify_status = 'fail';
    }

    if ($is_ajax) {
      // 異步方式調用模板輸出狀態
     // $this->view->load('alipay', array('status' => $notify_status));
	// echo "異步成功";
    } else {
      // 同步方式跳轉到訂單詳情控制器,redirect方法要你自己寫
      //return $this->redirect("order/view/$id#status:$notify_status");
	  //echo "同步成功";//
    }
  }

}
	

訂單顯示頁面,參考支付寶原來的就可以了,至此,就支付寶即時付款就集成好了,當然中間業務邏輯還沒有寫,各位根據自己的網站需要進行編寫吧

會遇到的問題,我約到過下面問題,通過百度解決了

MD5簽名驗證不通過

這才是真正坑爹的問題!之前測試一直是支付成功但返回調用驗證失敗,直到我一步一步跟到SDK的源碼里去對比要驗證的簽名串,才發現這根本就是SDK的一個BUG!請看alipay_core.function.php文件的paraFilter函數,這個函數的作用是過濾掉簽名參數和空值參數,以便生成簽名串。原來的SDK是這么寫的:

function paraFilter($para) {  $para_filter = array();  // 問題就在這  while (list ($key, $val) = each ($para)) {   if($key == "sign" || $key == "sign_type" || $val == "")continue;   else $para_filter[$key] = $para[$key];  }  return $para_filter;
}

問題就出在while循環的條件里,每次過濾參數,這里直接就把第一個返回參數body=xxx給過濾掉了,一旦我加上body=xxx變成完整的簽名參數,生成的MD5簽名就能對上。我百思不得其解的時候去查了PHP的文檔,根據each方法說明,每調用一次游標就會發生改變,而首次調用之前沒有調用reset()的話,就很可能被之前調用過這個數組的each()給弄錯游標。而每次代碼中每次都是從第二個參數開始,說明數組可能已經被其他程序調用過了(這個數組實際上是系統變量$_GET,但我實在沒在CI框架代碼中找到哪里調用的)。所以我想說的是: 好!好!寫!個!foreach!循環會死么! 修改后的代碼如下:

function paraFilter($para) {  // 增加這一行  reset($para);  $para_filter = array();  while (list ($key, $val) = each ($para)) {   if($key == "sign" || $key == "sign_type" || $val == "")continue;   else $para_filter[$key] = $para[$key];  }  return $para_filter;
}

這才算解決了簽名不正確的問題。


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 福利毛片 | 粉嫩精品一区二区三区在线观看 | 国产一区二区三区视频 | 亚洲一区二区成人 | 精品一区二区国产 | 欧美一区二区免费 | 波多野结衣观看 | av动漫一区| www.成人网 | 国产精品极品 | 日韩欧美视频 | 99精品视频免费观看 | 在线观看免费黄视频 | 一区二区三区四区国产精品 | 国产传媒一区 | 亚洲男人网站 | 久草热在线 | 色婷婷影院 | 中文字幕最新 | 精品不卡视频 | 欧美精品一区二区三区蜜桃视频 | 九九精品在线 | 91久久国产综合久久91精品网站 | 亚洲精品v天堂中文字幕 | 日本激情视频 | 91香蕉视频在线 | 久久99精品久久久久久久青青日本 | 特黄一级| 国产精品日韩 | 日韩三区在线 | 午夜精品久久久久久久 | 久久久久高清 | 国产精品久久久久久久久久东京 | 91免费观看 | 91精品国产91久久久久久 | 日韩一区二区三区在线 | 国产精品久久久久久久婷婷 | 国产精品久久久久久久免费大片 | 在线观看一区二区视频 | 国产精品一区二区三区四区 | 精品久久久久久久久久久久 |