專案

一般

配置概況

動作

Feature #33

進行中
SC SC

購物車上線

Feature #33: 購物車上線

是由 Sashiba Chou約 5 年 前加入. 於 超過 4 年 前更新.

狀態:
In Progress
優先權:
High
被分派者:
開始日期:
2021-02-01
完成日期:
2021-08-18 (逾期 超過 4 年)
完成比例:

10%

預估工時:
200:00 小時
耗用工時:

檔案

cart1.jpg (185 KB) cart1.jpg Sashiba Chou, 2021-07-21 08:42
billing_data.PNG (47.3 KB) billing_data.PNG Sashiba Chou, 2021-07-21 08:57

SC 是由 Sashiba Chou超過 4 年 前更新 動作 #1

  • 檔案 cart1.jpg cart1.jpg 已新增
  • 檔案 billing_data.PNG billing_data.PNG 已新增
  • 完成日期2021-02-28 變更為 2021-08-18
  • 狀態New 變更為 In Progress
  • 完成比例0 變更為 10
  • 預估工時40:00 小時 變更為 200:00 小時

h1. 名詞解釋

  • +RetuenURL+: 付款完成通知回傳網址, +幕後(Server POST)+, 請勿設定與 Client 端接收付款結果網址 OrderResultURL 相同位置,避免程式判斷錯誤; 請正確回應 1|OK 給綠界, (ex. http://your.web.site/receive.php)
  • +ClientBackURL+: Client 端返回特店的按鈕連結, 消費者點選此按鈕後,會將頁面導回到此設定的網址(+不會帶付款結果+)
  • +OrderResultURL+: Client 端回傳付款結果網址, 付款完成後,綠界會將付款結果參數以幕前(Client POST)回傳到該網址。若與[ClientBackURL]同時設定,將會以此參數為主。銀聯卡及非即時交易(ATM、CVS、BARCODE)不支援此參數。建議在測試階段時先不要設定此參數,可將畫面停留在綠界,看見綠界所提供的錯誤訊息,便可有效除錯

Credit card

  • +PaymentInfoURL+: Server 端回傳付款相關資訊, 訂單建立完成後(+非付款完成+),綠界會 Server 端背景回傳消費者付款方式相關資訊(例:銀行代碼、繳費虛擬帳號繳費期限…等)(+頁面將會停留在綠界,顯示繳費的相關資訊。+),於網頁端回應 1|OK ??ex. http://your.web.site/paymentinfo.php??

ALL, ATM, CVS, BARCODE

  • +ClientRedirectURL+: Client 端回傳付款相關資訊; 訂單建立完成後(非付款完成),綠界會 Client 端回傳消費者付款方式相關資訊(例:銀行代碼、繳費虛擬帳號繳費期限…等)且將頁面轉到特店指定的頁面。若設定此參數,將會使設定的返回特店的按鈕連結[ClientBackURL]失效(ex. http://your.web.site/ClientRedirectURL.php)

ALL, ATM, CVS, BARCODE

h1. 程式碼

  • D:\Code\Web\hoosk_beasincere\hoosk\hoosk0\controllers\frontend*Cart.php*
  • public function index()

$this->load->view('templates/cart', $this->data);

  • public function insert_cart()
  • public function update_cart()
  • public function remove_cart($rowid)
  • public function billing_data()

$this->load->view('templates/billing_data', $this->data);

!billing_data.png!

  • public function checkout()

    //儲存交易至資料庫
    $oauth_uid = $this->session->userdata('oauth_uid');
    $cart_info = $_POST['cart'];
    $transaction_details = [];
    ...
    $purchase_datetime = date("Y/m/d H:i:s");
    $MerchantTradeNo = "Sincere".time() ;
    $order_no = "order_".time() ;
    $TotalAmount = 0;

    foreach ($cart_info as $id => $cart) {     
        $data = array(
        	'oauth_uid'	=>	$oauth_uid,
            ...
        	'lesson_id'	=>	$cart['id'],
        	'quantity'	=>	$cart['qty'],
        	'paid'	=>	0,
        	'should_pay'	=>	$cart['price'] * $cart['qty'],
        	'TradeAmt'	=>	0,
        	//'TotalAmount' => $cart['price'] * $cart['qty'],
        	'purchase_datetime'	=>	$purchase_datetime,
        	'description' =>	$cart['description'],
        	'rowid'	=>	$cart['rowid'],
            'MerchantTradeNo'	=>	$MerchantTradeNo,
            'order_no'	=>	$order_no,
            'activity_title'	=>	$cart['name'],
            'price'	=>	$cart['price'],
            'subtotal'	=>	$cart['price'] * $cart['qty'],
        );

        //需要做error handling
        //檢查重複購買

        if($this->Transaction_model->insert_transaction($data)){
        	$TotalAmount += $data['subtotal'];
        	array_push($transaction_details, $data);
        }
       
    }
    $this->cart->destroy();    
	$this->init_ecpay(array('MerchantTradeNo'=>$MerchantTradeNo,'MerchantTradeDate'=>$purchase_datetime, 'TotalAmount'=>$TotalAmount, 'transaction_details'=>$transaction_details));

  • private function init_ecpay($data)

        $obj->Send['StoreExpireDate']	= 3;
    	//CVS:以分鐘為單位 
		//BARCODE:以天為單位 
		//若未設定此參數,皆為預設值 7 天 

  • public function insert_payment_info()
  • public function get_lessons()
  • public function show_payment_info($order_no)
  • public function receive()
  • public function send_email($data)

!cart1.jpg!

動作

匯出至 PDF Atom