yasapurnama / dokularavel

该包是用于Laravel的DOKU支付网关库。由crocodicstudio/dokularavel派生而来

v1.6.7 2019-08-20 07:25 UTC

This package is auto-updated.

Last update: 2024-09-17 16:30:07 UTC


README

Total Downloads Latest Unstable Version License Monthly Downloads

Doku Laravel

这是一个已经编译成Package的DOKU支付网关库,用于Laravel。DOKU API是DOKU官方的API,属于Merchant Hosted类型,即继续使用由DOKU通过JavaScript生成的支付表单,而不是跳转到DOKU页面的表单,而是DOKU表单存在于我们的服务器上,付款看起来是在我们的服务器上进行的。

基本需求

  1. SHARED_KEY,从DOKU获取,请联系DOKU
  2. MALL_ID,从DOKU获取,请联系DOKU
  3. PERMATA_CODE,从DOKU获取,如果启用了Permata Bank的支付选项,则需要此代码
  4. 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。有两个方法:beforePaymentafterPayment

1. beforePayment($data)

您可以在该方法中添加命令,将在付款开始之前或位于DokuLaravel索引页面上执行。变量数组 $data 包含可利用的 values。更详细的信息可以查看 HOOK 文件。

2. afterPayment($status,$dataPayment)

您可以在该方法中添加命令,将在付款完成后执行。变量 $status 是一个表示付款是否成功的 boolean 变量。$dataPayment 是一个包含更多可利用 valuesarray

通知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

案例分析

  1. 移动应用,对于需要使用移动应用的用户,您只需创建一个 WebView 并输入上述DokuLaravel的URL
  2. 网站,对于需要使用网站的用户,您只需提供 链接 并将其指向上述DokuLaravel的URL