มิดทรานส์ ❤️ PHP!
นี่คือ wrapper/ไลบรารี PHP อย่างเป็นทางการสำหรับ Midtrans Payment API ที่เข้ากันได้กับ Composer เยี่ยมชม https://midtrans.com เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับผลิตภัณฑ์ และดูเอกสารประกอบที่ http://docs.midtrans.com สำหรับรายละเอียดทางเทคนิคเพิ่มเติม ตั้งแต่เวอร์ชัน 2.6 เป็นต้นไป ไลบรารีนี้รองรับ Snap-bi แล้ว คุณสามารถไปที่เอกสารนี้เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับ Snap-bi
หากคุณใช้ Composer คุณสามารถติดตั้งผ่าน composer CLI:
composer require midtrans/midtrans-php
หรือ
เพิ่มบรรทัด need นี้ลงในไฟล์ composer.json
ของคุณ:
{
"require" : {
"midtrans/midtrans-php" : " 2.* "
}
}
และเรียกใช้ composer install
บนเทอร์มินัลของคุณ
หมายเหตุ: หากคุณใช้เฟรมเวิร์ก Laravel ในบางกรณี คุณจะต้องเรียกใช้
composer dumpautoload
ด้วย
/Midtrans
จะพร้อมใช้งาน (โหลดอัตโนมัติ) เป็น Object ในโปรเจ็กต์ Laravel ของคุณ
หากคุณไม่ได้ใช้ Composer คุณสามารถโคลนหรือดาวน์โหลดที่เก็บนี้ได้
จากนั้นคุณควรกำหนด/autoload ไฟล์ Midtrans.php
ในโค้ดของคุณ
require_once dirname ( __FILE__ ) . ' /pathofproject/Midtrans.php ' ;
// my code goes here
// Set your Merchant Server Key
Midtrans Config:: $ serverKey = ' <your server key> ' ;
// Set to Development/Sandbox Environment (default). Set to true for Production Environment (accept real transaction).
Midtrans Config:: $ isProduction = false ;
// Set sanitization on (default)
Midtrans Config:: $ isSanitized = true ;
// Set 3DS transaction for credit card to true
Midtrans Config:: $ is3ds = true ;
คุณสามารถเลือกที่จะเปลี่ยนแปลงหรือเพิ่ม URL การแจ้งเตือนที่กำหนดเองในทุกธุรกรรม สามารถทำได้โดยการเพิ่มส่วนหัว HTTP เพิ่มเติมลงในคำขอเรียกเก็บเงิน
// Add new notification url(s) alongside the settings on Midtrans Dashboard Portal (MAP)
Config:: $ appendNotifUrl = " https://example.com/test1,https://example.com/test2 " ;
// Use new notification url(s) disregarding the settings on Midtrans Dashboard Portal (MAP)
Config:: $ overrideNotifUrl = " https://example.com/test1 " ;
รายละเอียดเพิ่มเติม
หมายเหตุ: เมื่อใช้ทั้ง
appendNotifUrl
และoverrideNotifUrl
ร่วมกัน ระบบจะใช้เฉพาะoverrideNotifUrl
เท่านั้น
ส่วนหัวทั้งสองสามารถรับ URL ได้สูงสุด 3 รายการ เท่านั้น
คุณสามารถเลือกที่จะเพิ่มคีย์ idempotency ในธุรกรรมค่าธรรมเนียมได้ สามารถทำได้โดยการเพิ่มส่วนหัว HTTP เพิ่มเติมลงในคำขอเรียกเก็บเงิน เป็นค่าเฉพาะที่ใส่ไว้บนส่วนหัวของคำขอ API Midtrans API ยอมรับ Idempotency-Key บนส่วนหัวเพื่อจัดการคำขอลองใหม่อย่างปลอดภัยโดยไม่ต้องดำเนินการเดิมสองครั้ง สิ่งนี้มีประโยชน์สำหรับกรณีที่ผู้ขายไม่ได้รับการตอบกลับเนื่องจากปัญหาเครือข่ายหรือข้อผิดพลาดที่ไม่คาดคิดอื่นๆ
Config:: $ paymentIdempotencyKey = " Unique-ID " ;
รายละเอียดเพิ่มเติม
เรามีผลิตภัณฑ์การชำระเงินที่แตกต่างกัน 3 แบบที่คุณสามารถใช้ได้:
เลือกสิ่งที่คุณคิดว่าดีที่สุดสำหรับความต้องการเฉพาะของคุณ
คุณสามารถดูตัวอย่าง Snap ได้ที่นี่
$ params = array (
' transaction_details ' => array (
' order_id ' => rand (),
' gross_amount ' => 10000 ,
)
);
$ snapToken = Midtrans Snap:: getSnapToken ( $ params );
< html >
< body >
< button id =" pay-button " > Pay! </ button >
< pre > < div id =" result-json " > JSON result will appear here after payment: < br > </ div > </ pre >
<!-- TODO: Remove ".sandbox" from script src URL for production environment. Also input your client key in "data-client-key" -->
< script src =" https://app.sandbox.midtrans.com/snap/snap.js " data-client-key =" <Set your ClientKey here> " > </ script >
< script type =" text/javascript " >
document . getElementById ( 'pay-button' ) . onclick = function ( ) {
// SnapToken acquired from previous step
snap . pay ( '<?=$snapToken?>' , {
// Optional
onSuccess : function ( result ) {
/* You may add your own js here, this is just example */ document . getElementById ( 'result-json' ) . innerHTML += JSON . stringify ( result , null , 2 ) ;
} ,
// Optional
onPending : function ( result ) {
/* You may add your own js here, this is just example */ document . getElementById ( 'result-json' ) . innerHTML += JSON . stringify ( result , null , 2 ) ;
} ,
// Optional
onError : function ( result ) {
/* You may add your own js here, this is just example */ document . getElementById ( 'result-json' ) . innerHTML += JSON . stringify ( result , null , 2 ) ;
}
} ) ;
} ;
</ script >
</ body >
</ html >
โปรดดูส่วนนี้
คุณสามารถดูตัวอย่าง Snap Redirect ได้ที่นี่
$ params = array (
' transaction_details ' => array (
' order_id ' => rand (),
' gross_amount ' => 10000 ,
)
);
try {
// Get Snap Payment Page URL
$ paymentUrl = Midtrans Snap:: createTransaction ( $ params )-> redirect_url ;
// Redirect to Snap Payment Page
header ( ' Location: ' . $ paymentUrl );
}
catch ( Exception $ e ) {
echo $ e -> getMessage ();
}
โปรดดูส่วนนี้
คุณสามารถดูตัวอย่าง Core API ได้ที่นี่
MidtransNew3ds . clientKey = "<your client key>" ;
โปรดดูไฟล์นี้
$ transaction_details = array (
' order_id ' => time (),
' gross_amount ' => 200000
);
// Populate items
$ items = array (
array (
' id ' => ' item1 ' ,
' price ' => 100000 ,
' quantity ' => 1 ,
' name ' => ' Adidas f50 '
),
array (
' id ' => ' item2 ' ,
' price ' => 50000 ,
' quantity ' => 2 ,
' name ' => ' Nike N90 '
)
);
// Populate customer's billing address
$ billing_address = array (
' first_name ' => " Andri " ,
' last_name ' => " Setiawan " ,
' address ' => " Karet Belakang 15A, Setiabudi. " ,
' city ' => " Jakarta " ,
' postal_code ' => " 51161 " ,
' phone ' => " 081322311801 " ,
' country_code ' => ' IDN '
);
// Populate customer's shipping address
$ shipping_address = array (
' first_name ' => " John " ,
' last_name ' => " Watson " ,
' address ' => " Bakerstreet 221B. " ,
' city ' => " Jakarta " ,
' postal_code ' => " 51162 " ,
' phone ' => " 081322311801 " ,
' country_code ' => ' IDN '
);
// Populate customer's info
$ customer_details = array (
' first_name ' => " Andri " ,
' last_name ' => " Setiawan " ,
' email ' => " [email protected] " ,
' phone ' => " 081322311801 " ,
' billing_address ' => $ billing_address ,
' shipping_address ' => $ shipping_address
);
// Token ID from checkout page
$ token_id = $ _POST [ ' token_id ' ];
// Transaction data to be sent
$ transaction_data = array (
' payment_type ' => ' credit_card ' ,
' credit_card ' => array (
' token_id ' => $ token_id ,
' authentication ' => true ,
// 'bank' => 'bni', // optional to set acquiring bank
// 'save_token_id' => true // optional for one/two clicks feature
),
' transaction_details ' => $ transaction_details ,
' item_details ' => $ items ,
' customer_details ' => $ customer_details
);
$ response = Midtrans CoreApi:: charge ( $ transaction_data );
ผลการเรียกเก็บเงินจากบัตรเครดิตอาจมี redirect_url
สำหรับการตรวจสอบสิทธิ์ 3DS การตรวจสอบสิทธิ์ 3DS ควรได้รับการจัดการบนส่วนหน้า โปรดดูเอกสาร API
ดูตัวอย่างธุรกรรมบัตรเครดิต 3DS ได้ที่:
// Success
if ( $ response -> transaction_status == ' capture ' ) {
echo " <p>Transaksi berhasil.</p> " ;
echo " <p>Status transaksi untuk order id $ response -> order_id : " .
" $ response -> transaction_status </p> " ;
echo " <h3>Detail transaksi:</h3> " ;
echo " <pre> " ;
var_dump ( $ response );
echo " </pre> " ;
}
// Deny
else if ( $ response -> transaction_status == ' deny ' ) {
echo " <p>Transaksi ditolak.</p> " ;
echo " <p>Status transaksi untuk order id . $ response -> order_id : " .
" $ response -> transaction_status </p> " ;
echo " <h3>Detail transaksi:</h3> " ;
echo " <pre> " ;
var_dump ( $ response );
echo " </pre> " ;
}
// Challenge
else if ( $ response -> transaction_status == ' challenge ' ) {
echo " <p>Transaksi challenge.</p> " ;
echo " <p>Status transaksi untuk order id $ response -> order_id : " .
" $ response -> transaction_status </p> " ;
echo " <h3>Detail transaksi:</h3> " ;
echo " <pre> " ;
var_dump ( $ response );
echo " </pre> " ;
}
// Error
else {
echo " <p>Terjadi kesalahan pada data transaksi yang dikirim.</p> " ;
echo " <p>Status message: [ $ response -> status_code ] " .
" $ response -> status_message </p> " ;
echo " <pre> " ;
var_dump ( $ response );
echo " </pre> " ;
}
โปรดดูส่วนนี้
สร้างจุดสิ้นสุดเว็บที่แยกจากกัน (URL การแจ้งเตือน) เพื่อรับการโทรกลับ/webhook การแจ้งเตือน HTTP POST การแจ้งเตือน HTTP จะถูกส่งทุกครั้งที่สถานะธุรกรรมมีการเปลี่ยนแปลง ตัวอย่างยังมีอยู่ที่นี่
$ notif = new Midtrans Notification ();
$ transaction = $ notif -> transaction_status ;
$ fraud = $ notif -> fraud_status ;
error_log ( " Order ID $ notif -> order_id : " . " transaction status = $ transaction , fraud staus = $ fraud " );
if ( $ transaction == ' capture ' ) {
if ( $ fraud == ' challenge ' ) {
// TODO Set payment status in merchant's database to 'challenge'
}
else if ( $ fraud == ' accept ' ) {
// TODO Set payment status in merchant's database to 'success'
}
}
else if ( $ transaction == ' cancel ' ) {
if ( $ fraud == ' challenge ' ) {
// TODO Set payment status in merchant's database to 'failure'
}
else if ( $ fraud == ' accept ' ) {
// TODO Set payment status in merchant's database to 'failure'
}
}
else if ( $ transaction == ' deny ' ) {
// TODO Set payment status in merchant's database to 'failure'
}
$ status = Midtrans Transaction:: status ( $ orderId );
var_dump ( $ status );
หากธุรกรรม Fraud_status == CHALLENGE คุณสามารถอนุมัติธุรกรรมได้จาก Merchant Dashboard หรือ API:
$ approve = Midtrans Transaction:: approve ( $ orderId );
var_dump ( $ approve );
คุณสามารถยกเลิกธุรกรรมด้วย fraud_status == CHALLENGE
หรือธุรกรรมบัตรเครดิตด้วย transaction_status == CAPTURE
(ก่อนที่จะกลายเป็น SETTLEMENT)
$ cancel = Midtrans Transaction:: cancel ( $ orderId );
var_dump ( $ cancel );
คุณสามารถหมดอายุธุรกรรมด้วย transaction_status == PENDING
(ก่อนที่จะกลายเป็น SETTLEMENT หรือ EXPIRE)
$ cancel = Midtrans Transaction:: cancel ( $ orderId );
var_dump ( $ cancel );
คืนเงินธุรกรรม (ช่องทางการชำระเงินบางช่องทางไม่อนุญาตการคืนเงินผ่าน API) คุณสามารถคืนเงินธุรกรรมได้ด้วย transaction_status == settlement
บัญชี
$ params = array (
' refund_key ' => ' order1-ref1 ' ,
' amount ' => 10000 ,
' reason ' => ' Item out of stock '
);
$ refund = Midtrans Transaction:: refund ( $ orderId , $ params );
var_dump ( $ refund );
คืนเงินธุรกรรมผ่าน Direct Refund API คุณสามารถคืนเงินธุรกรรมด้วย transaction_status == settlement
$ params = array (
' refund_key ' => ' order1-ref1 ' ,
' amount ' => 10000 ,
' reason ' => ' Item out of stock '
);
$ direct_refund = Midtrans Transaction:: refundDirect ( $ orderId , $ params );
var_dump ( $ direct_refund );
Standar Nasional Open API Pembayaran หรือเรียกสั้นๆ ว่า SNAP เป็นมาตรฐาน API แบบเปิดการชำระเงินระดับประเทศที่เผยแพร่โดย Bank Indonesia หากต้องการเรียนรู้เพิ่มเติม คุณสามารถอ่านเอกสารนี้ได้
//These config value are based on the header stated here https://docs.midtrans.com/reference/getting-started-1
// Set to Development/Sandbox Environment (default). Set to true for Production Environment (accept real transaction).
SnapBi Config:: $ isProduction = false ;
// Set your client id. Merchant’s client ID that will be given by Midtrans, will be used as X-CLIENT-KEY on request’s header in B2B Access Token API.
SnapBi Config:: $ snapBiClientId = " YOUR CLIENT ID " ;
// Set your private key here, make sure to add n on the private key, you can refer to the examples
SnapBi Config:: $ snapBiPrivateKey = " YOUR PRIVATE KEY " ;
// Set your client secret. Merchant’s secret key that will be given by Midtrans, will be used for symmetric signature generation for Transactional API’s header.
SnapBi Config:: $ snapBiClientSecret = " YOUR CLIENT SECRET " ;
// Set your partner id. Merchant’s partner ID that will be given by Midtrans, will be used as X-PARTNER-ID on Transactional API’s header.
SnapBi Config:: $ snapBiPartnerId = " YOUR PARTNER ID " ;
// Set the channel id here.
SnapBi Config:: $ snapBiChannelId = " CHANNEL ID " ;
// Enable logging to see details of the request/response make sure to disable this on production, the default is disabled.
SnapBi Config:: $ enableLogging = false ;
// Set your public key here if you want to verify your webhook notification, make sure to add n on the public key, you can refer to the examples
SnapBi Config:: $ snapBiPublicKey = " YOUR PUBLIC KEY "
โปรดดูเอกสารนี้สำหรับข้อมูลโดยละเอียดเพิ่มเติมเกี่ยวกับการสร้างการชำระเงินโดยใช้การตัดบัญชีโดยตรง
date_default_timezone_set ( ' Asia/Jakarta ' );
$ time_stamp = date ( " c " );
$ date = new DateTime ( $ time_stamp );
$ external_id = " uzi-order-testing " . uniqid ();
// Add 10 minutes validity time
$ date -> modify ( ' +10 minutes ' );
// Format the new date
$ valid_until = $ date -> format ( ' c ' );
$ merchant_id = " M001234 " ;
//create direct debit request body/ payload
//you can change the payment method on the `payOptionDetails`
$ debitParams = array (
" partnerReferenceNo " => $ external_id ,
" chargeToken " => "" ,
" merchantId " => $ merchant_id ,
" urlParam " => array (
array (
" url " => " https://www.google.com " ,
" type " => " PAY_RETURN " ,
" isDeeplink " => " Y "
)
),
" validUpTo " => $ valid_until ,
" payOptionDetails " => array (
array (
" payMethod " => " DANA " ,
" payOption " => " DANA " ,
" transAmount " => array (
" value " => " 100.0 " ,
" currency " => " IDR " //currently we only support `IDR`
)
)
),
" additionalInfo " => array (
" customerDetails " => array (
" phone " => " 081122334455 " ,
" firstName " => " Andri " ,
" lastName " => " Litani " ,
" email " => " [email protected] " ,
" billingAddress " => array (
" firstName " => " Andri " ,
" lastName " => " Litani " ,
" phone " => " 081122334455 " ,
" address " => " billingAddress " ,
" city " => " billingCity " ,
" postalCode " => " 12790 " ,
" countryCode " => " CZH "
),
" shippingAddress " => array (
" firstName " => " Andri " ,
" lastName " => " Litani " ,
" phone " => " 081122334455 " ,
" address " => " shippingAddress " ,
" city " => " shippingCity " ,
" postalCode " => " 12790 " ,
" countryCode " => " CZH "
)
),
" items " => array (
array (
" id " => " 1 " ,
" price " => array (
" value " => " 100.00 " ,
" currency " => " IDR "
),
" quantity " => 1 ,
" name " => " Apple " ,
" brand " => " Apple " ,
" category " => " Subscription " ,
" merchantName " => " amazon prime " ,
" url " => " itemUrl "
)
),
" metadata " => array ()
)
);
/**
* Basic example
* to change the payment method, you can change the value of the request body on the `payOptionDetails`
* the `currency` value that we support for now is only `IDR`
*/
$ snapBiResponse = SnapBi:: directDebit ()
-> withBody ( $ debitParams )
-> createPayment ( $ external_id );
โปรดดูเอกสารนี้สำหรับข้อมูลโดยละเอียดเพิ่มเติมเกี่ยวกับ VA/การโอนเงินผ่านธนาคาร
$ external_id = " uzi-order-testing " . uniqid ();
$ customerVaNo = " 6280123456 " ;
$ merchant_id = " M001234 " ;
$ vaParams = array (
" partnerServiceId " => " 70012 " ,
" customerNo " => $ customerVaNo ,
" virtualAccountNo " => " 70012 " . $ customerVaNo ,
" virtualAccountName " => " Jokul Doe " ,
" virtualAccountEmail " => " [email protected] " ,
" virtualAccountPhone " => " 6281828384858 " ,
" trxId " => $ external_id ,
" totalAmount " => [
" value " => " 10000.00 " ,
" currency " => " IDR "
],
" additionalInfo " => [
" merchantId " => $ merchant_id ,
" bank " => " mandiri " ,
" flags " => [
" shouldRandomizeVaNumber " => false
],
" mandiri " => [
" billInfo1 " => " bank_name " ,
" billInfo2 " => " mandiri " ,
" billInfo3 " => " Name: " ,
" billInfo4 " => " Budi Utomo " ,
" billInfo5 " => " Class: " ,
" billInfo6 " => " Computer Science " ,
" billInfo7 " => " ID: " ,
" billInfo8 " => " VT-12345 "
],
" customerDetails " => [
" firstName " => " Jokul " ,
" lastName " => " Doe " ,
" email " => " [email protected] " ,
" phone " => " +6281828384858 " ,
" billingAddress " => [
" firstName " => " Jukul " ,
" lastName " => " Doe " ,
" address " => " Kalibata " ,
" city " => " Jakarta " ,
" postalCode " => " 12190 " ,
" phone " => " +6281828384858 " ,
" countryCode " => " IDN "
],
" shippingAddress " => [
" firstName " => " Jukul " ,
" lastName " => " Doe " ,
" address " => " Kalibata " ,
" city " => " Jakarta " ,
" postalCode " => " 12190 " ,
" phone " => " +6281828384858 " ,
" countryCode " => " IDN "
]
],
" customField " => [
" 1 " => " custom-field-1 " ,
" 2 " => " custom-field-2 " ,
" 3 " => " custom-field-3 "
],
" items " => [
[
" id " => " a1 " ,
" price " => [
" value " => " 1000.00 " ,
" currency " => " IDR "
],
" quantity " => 3 ,
" name " => " Apel " ,
" brand " => " Fuji Apple " ,
" category " => " Fruit " ,
" merchantName " => " Fruit-store "
],
[
" id " => " a2 " ,
" price " => [
" value " => " 1000.00 " ,
" currency " => " IDR "
],
" quantity " => 7 ,
" name " => " Apel Malang " ,
" brand " => " Fuji Apple " ,
" category " => " Fruit " ,
" merchantName " => " Fruit-store "
]
]
]
);
/**
* basic implementation to create payment using va
*/
$ snapBiResponse = SnapBi:: va ()
-> withBody ( $ vaParams )
-> createPayment ( $ external_id );
โปรดดูเอกสารนี้สำหรับข้อมูลโดยละเอียดเพิ่มเติมเกี่ยวกับ Qris
$ external_id = " uzi-order-testing " . uniqid ();
$ merchant_id = " M001234 " ;
$ qrisBody = array (
" partnerReferenceNo " => $ external_id ,
" amount " => array (
" value " => " 1500.00 " ,
" currency " => " IDR "
),
" merchantId " => $ merchant_id ,
" validityPeriod " => " 2030-07-03T12:08:56-07:00 " ,
" additionalInfo " => array (
" acquirer " => " gopay " ,
" items " => array (
array (
" id " => " 8143fc4f-ec05-4c55-92fb-620c212f401e " ,
" price " => array (
" value " => " 1500.00 " ,
" currency " => " IDR "
),
" quantity " => 1 ,
" name " => " test item name " ,
" brand " => " test item brand " ,
" category " => " test item category " ,
" merchantName " => " Merchant Operation "
)
),
" customerDetails " => array (
" email " => " [email protected] " ,
" firstName " => " Merchant " ,
" lastName " => " Operation " ,
" phone " => " +6281932358123 "
),
" countryCode " => " ID " ,
" locale " => " id_ID "
)
);
/**
* basic implementation to create payment using Qris
*/
$ snapBiResponse = SnapBi:: qris ()
-> withBody ( $ qrisBody )
-> createPayment ( $ external_id );
โปรดดูเอกสารนี้สำหรับข้อมูลโดยละเอียดเพิ่มเติมเกี่ยวกับการรับสถานะธุรกรรม
$ merchant_id = " M001234 " ;
$ external_id = " uzi-order-testing " . uniqid ();
$ directDebitStatusByExternalIdBody = array (
" originalExternalId " => " uzi-order-testing66ce90ce90ee5 " ,
" originalPartnerReferenceNo " => " uzi-order-testing66ce90ce90ee5 " ,
" serviceCode " => " 54 " ,
);
$ directDebitStatusByReferenceBody = array (
" originalReferenceNo " => " A1202408280618283vcBaAmf7RID " ,
" serviceCode " => " 54 " ,
);
$ vaStatusBody = array (
" partnerServiceId " => " 5818 " ,
" customerNo " => " 628064192914 " ,
" virtualAccountNo " => " 5818628064192914 " ,
" inquiryRequestId " => " uzi-order-testing66dc4799e4af5 " ,
" paymentRequestId " => " uzi-order-testing66dc4799e4af5 " ,
" additionalInfo " => array (
" merchantId " => $ merchant_id
)
);
$ qrisStatusBody = array (
" originalReferenceNo " => " A120240910100828anKJlXgsi6ID " ,
" originalPartnerReferenceNo " => " uzi-order-testing66e01a9b8c6bf " ,
" merchantId " => $ merchant_id ,
" serviceCode " => " 54 "
);
/**
* Example code for Direct Debit getStatus using externalId
*/
$ snapBiResponse = SnapBi:: directDebit ()
-> withBody ( $ statusByExternalId )
-> getStatus ( $ external_id );
/**
* Example code for Direct Debit getStatus using referenceNo
*/
$ snapBiResponse = SnapBi:: directDebit ()
-> withBody ( $ statusByReference )
-> getStatus ( $ external_id );
/**
* Example code for VA (Bank Transfer) getStatus
*/
$ snapBiResponse = SnapBi:: va ()
-> withBody ( $ vaStatusBody )
-> getStatus ( $ external_id );
/**
*
* Example code for Qris getStatus
*/
$ snapBiResponse = SnapBi:: qris ()
-> withBody ( $ qrisStatusBody )
-> getStatus ( $ external_id );
โปรดดูเอกสารนี้สำหรับข้อมูลโดยละเอียดเพิ่มเติมเกี่ยวกับการยกเลิกการชำระเงิน
$ merchant_id = " M001234 " ;
$ external_id = " uzi-order-testing " . uniqid ();
$ directDebitCancelByReferenceBody = array (
" originalReferenceNo " => " A120240902104935GBqSQK0gtQID "
);
$ directDebitCancelByExternalIdBody = array (
" originalExternalId " => " uzi-order-testing66d5983eabc71 "
);
$ vaCancelBody = array (
" partnerServiceId " => " 5818 " ,
" customerNo " => " 628014506680 " ,
" virtualAccountNo " => " 5818628014506680 " ,
" trxId " => " uzi-order-testing66dc76754bf1c " ,
" additionalInfo " => array (
" merchantId " => $ merchant_id
)
);
$ qrisCancelBody = array (
" originalReferenceNo " => " A120240910091847fYkCqhCH1XID " ,
" merchantId " => $ merchant_id ,
" reason " => " cancel reason " ,
);
/**
* Basic implementation to cancel transaction using referenceNo
*/
$ snapBiResponse = SnapBi:: directDebit ()
-> withBody ( $ directDebitCancelByReferenceBody )
-> cancel ( $ external_id );
/**
* Basic implementation to cancel transaction using externalId
*/
$ snapBiResponse = SnapBi:: directDebit ()
-> withBody ( $ directDebitCancelByExternalIdBody )
-> cancel ( $ external_id );
/**
* Basic implementation of VA (Bank Transfer) to cancel transaction
*/
$ snapBiResponse = SnapBi:: va ()
-> withBody ( $ vaCancelBody )
-> cancel ( $ external_id );
/**
* Basic implementation of Qris to cancel transaction
*/
$ snapBiResponse = SnapBi:: qris ()
-> withBody ( $ qrisCancelBody )
-> cancel ( $ external_id );
โปรดดูเอกสารนี้สำหรับข้อมูลโดยละเอียดเพิ่มเติมเกี่ยวกับการคืนเงินที่ชำระ
$ merchant_id = " M001234 " ;
$ external_id = " uzi-order-testing " . uniqid ();
$ directDebitRefundByExternalIdBody = array (
" originalExternalId " => " uzi-order-testing66cec41c7f905 " ,
" partnerRefundNo " => " uzi-order-testing66cec41c7f905 " . " refund-0001 " . rand (),
" reason " => " some-reason " ,
" additionalInfo " => array (),
" refundAmount " => array (
" value " => " 100.00 " ,
" currency " => " IDR "
));
$ directDebitRefundByReferenceBody = array (
" originalReferenceNo " => " A120240828062651Y0NQMbJkDOID " ,
" reason " => " some-reason " ,
" additionalInfo " => array (),
" refundAmount " => array (
" value " => " 100.00 " ,
" currency " => " IDR "
));
$ qrisRefundBody = array (
" merchantId " => $ merchant_id ,
" originalPartnerReferenceNo " => " uzi-order-testing66e01a9b8c6bf " ,
" originalReferenceNo " => " A120240910100828anKJlXgsi6ID " ,
" partnerRefundNo " => " partner-refund-no- " . uniqid (),
" reason " => " refund reason " ,
" refundAmount " => array (
" value " => " 1500.00 " ,
" currency " => " IDR "
),
" additionalInfo " => array (
" foo " => " bar "
)
);
/**
* Example code for refund using externalId
*/
$ snapBiResponse = SnapBi:: directDebit ()
-> withBody ( $ directDebitRefundByExternalIdBody )
-> refund ( $ external_id );
/**
* Example code for refund using reference no
*/
$ snapBiResponse = SnapBi:: directDebit ()
-> withBody ( $ directDebitRefundByReferenceBody )
-> refund ( $ external_id );
/**
* Example code for refund using Qris
*/
$ snapBiResponse = SnapBi:: qris ()
-> withBody ( $ qrisRefundBody )
-> refund ( $ external_id );
คุณสามารถเพิ่มหรือแทนที่ค่าส่วนหัวได้โดยใช้สายวิธี ->withAccessTokenHeader
หรือ ->withTransactionHeader
โปรดดูเอกสารนี้เพื่อดูค่าส่วนหัวที่ Snap-Bi ต้องการ และดูส่วนหัวเริ่มต้นของวิธีการชำระเงินแต่ละวิธี
/**
* Example code for Direct Debit refund using additional header
*/
$ snapBiResponse = SnapBi:: directDebit ()
-> withAccessTokenHeader ([
" debug-id " => " va debug id " ,
" X-DEVICE-ID " => " va device id "
])
-> withTransactionHeader ([
" debug-id " => " va debug id " ,
" X-DEVICE-ID " => " va device id "
])
-> withBody ( $ directDebitRefundByExternalIdBody )
-> refund ( $ external_id );
/**
* Example code for using additional header on creating payment using VA
*/
$ snapBiResponse = SnapBi:: va ()
-> withAccessTokenHeader ([
" debug-id " => " va debug id " ,
" X-DEVICE-ID " => " va device id "
])
-> withTransactionHeader ([
" debug-id " => " va debug id " ,
" X-DEVICE-ID " => " va device id "
])
-> withBody ( $ vaParams )
-> createPayment ( $ external_id );
หากคุณได้บันทึกโทเค็นการเข้าถึงก่อนหน้านี้และต้องการใช้ซ้ำ คุณสามารถทำได้โดยใช้ ->withAccessToken
/**
* Example reusing your existing accessToken by using ->withAccessToken
*/
$ snapBiResponse = SnapBi:: va ()
-> withAccessToken ( " your-access-token " )
-> withBody ( $ vaParams )
-> createPayment ( $ external_id );
หากต้องการใช้การแจ้งเตือนการชำระเงินของ Snap-Bi คุณสามารถดูเอกสารนี้ได้ หากต้องการตรวจสอบการแจ้งเตือนทางเว็บฮุคที่คุณได้รับ คุณสามารถใช้วิธีนี้ด้านล่าง
//the request body/ payload sent by the webhook
$ payload = json_decode(
{
" originalPartnerReferenceNo " : " uzi-order-testing67039fa9da813 " ,
" originalReferenceNo " : " A120241007084530GSXji4Q5OdID " ,
" merchantId " : " G653420184 " ,
" amount " : {
" value " : " 10000.00 " ,
" currency " : " IDR "
},
" latestTransactionStatus " : " 03 " ,
" transactionStatusDesc " : " PENDING " ,
" additionalInfo " : {
" refundHistory " : [],
" userPaymentDetails " : []
}
};
// to get the signature value, you need to retrieve it from the webhook header called X-Signature
$ xSignature = " CgjmAyC9OZ3pB2JhBRDihL939kS86LjP1VLD1R7LgI4JkvYvskUQrPXgjhrZqU2SFkfPmLtSbcEUw21pg2nItQ0KoX582Y6Tqg4Mn45BQbxo4LTPzkZwclD4WI+aCYePQtUrXpJSTM8D32lSJQQndlloJfzoD6Rh24lNb+zjUpc+YEi4vMM6MBmS26PpCm/7FZ7/OgsVh9rlSNUsuQ/1QFpldA0F8bBNWSW4trwv9bE1NFDzliHrRAnQXrT/J3chOg5qqH0+s3E6v/W21hIrBYZVDTppyJPtTOoCWeuT1Tk9XI2HhSDiSuI3pevzLL8FLEWY/G4M5zkjm/9056LTDw== " ;
// to get the timeStamp value, you need to retrieve it from the webhook header called X-Timestamp
$ xTimeStamp = " 2024-10-07T15:45:22+07:00 " ;
// the url path is based on the webhook url of the payment method for example for direct debit is `/v1.0/debit/notify`
$ notificationUrlPath = " /v1.0/debit/notify "
/**
* Example verifying the webhook notification
*/
$ isVerified = SnapBi::notification()
->withBody( $ payload )
->withSignature( $ xSignature )
->withTimeStamp( $ xTimeStamp )
->withNotificationUrlPath( $ notificationUrlPath )
-> isWebhookNotificationVerified ()
กรุณาเปลี่ยนรหัสเซิร์ฟเวอร์และรหัสลูกค้าบน phpunit.xml
เป็นของคุณเอง
vendor/bin/phpunit
vendor/bin/phpunit tests/integration/CoreApiIntegrationTest.php
มีคำแนะนำหลายประการที่ต้องได้รับการดูแลเมื่อคุณพัฒนาปลั๊กอินใหม่
การจัดการสกุลเงินอื่นที่ไม่ใช่ IDR ขณะนี้ Midtrans v1
และ v2
ยอมรับการชำระเงินในสกุลเงินรูเปียห์อินโดนีเซียเท่านั้น เพื่อเป็นการยืนยันว่า มีการตรวจสอบความถูกต้องบนเซิร์ฟเวอร์เพื่อตรวจสอบว่าราคาสินค้าเป็นจำนวนเต็มหรือไม่ เท่าที่คุณอยากจะปัดเศษราคา อย่าทำอย่างนั้น! เตรียมพร้อมเสมอเมื่อระบบของคุณใช้สกุลเงินอื่นที่ไม่ใช่ IDR แปลงเป็น IDR ตามนั้น และปัดเศษราคาหลังจากนั้นเท่านั้น
พิจารณาใช้คุณสมบัติ การฆ่าเชื้ออัตโนมัติ