Ecpay 2in1 - Laravel 5 version
整合綠界線上刷卡及超商物流, (*1)
本repository 部份fork自ScottChayaa的https://github.com/ScottChayaa/Allpay ,謹此聲明。, (*2)
適用對象:以Laravel 5開發商務網站,欲使用綠界線上金流、物流服務。, (*3)
實作版本:Laravel 5.2, (*4)
本版的線上金流程式庫因當初專案需求,先引用歐付寶的Library,但後來因有超商到店付的需求,所以轉而使用綠界的線上金流&物流服務,為什麼是綠界!?, (*5)
歐付寶跟綠界基本上是同一家公司,歐付寶現在主推行動支付,物流的業務又撥回給先前購併的綠界,為求省事只好將金流與物流全轉到綠界。, (*6)
還好兩家公司的金流API參數都一致,所以置換上並無多大困擾。後續有時間再改回Ecpay自家的程式庫。, (*7)
若有超商貨到付款的需求者,建議與綠界簽約時,最好金流、物流都一起簽,省的到時要加簽又要花好幾天時間。, (*8)
step 1 : Download the package, (*9)
composer命令安裝, (*10)
composer require kennychou3896/allpay2in1 dev-master, (*11)
或者是新增package至composer.json, (*12)
"require": { "kennychou3896/allpay2in1": "dev-master" },, (*13)
然後更新安裝, (*14)
composer update, (*15)
或全新安裝, (*16)
composer install, (*17)
step 2 : Modify config file, (*18)
增加config/app.php
中的providers
和aliases
的參數 。, (*19)
'providers' => [ // ... Kennychou3896\Allpay2in1\AllpayServiceProvider::class, ], (*20)
'aliases' => [ // ... 'Allpay' => Kennychou3896\Allpay2in1\Facade\Allpay::class, ], (*21)
step 3 : Publish config to your project, (*22)
執行下列命令,將package的config檔配置到你的專案中, (*23)
php artisan vendor:publish, (*24)
至config/allpay.php中確認Allpay設定:, (*25)
return [ 'ServiceURL' => 'http://payment-stage.ecpay.com.tw/Cashier/AioCheckOut', 'HashKey' => '5294y06JbISpM5x9', //這是綠界給的test Key ,正式上線由此抽換為你的Key 'HashIV' => 'v77hoKGq4kWxNNIS', 'MerchantID' => '2000132', ];
**How To Use -->線上刷卡篇, (*26)
在Controller中, (*27)
use Allpay; public function Demo() { //Official Example : //https://github.com/allpay/PHP/blob/master/AioSDK/example/sample_Credit_CreateOrder.php //基本參數(可依系統規劃自行調整) Allpay::i()->Send['ReturnURL'] = "http://www.yourwebsites.com.tw/ReturnURL" ; //交易結果回報的網址 Allpay::i()->Send['ClientBackURL'] = "http://www.yourwebsites.com.tw/ClientBackURL" ; //交易結束,讓user導回的網址 Allpay::i()->Send['MerchantTradeNo'] = "Test".time() ; //訂單編號 Allpay::i()->Send['MerchantTradeDate'] = date('Y/m/d H:i:s'); //交易時間 Allpay::i()->Send['TotalAmount'] = 2000; //交易金額 Allpay::i()->Send['TradeDesc'] = "good to drink" ; //交易描述 Allpay::i()->Send['EncryptType'] = '1' ; Allpay::i()->Send['ChoosePayment'] = "Credit" ; //付款方式:信用卡 Allpay::i()->Send['PaymentType'] = 'aio' ; //訂單的商品資料 array_push(Allpay::i()->Send['Items'], array('Name' => "美美小包包", 'Price' => (int)"2000",'Currency' => "元", 'Quantity' => (int) "1", 'URL' => "http://www.yourwebsites.com.tw/Product")); //Go to EcPay echo "線上刷卡頁面導向中..."; echo Allpay::i()->CheckOutForm(); //開發階段,如果你希望看到表單的內容,可以改為以下敘述: //echo Allpay::i()->CheckOutForm('按我,才送出'); }
超商物流篇--到店付, (*28)
1.選擇『到付店』: Allpay::l()->Send['MerchantTradeNo'] = 'Test-'.date('YmdHis'); Allpay::l()->Send['LogisticsSubType'] = 'UNIMARTC2C'; //或FAMIC2C,全家 Allpay::l()->Send['IsCollection'] = 'N';//是否代收貨款 Allpay::l()->Send['ServerReplyURL'] = url('shop_option_reply'); //超商系統回覆路徑post Allpay::l()->Send['ExtraData'] = ''; //附帶資料 Allpay::l()->Send['Device'] = '0'; $logisticsForm = Allpay::l()->CvsMap(); echo $logisticsForm; 2.取得『到付店』之回覆資訊: $data = array(); $data['merchant_trade_no'] = $request->input('MerchantTradeNo'); //訂單編號 $data['LogisticsSubType'] = $request->input('LogisticsSubType'); //物流通路代碼,如統一:UNIMART $data['CVSStoreID'] = $request->input('CVSStoreID');//商店代碼 $data['CVSStoreName'] = $request->input('CVSStoreName'); $data['CVSAddress'] = $request->input('CVSAddress');//User 所選之超商店舖地址 $data['CVSTelephone'] = $request->input('CVSTelephone');//User 所選之超商店舖電話 $data['ExtraData'] = $request->input('ExtraData');//額外資訊,原資料回傳 3.產生『到付店』托運單: //背景建立店到付物流單 try { $AL = Allpay::l(); $AL->HashKey = config('allpay.HashKey'); $AL->HashIV = config('allpay.HashIV'); $AL->Send = array( 'MerchantID' => config('allpay.MerchantID'), 'MerchantTradeNo' => 'mic-' . date('YmdHis'), 'MerchantTradeDate' => date('Y/m/d H:i:s'), 'LogisticsType' => 'CVS', 'LogisticsSubType' => 'UNIMARTC2C', 'GoodsAmount' => 100, 'CollectionAmount' => 100, 'IsCollection' => 'Y', //是否代收貨款 'GoodsName' => '商品名稱', 'SenderName' => '李小華', 'SenderPhone' => '0226550115', 'SenderCellPhone' => '0911222333', 'ReceiverName' => '周大大', 'ReceiverPhone' => '0233881234', 'ReceiverCellPhone' => '0912555666', 'ReceiverEmail' => 'user@email.com', 'TradeDesc' => '測試交易敘述', 'ServerReplyURL' => url('logistics_order_reply'), //物流狀態回覆網址 'LogisticsC2CReplyURL' => url('logistics_order_C2C_reply'), //到付店若有異動訊息回覆網址 'Remark' => '測試備註', 'PlatformID' => '', ); $AL->SendExtend = array( 'ReceiverStoreID' => '136392', //到付店id 'ReturnStoreID' => '991182' //回退店id,一般與寄件店id同 ); $Result = $AL->BGCreateShippingOrder(); //超商系統回覆內容 echo '<pre>' . print_r($Result, true) . '</pre>'; if($Result['RtnCode'] == 300){ //托運單成功建立 } } catch(Exception $e) { $Result = $e->getMessage(); echo $e->getMessage(); } 3.1 取消『到付店』托運單(僅統一超商): // 取消物流單(統一超商C2C) try { $AL = Allpay::l(); $AL->HashKey = config('allpay.HashKey'); $AL->HashIV = config('allpay.HashIV'); $AL->Send = array( 'MerchantID' => config('allpay.MerchantID'), 'AllPayLogisticsID' => $ships->AllPayLogisticsID, //綠界物流編號 'CVSPaymentNo' => $ships->CVSPaymentNo, //統一超商寄貨單號 'CVSValidationNo' => $ships->CVSValidationNo, //驗證碼 'PlatformID' => '' ); $Result = $AL->CancelUnimartLogisticsOrder(); // echo '<pre>' . print_r($Result, true) . '</pre>'; } catch(Exception $e) { $Result = $e->getMessage(); echo $e->getMessage(); } 4.列印『到付店』托運&繳款單: //統一超商 try { $AL = Allpay::l(); $AL->HashKey = config('allpay.HashKey'); $AL->HashIV = config('allpay.HashIV'); $AL->Send = array( 'MerchantID' => config('allpay.MerchantID'), 'AllPayLogisticsID' => $Result['AllPayLogisticsID'], 'CVSPaymentNo' => $Result['CVSPaymentNo'], 'CVSValidationNo' => $Result['CVSValidationNo'], 'PlatformID' => '' ); // PrintUnimartC2CBill(Button名稱, Form target) $html = $AL->PrintUnimartC2CBill(); //'列印繳款單(統一超商C2C)' echo $html; } catch(Exception $e) { echo $e->getMessage(); } //全家 try { $AL = Allpay::l(); $AL->HashKey = config('allpay.HashKey'); $AL->HashIV = config('allpay.HashIV'); $AL->Send = array( 'MerchantID' => config('allpay.MerchantID'), 'AllPayLogisticsID' => $Result['AllPayLogisticsID'], 'CVSPaymentNo' => $Result['CVSPaymentNo'], 'PlatformID' => '' ); // PrintFamilyC2CBill(Button名稱, Form target) $html = $AL->PrintFamilyC2CBill(); //'全家列印小白單(全家超商C2C)' echo $html; } catch(Exception $e) { echo $e->getMessage(); }