# 綠界金流(參考SDK版) ###### tags: `金流` ## 參考連結 [金流應用](https://www.ecpay.com.tw/Service/API_Dwnld) ___ ```php= public function infomationCheck(Request $request) { $user = Auth::user(); $shipping_status = ShippingStatus::orderBy('sort', 'asc')->first(); $order_status = OrderStatus::orderBy('sort', 'asc')->first(); $order = Order::create([ 'user_id' => $user->id, 'order_no' => 'DP' . time() . rand(1, 9999), 'name' => $request->name, 'phone' => $request->phone, 'email' => $request->email, 'county' => $request->county, 'district' => $request->district, 'zipcode' => $request->zipcode, 'address' => $request->address, 'price' => 99999999, 'pay_type' => Session::get('payment'), 'shipping' => Session::get('shipment'), 'shipping_fee' => 99999999, 'shipping_status_id' => $shipping_status->id, 'order_status_id' => $order_status->id, 'remark' => '', ]); $subPrice = 0; $cartData = \Cart::getContent(); // items提供給金流商顯示商品 $items = []; foreach ($cartData as $data) { $productId = $data->id; $product = Product::find($productId); $subPrice += $data->quantity * $product->price; OrderDetail::create([ 'order_id' => $order->id, 'product_id' => $product->id, 'qty' => $data->quantity, 'old' => $product->tojson() ]); $new_ary = [ 'name' => $product->name, 'qty' => $data->quantity, 'price' => $product->price, 'unit' => '個' ]; array_push($items, $new_ary); } $fee = $subPrice > 1000 ? 0 : 60; $order->update([ 'price' => $subPrice + $fee, 'shipping_fee' => $fee, ]); $array = [ 'MerchantID' => env('ECPAY_MERCHANT_ID'), 'MerchantTradeNo' => $order->order_no, 'MerchantTradeDate' => date('Y/m/d H:i:s'), 'PaymentType'=> 'aio', 'TotalAmount' => $order->price, 'TradeDesc' => 'ecpay 商城購物', 'ItemName' => '手機 20 元 X2#隨身碟60 元 X1', 'ReturnURL' => route('return'), 'ChoosePayment' => 'Credit', 'EncryptType'=>1 ]; $CheckMacValue = $this->generate($array,env('ECPAY_HASH_KEY'),env('ECPAY_HASH_IV')); $url='https://payment-stage.ecpay.com.tw/Cashier/AioCheckOut/V5'; return $this->HtmlEncode($array,$url,$CheckMacValue); } public function generate($arParameters = array(), $HashKey = '', $HashIV = '', $encType = 0) { $sMacValue = ''; if (isset($arParameters)) { // arParameters 為傳出的參數,並且做字母 A-Z 排序 unset($arParameters['CheckMacValue']); ksort($arParameters); // 組合字串 $sMacValue = 'HashKey=' . $HashKey; foreach ($arParameters as $key => $value) { $sMacValue .= '&' . $key . '=' . $value; } $sMacValue .= '&HashIV=' . $HashIV; // URL Encode 編碼 $sMacValue = urlencode($sMacValue); // 轉成小寫 $sMacValue = strtolower($sMacValue); // 取代為與 dotNet 相符的字元 $sMacValue = str_replace('%2d', '-', $sMacValue); $sMacValue = str_replace('%5f', '_', $sMacValue); $sMacValue = str_replace('%2e', '.', $sMacValue); $sMacValue = str_replace('%21', '!', $sMacValue); $sMacValue = str_replace('%2a', '*', $sMacValue); $sMacValue = str_replace('%28', '(', $sMacValue); $sMacValue = str_replace('%29', ')', $sMacValue); // 編碼 $sMacValue = hash('sha256', $sMacValue); $sMacValue = strtoupper($sMacValue); } return $sMacValue; } public function HtmlEncode($arParameters, $ServiceURL, $szCheckMacValue, $paymentButton = '') { $target = "_self"; //生成表單,自動送出 $szHtml = '<!DOCTYPE html>'; $szHtml .= '<html>'; $szHtml .= '<head>'; $szHtml .= '<meta charset="utf-8">'; $szHtml .= '</head>'; $szHtml .= '<body>'; $szHtml .= "<form id=\"__ecpayForm\" method=\"post\" target=\"{$target}\" action=\"{$ServiceURL}\">"; foreach ($arParameters as $keys => $value) { $szHtml .= "<input type=\"hidden\" name=\"{$keys}\" value=\"". htmlentities($value) . "\" />"; } $szHtml .= "<input type=\"hidden\" name=\"CheckMacValue\" value=\"{$szCheckMacValue}\" />"; if(!empty($paymentButton)) { $szHtml .= "<input type=\"submit\" id=\"__paymentButton\" value=\"{$paymentButton}\" />"; } $szHtml .= '</form>'; if(empty($paymentButton)) { $szHtml .= '<script type="text/javascript">document.getElementById("__ecpayForm").submit();</script>'; } $szHtml .= '</body>'; $szHtml .= '</html>'; return $szHtml; } ```