Wallogit.com
2017 © Pedro Peláez
Ecpay2in1 for Laravel 5
整合綠界線上刷卡及超商物流, (*1)
適用對象:以Laravel 5開發商務網站,欲使用綠界線上金流、物流服務。, (*2)
實作版本:Laravel 5.2, (*3)
step 1 : Download the package, (*4)
composer命令安裝
composer require kennychou3896/ecpay2in1 dev-master
或者是新增package至composer.json
"require": {
"kennychou3896/ecpay2in1": "dev-master"
},
然後更新安裝
composer update
或全新安裝
composer install
step 2 : Modify config file, (*5)
增加`config/app.php`中的`providers`和`aliases`的參數 。 'providers' => [ // ... kennychou3896\ecpay2in1\EcpayServiceProvider::class, ] 'aliases' => [ // ... 'Ecpay' => kennychou3896\ecpay2in1\Facade\Ecpay::class, ]
step 3 : Publish config to your project, (*6)
執行下列命令,將package的config檔配置到你的專案中
php artisan vendor:publish
至config/ecpay.php中確認Ecpay設定:
return [
'ServiceURL' => 'http://payment-stage.ecpay.com.tw/Cashier/AioCheckOut/V2',
'HashKey' => '5294y06JbISpM5x9', //這是綠界給的test Key ,正式上線由此抽換為你的Key
'HashIV' => 'v77hoKGq4kWxNNIS',
'MerchantID' => '2000132',
];
step 4 : .env中設定參數(非必須), (*7)
#付款測試 true : 直接使用測試的特店參數, false : 使用config/ecpay.php中的參數. APP_PAY_TEST=true PAY_SERVICE_URL=https://payment-stage.ecpay.com.tw/Cashier/AioCheckOut/V2 PAY_HASH_KEY=5294y06JbISpM5x9 PAY_HASH_IV=v77hoKGq4kWxNNIS PAY_MERCHANT_ID=2000132
How To Use -->線上刷卡篇, (*8)
在Controller中
use Ecpay;
public function Demo()
{
//基本參數(可依系統規劃自行調整)
Ecpay::i()->Send['ReturnURL'] = "http://www.yourwebsites.com.tw/ReturnURL" ;
//交易結果回報的網址
Ecpay::i()->Send['ClientBackURL'] = "http://www.yourwebsites.com.tw/ClientBackURL" ;
//交易結束,讓user導回的網址
Ecpay::i()->Send['MerchantTradeNo'] = "Test".time() ; //訂單編號
Ecpay::i()->Send['MerchantTradeDate'] = date('Y/m/d H:i:s'); //交易時間
Ecpay::i()->Send['TotalAmount'] = 2000; //交易金額
Ecpay::i()->Send['TradeDesc'] = "good to drink" ; //交易描述
Ecpay::i()->Send['EncryptType'] = '1' ;
Ecpay::i()->Send['ChoosePayment'] = "Credit" ; //付款方式:信用卡
Ecpay::i()->Send['PaymentType'] = 'aio' ;
//訂單的商品資料
array_push(Ecpay::i()->Send['Items'],
array('Name' => "美美小包包",
'Price' => (int)"2000",'Currency' => "元",
'Quantity' => (int) "1",
'URL' => "http://www.yourwebsites.com.tw/Product"));
//Go to EcPay
echo "線上刷卡頁面導向中...";
echo Ecpay::i()->CheckOutForm();
//開發階段,如果你希望看到表單的內容,可以改為以下敘述:
//echo Ecpay::i()->CheckOutForm('按我,才送出');
}
超商物流篇--到店付, (*9)
1.選擇『到付店』:
Ecpay::l()->Send['MerchantTradeNo'] = 'Test-'.date('YmdHis');
Ecpay::l()->Send['LogisticsSubType'] = 'UNIMARTC2C'; //或FAMIC2C,全家
Ecpay::l()->Send['IsCollection'] = 'N';//是否代收貨款
Ecpay::l()->Send['ServerReplyURL'] = url('shop_option_reply'); //超商系統回覆路徑post
Ecpay::l()->Send['ExtraData'] = ''; //附帶資料
Ecpay::l()->Send['Device'] = '0';
$logisticsForm = Ecpay::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 = Ecpay::l();
$AL->HashKey = config('ecpay.HashKey');
$AL->HashIV = config('ecpay.HashIV');
$AL->Send = array(
'MerchantID' => config('ecpay.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)
$ships['AllPayLogisticsID'] = '15474'; //綠界物流編號
$ships['CVSPaymentNo']='F0015091'; //統一超商寄貨單號
$ships['CVSValidationNo']='3207'; //驗證碼
try {
$AL = Ecpay::l();
$AL->HashKey = config('ecpay.HashKey');
$AL->HashIV = config('ecpay.HashIV');
$AL->Send = array(
'MerchantID' => config('ecpay.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 = Ecpay::l();
$AL->HashKey = config('ecpay.HashKey');
$AL->HashIV = config('ecpay.HashIV');
$AL->Send = array(
'MerchantID' => config('ecpay.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 = Ecpay::l();
$AL->HashKey = config('ecpay.HashKey');
$AL->HashIV = config('ecpay.HashIV');
$AL->Send = array(
'MerchantID' => config('ecpay.MerchantID'),
'AllPayLogisticsID' => $Result['AllPayLogisticsID'],
'CVSPaymentNo' => $Result['CVSPaymentNo'],
'PlatformID' => ''
);
// PrintFamilyC2CBill(Button名稱, Form target)
$html = $AL->PrintFamilyC2CBill(); //'全家列印小白單(全家超商C2C)'
echo $html;
} catch(Exception $e) {
echo $e->getMessage();
}