yasapurnama / dokularavel
该包是用于Laravel的DOKU支付网关库。由crocodicstudio/dokularavel派生而来
README
这是一个已经编译成Package的DOKU支付网关库,用于Laravel。DOKU API是DOKU官方的API,属于Merchant Hosted类型,即继续使用由DOKU通过JavaScript生成的支付表单,而不是跳转到DOKU页面的表单,而是DOKU表单存在于我们的服务器上,付款看起来是在我们的服务器上进行的。
基本需求
- SHARED_KEY,从DOKU获取,请联系DOKU
- MALL_ID,从DOKU获取,请联系DOKU
- PERMATA_CODE,从DOKU获取,如果启用了Permata Bank的支付选项,则需要此代码
- TABLE_ORDER,与订单/发票相关的表,并且具有以下最小字段:no_invoice,customer_name,customer_phone,customer_email,customer_address,total,payment_status,payment_date,payment_channel,payment_approval_code,payment_session_id
1. Laravel 5.x的安装
composer require yasapurnama/dokularavel
2. 添加到服务提供者(config/app.php)
yasapurnama\dokularavel\DokuLaravelServiceProvider::class,
3. 发布配置文件
php artisan vendor:publish --provider="yasapurnama\dokularavel\DokuLaravelServiceProvider"
4. 配置基本设置
在config/文件夹中,将出现一个名为 dokularavel.php 的新文件,其中包含以下内容
需要填写或修改的是SHARED_KEY,MALL_ID和TABLE设置
return [
/*
| ---------------------------------------------------------
| Setting the payment mode is Sandbox Mode or Live Mode
| ---------------------------------------------------------
| if set false it means sandbox mode, else it means live mode
| ** PLEASE BE CAREFULL ABOUT CHANGE THE LIVE MODE
|
*/
'LIVE_MODE' => FALSE,
/*
| ---------------------------------------------------------
| Setting the payment route in PAYMENT_PATH, SHARED_KEY & MALL_ID is code that you get from DOKU Merchant Page.
| ---------------------------------------------------------
|
*/
'PAYMENT_PATH' => 'dokularavel',
'SHARED_KEY' => NULL,
'MALL_ID' => NULL,
'PERMATA_CODE' => NULL,
'CURRENCY' => 360,
'NOTIFY_SCREET_CODE'=>'123456',
/*
| ---------------------------------------------------------
| Define your table of order and the fields
| ---------------------------------------------------------
|
*/
'TABLE_ORDER' => NULL,
'TABLE_FIELD_NO_ORDER' => NULL,
'TABLE_FIELD_AMOUNT' => NULL,
'TABLE_FIELD_CUSTOMER_NAME' => NULL,
'TABLE_FIELD_CUSTOMER_PHONE' => NULL,
'TABLE_FIELD_CUSTOMER_EMAIL' => NULL,
'TABLE_FIELD_CUSTOMER_ADDRESS' => NULL,
'TABLE_FIELD_PAYMENT_DATE' => NULL,
'TABLE_FIELD_PAYMENT_STATUS' => NULL,
'TABLE_FIELD_PAYMENT_CHANNEL' => NULL,
'TABLE_FIELD_PAYMENT_APPROVAL_CODE' => NULL,
'TABLE_FIELD_PAYMENT_SESSION_ID' => NULL,
/*
| ---------------------------------------------------------
| DOKU PAYMENT AVAILABLE CHANNEL
| ---------------------------------------------------------
| 15 = Credit Card
| 04 = Doku Wallet
| 02 = Mandiri Clickpay
| 05 = Permata Bank / ATM Bersama
|
| This setting is for default payment channel otherwise you can set the payment channel on the fly by url parameter "payment_channel"
*/
'AVAILABLE_PAYMENT_CHANNEL'=> ['15','04','02','05'],
'DEFAULT_PAYMENT_CHANNEL'=> '15',
/*
| ---------------------------------------------------------
| This setting is for set the product name in doku transaction
| Basicly "DOKULARAVEL" package only send 1 basket to DOKU, that is global invoice.
| ---------------------------------------------------------
| Alias that you can use :
| [invoice_no] to generate your invoice number / trans_id
|
*/
'PRODUCT_NAME_FORMAT' => 'Invoice For Order No. [invoice_no]',
/*
| ---------------------------------------------------------
| Set redirect page DOKU
| ---------------------------------------------------------
| [Default] or SHOW_DOKU_SUCCESS_PAGE set TRUE, SHOW_FINISH_PAGE set TRUE, YOUR_OWN_FINISH_PAGE set NULL
| - Payment Flow : USER DATA -> PROCESSING -> DOKU SUCCESS PAGE -> FINISH PAGE
|
| If SHOW_DOKU_SUCCESS_PAGE set TRUE, SHOW_FINISH_PAGE set FALSE, YOUR_OWN_FINISH_PAGE set NULL
| - Payment Flow : USER DATA -> PROCESSING -> DOKU SUCCESS PAGE
|
| If SHOW_DOKU_SUCCESS_PAGE set FALSE, SHOW_FINISH_PAGE set TRUE, YOUR_OWN_FINISH_PAGE set NULL
| - Payment Flow : USER DATA -> PROCESSING -> FINISH PAGE
|
| If SHOW_DOKU_SUCCESS_PAGE set FALSE, SHOW_FINISH_PAGE set TRUE, YOUR_OWN_FINISH_PAGE set not NULL / set your own URL PAGE
| - Payment Flow : USER DATA -> PROCESSING -> YOUR OWN FINISH PAGE
|
*/
'SHOW_DOKU_SUCCESS_PAGE' => TRUE, //it means the page that generated from DOKU
'SHOW_FINISH_PAGE' => TRUE, //it means the page that generated from "dokularavel" package.
'YOUR_OWN_FINISH_PAGE' => NULL, //it means the page that generated by your self
/*
| ---------------------------------------------------------
| This setting is for Develope Mode only, you can view DOKULARAVEL Session, also doPrePayment, or doPayment response
| ---------------------------------------------------------
| Access the debug url at /debug
|
| will be available if DEBUG_MODE set TRUE
|
*/
'DEBUG_MODE' => FALSE,
];
请根据上面的说明预先配置上述配置。
5. 测试
要访问DokuLaravel页面,URL参数中必须包含两个参数。
基础URL:/dokularavel(这是默认的PAYMENT_PATH,可以在配置中更改)
参数1:trans_id(这是您自己表中的交易编号)
参数2:payment_channel(这是付款类型,您可以根据上面的说明选择相应的数字,如果为空或未包含此参数,则将显示付款类型选择页面)
示例URL
https:///projek_anda/public/dokularavel?trans_id=INV0001
如果您想直接选择payment_channel,只需添加payment_channel参数即可,例如
https:///projek_anda/public/dokularavel?trans_id=INV0001&payment_channel=04
6. HOOK功能
在"DokuLaravel"包中提供HOOK功能,可以在付款完成或付款之前执行任何命令。在Laravel的controller目录中有一个名为"DokuLaravelHookController.php"的controller。有两个方法:beforePayment 和 afterPayment。
1. beforePayment($data)
您可以在该方法中添加命令,将在付款开始之前或位于DokuLaravel索引页面上执行。变量数组 $data 包含可利用的 values。更详细的信息可以查看 HOOK 文件。
2. afterPayment($status,$dataPayment)
您可以在该方法中添加命令,将在付款完成后执行。变量 $status 是一个表示付款是否成功的 boolean 变量。$dataPayment 是一个包含更多可利用 values 的 array。
通知URL
此URL用于允许DOKU向我们的服务器发送通知,通常用于特定类型的付款,如Permata Bank,您可以在DOKU商户仪表板上的“URL Notify”列中写入以下URL格式
http://yourdomain.com/dokularavel/notify/[NOTIFY_SCREET_CODE]
[NOTIFY_SECRET_CODE] 可在配置文件中设置。用于防止未授权的活动。
支持的付款类型(payment_channel)
当前DOKU支持的支付类型以及集成在此"DokuLaravel"包中的类型包括:
- 15 = 信用卡
- 04 = Doku钱包
- 02 = 民生点击付
- 05 = 普卡银行 / 共同ATM
案例分析
- 移动应用,对于需要使用移动应用的用户,您只需创建一个 WebView 并输入上述DokuLaravel的URL
- 网站,对于需要使用网站的用户,您只需提供 链接 并将其指向上述DokuLaravel的URL