PHP code example of ycs77 / laravel-newebpay
1. Go to this page and download the library: Download ycs77/laravel-newebpay library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
ycs77 / laravel-newebpay example snippets
Route::get('/pay', function () {
return view('pay');
});
Route::get('/pay', function () {
return Inertia::render('Pay', [
'csrfToken' => csrf_token(),
]);
});
use Ycs77\NewebPay\Facades\NewebPay;
Route::post('/pay', function () {
$no = 'Vanespl_ec_'.time(); // 訂單編號
$amt = 120; // 交易金額
$desc = '我的商品'; // 商品名稱
$email = '[email protected] '; // 付款人信箱
return NewebPay::payment($no, $amt, $desc, $email)->submit();
});
use Ycs77\NewebPay\Facades\NewebPay;
return NewebPay::payment(...)
->lang() // 語言設定
->tradeLimit() // 交易秒數限制
->expireDate() // 交易截止日
->returnUrl() // 由藍新回傳後前景畫面要接收資料顯示的網址
->notifyUrl() // 由藍新回傳後背景處理資料的接收網址
->customerUrl() // 商店取號網址
->clientBackUrl() // 付款時點擊「返回按鈕」的網址
->emailModify() // 是否開放 email 修改
->loginType() // 是否需要登入藍新金流會員
->orderComment() // 商店備註
->paymentMethod() // 付款方式 *依照 config 格式傳送*
->CVSCOM() // 物流方式
->lgsType() // 物流型態
->submit();
use Illuminate\Http\Request;
use Ycs77\NewebPay\Facades\NewebPay;
Route::post('/pay/callback', function (Request $request) {
$result = NewebPay::result($request);
if ($result->isFail()) {
return redirect()->to('/pay')->with('error', $result->message());
}
// 訂單付款成功,處裡訂單邏輯...
return redirect()->to('/pay')->with('success', '付款成功');
});
use Illuminate\Http\Request;
use Ycs77\NewebPay\Facades\NewebPay;
Route::post('/pay/notify', function (Request $request) {
$result = NewebPay::result($request);
if ($result->isFail()) {
return;
}
logger('藍新金流 交易資訊 notify', ['result' => $result->data()]);
// 訂單付款成功,處裡訂單邏輯...
});
$result = NewebPay::result($request);
$result->data(); // 回傳完整結果
$result->status(); // 交易狀態:若交易付款成功,則回傳 SUCCESS。若交易付款失敗,則回傳錯誤代碼。
$result->isSuccess(); // 交易是否成功
$result->isFail(); // 交易是否失敗
$result->message(); // 敘述此次交易狀態
$result->result(); // 回傳參數
$result->merchantId(); // 藍新金流商店代號
$result->amt(); // 交易金額
$result->tradeNo(); // 藍新金流交易序號
$result->merchantOrderNo(); // 商店訂單編號
$result->respondType(); // 回傳格式
$result->payTime(); // 支付完成時間
$result->ip(); // 交易 IP
$result->escrowBank(); // 款項保管銀行
// 信用卡支付回傳(一次付清、Google Pay、Samaung Pay、國民旅遊卡、銀聯)
if ($result->paymentType() === 'CREDIT') {
$credit = $result->credit();
// 參考:\Ycs77\NewebPay\Results\MPGCreditResult
}
// WEBATM、ATM 繳費回傳
if ($result->paymentType() === 'VACC' || $result->paymentType() === 'WEBATM') {
$atm = $result->atm();
// 參考:\Ycs77\NewebPay\Results\MPGATMResult
}
// 超商代碼繳費回傳
if ($result->paymentType() === 'CVS') {
$storeCode = $result->storeCode();
// 參考:\Ycs77\NewebPay\Results\MPGStoreCodeResult
}
// 超商條碼繳費回傳
if ($result->paymentType() === 'BARCODE') {
$storeBarcode = $result->storeBarcode();
// 參考:\Ycs77\NewebPay\Results\MPGStoreBarcodeResult
}
// 超商物流回傳
if ($result->paymentType() === 'CVSCOM') {
$lgs = $result->lgs();
// 參考:\Ycs77\NewebPay\Results\MPGLgsResult
}
// 跨境支付回傳 (包含簡單付電子錢包、簡單付微信支付、簡單付支付寶)
$ezPay = $result->ezPay();
if ($ezPay->isEzPay()) {
// 參考:\Ycs77\NewebPay\Results\MPGEzPayResult
}
// 玉山 Wallet 回傳
if ($result->paymentType() === 'ESUNWALLET') {
$esunWallet = $result->esunWallet();
// 參考:\Ycs77\NewebPay\Results\MPGEsunWalletResult
}
// 台灣 Pay 回傳
if ($result->paymentType() === 'TAIWANPAY') {
$taiwanPay = $result->taiwanPay();
// 參考:\Ycs77\NewebPay\Results\MPGTaiwanPayResult
}
use Illuminate\Http\Request;
use Ycs77\NewebPay\Facades\NewebPay;
Route::post('/pay/callback', function (Request $request) {
$result = NewebPay::result($request);
if ($result->isFail()) {
return redirect()->to('/pay')->with('error', $result->message());
}
return redirect()->to('/pay')->with('success', '付款成功');
});
Route::post('/pay/notify', function (Request $request) {
$result = NewebPay::result($request);
if ($result->isFail()) {
return;
}
logger('藍新金流 交易資訊 notify', ['result' => $result->data()]);
// 訂單付款成功,處裡訂單邏輯...
});
return [
// 付款完成後導向頁面
'return_url' => '/pay/callback',
// 付款完成後的通知連結
'notify_url' => '/pay/notify',
]
class VerifyCsrfToken extends Middleware
{
protected $except = [
'/pay/callback',
'/pay/notify',
];
}
use Ycs77\NewebPay\Facades\NewebPay;
Route::post('/pay/customer', function (Request $request) {
$result = NewebPay::customer($request);
if ($result->isFail()) {
// 取號錯誤...
return;
}
$result = $result->result();
// 自訂取號結果頁面...
});
return [
// 商店取號網址
'customer_url' => '/pay/customer',
]
class VerifyCsrfToken extends Middleware
{
protected $except = [
...
'/pay/customer',
];
}
use Ycs77\NewebPay\Facades\NewebPay;
function query(Request $request)
{
$no = $request->input('no'); // 該筆交易的訂單編號
$amt = $request->input('amt'); // 該筆交易的金額
$type = 'order'; // 可選擇是 'order' (訂單編號),或是 'trade' (藍新交易編號) 來做申請
$result = NewebPay::query($no, $amt, $type)->submit();
if ($result->isSuccess() && $result->verify()) {
// 查詢成功...
return response()->json($result->result());
}
return response()->json(['message' => $result->message()]);
}
use Ycs77\NewebPay\Facades\NewebPay;
function cancel()
{
$no = $request->input('no'); // 該筆交易的訂單編號
$amt = $request->input('amt'); // 該筆交易的金額
$type = 'order'; // 可選擇是 'order' (訂單編號),或是 'trade' (藍新交易編號) 來做申請
$result = NewebPay::cancel($no, $amt, $type)->submit();
if ($result->isSuccess() && $result->verify()) {
return response()->json(['message' => '取消授權成功']);
}
return response()->json(['message' => $result->message()]);
}
use Ycs77\NewebPay\Facades\NewebPay;
/**
* 信用卡請款
*/
function request()
{
$no = $request->input('no'); // 該筆交易的訂單編號
$amt = $request->input('amt'); // 該筆交易的金額
$type = 'order'; // 可選擇是 'order' (訂單編號),或是 'trade' (藍新交易編號) 來做申請
$result = NewebPay::request($no, $amt, $type)->submit();
if ($result->isSuccess()) {
return response()->json(['message' => '信用卡請款成功']);
}
return response()->json(['message' => $result->message()]);
}
/**
* 信用卡取消請款
*/
function cancelRequest()
{
$no = $request->input('no'); // 該筆交易的訂單編號
$amt = $request->input('amt'); // 該筆交易的金額
$type = 'order'; // 可選擇是 'order' (訂單編號),或是 'trade' (藍新交易編號) 來做申請
$result = NewebPay::cancelRequest($no, $amt, $type)->submit();
if ($result->isSuccess()) {
return response()->json(['message' => '信用卡取消請款成功']);
}
return response()->json(['message' => $result->message()]);
}
/**
* 信用卡退款
*/
function refund()
{
$no = $request->input('no'); // 該筆交易的訂單編號
$amt = $request->input('amt'); // 該筆交易的金額
$type = 'order'; // 可選擇是 'order' (訂單編號),或是 'trade' (藍新交易編號) 來做申請
$result = NewebPay::refund($no, $amt, $type)->submit();
if ($result->isSuccess()) {
return response()->json(['message' => '信用卡退款成功']);
}
return response()->json(['message' => $result->message()]);
}
/**
* 信用卡取消退款
*/
function cancelRefund()
{
$no = $request->input('no'); // 該筆交易的訂單編號
$amt = $request->input('amt'); // 該筆交易的金額
$type = 'order'; // 可選擇是 'order' (訂單編號),或是 'trade' (藍新交易編號) 來做申請
$result = NewebPay::cancelRefund($no, $amt, $type)->submit();
if ($result->isSuccess()) {
return response()->json(['message' => '信用卡取消退款成功']);
}
return response()->json(['message' => $result->message()]);
}
use Ycs77\NewebPay\Facades\NewebPay;
/**
* 信用卡請/退款
*/
function close()
{
$no = $request->input('no'); // 該筆交易的訂單編號
$amt = $request->input('amt'); // 該筆交易的金額
$type = 'order'; // 可選擇是 'order' (訂單編號),或是 'trade' (藍新交易編號) 來做申請
$result = NewebPay::close($no, $amt, $type)
->closeType($request->query('type')) // 設定請款或退款
->cancel($request->boolean('cancel')) // 取消請款或退款
->submit();
if ($result->isSuccess()) {
return response()->json(['message' => '請求成功']);
}
return response()->json(['message' => $result->message()]);
}
Route::get('/subscribe', function () {
return view('subscribe');
});
Route::get('/subscribe', function () {
return Inertia::render('Subscribe', [
'csrfToken' => csrf_token(),
]);
});
use Ycs77\NewebPay\Facades\NewebPay;
Route::post('/subscribe', function () {
$no = now()->timestamp; // 訂單編號
$amt = 120; // 交易金額
$desc = '我的訂閱制商品'; // 商品名稱
$email = '[email protected] '; // 付款人信箱
return NewebPay::period($no, $amt, $desc, $email)
->everyFewDays(2)
->times(3)
->submit();
});
use Illuminate\Http\Request;
use Ycs77\NewebPay\Facades\NewebPay;
Route::post('/pay/period/callback', function (Request $request) {
$result = NewebPay::periodResult($request);
if ($result->isFail()) {
return redirect()->to('/pay')->with('error', $result->message());
}
return redirect()->to('/pay')->with('success', '付款成功');
});
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Ycs77\NewebPay\Facades\NewebPay;
Route::post('/pay/period/notify', function (Request $request) {
$result = NewebPay::periodNotify($request);
if ($result->isFail()) {
Log::error('藍新金流 定期定額 定期交易錯誤', $result->data());
return;
}
// 委託授權成功,處裡訂單邏輯...
});
return [
'period' => [
// 建立委託完成後導向頁面
'return_url' => '/pay/period/callback',
// 每期委託授權結果通知:
'notify_url' => '/pay/period/notify',
],
]
class VerifyCsrfToken extends Middleware
{
protected $except = [
...
'/pay/period/callback',
'/pay/period/notify',
];
}
NewebPay::period($no, $amt, $desc, $email)
->everyFewDays(40)
->times(1)
->submit();
NewebPay::period($no, $amt, $desc, $email)
->weekly(7)
->times(1)
->submit();
NewebPay::period($no, $amt, $desc, $email)
->monthly(20)
->times(1)
->submit();
NewebPay::period($no, $amt, $desc, $email)
->yearly(3, 4)
->times(1)
->submit();
NewebPay::period($no, $amt, $desc, $email)
->monthly(4)
->times(6)
->submit();
'period' => [
'start_type' => PeriodStartType::TEN_DOLLARS_NOW,
],
'period' => [
'start_type' => PeriodStartType::AUTHORIZE_NOW,
],
'period' => [
'start_type' => PeriodStartType::NO_AUTHORIZE,
],
NewebPay::period($no, $amt, $desc, $email)
->everyFewDays(2)
->times(3)
->firstdate(2023, 3, 1)
->submit();
use Illuminate\Http\Request;
use Ycs77\NewebPay\Enums\PeriodStatus;
use Ycs77\NewebPay\Facades\NewebPay;
Route::post('/pay/period/status', function (Request $request) {
$result = NewebPay::periodStatus($request->input('no'), $request->input('periodNo'), PeriodStatus::TERMINATE)
->submit();
return $result->isSuccess()
? back()->with('success', '修改委託狀態成功')
: back()->withErrors(['no' => $result->message()]);
});
use Illuminate\Http\Request;
use Ycs77\NewebPay\Facades\NewebPay;
Route::post('/pay/period/amt', function (Request $request) {
$result = NewebPay::periodAmt($request->input('no'), $request->input('periodNo'), $request->input('amt'))
->everyFewDays(3)
->times(10)
->submit();
return $result->isSuccess()
? back()->with('success', '修改委託內容成功')
: back()->withErrors(['no' => $result->message()]);
});
php artisan vendor:publish --tag=newebpay-config
html
<form action="/pay" method="POST">
@csrf
<button>付款</button>
</form>
html
<form action="/subscribe" method="POST">
@csrf
<button>訂閱</button>
</form>