midtrans php

其他类别 2025-08-23

中期php

中期trans❤️php!

这是与作曲家兼容的Mid Trans付款API的官方PHP包装器/图书馆。有关该产品的更多信息,请访问https://*midtra*ns.c*om,并在http://docs.midtrans.com上查看文档,以获取更多技术详细信息。启动版2.6,该库现在支持Snap-bi。您可以转到此文档以了解有关Snap-Bi的更多信息。

1。安装

1.作曲家安装

如果您使用的是作曲家,则可以通过Composer CLI安装:

 composer require midtrans/midtrans-php

或者

将此要求行添加到您的composer.json文件:

{
    "require" : {
        "midtrans/midtrans-php" : " 2.* "
    }
}

并在终端上运行composer install

注意:如果您使用的是Laravel框架,在某些情况下,您还需要运行composer dumpautoload

然后, /Midtrans将作为您的Laravel项目中的对象可用(自动加载)。

1.B手动安装

如果您不使用作曲家,则可以克隆或下载此存储库。

然后,您应该在代码上需要/autoLoad Midtrans.php文件。

 require_once dirname ( __FILE__ ) . ' /pathofproject/Midtrans.php ' ;

// my code goes here 

2。如何使用

2.1一般设置

 // 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

您可以选择更改或添加每个事务上的自定义通知URL。可以通过将其他HTTP标头添加到负责请求中来实现。

 // Add new notification url(s) alongside the settings on Midtrans Dashboard Portal (MAP)
Config:: $ appendNotifUrl = " https://ex**am*ple.com/test1,https://example.com/test2 " ;
// Use new notification url(s) disregarding the settings on Midtrans Dashboard Portal (MAP)
Config:: $ overrideNotifUrl = " https://ex*am*ple.c*om/test1 " ;

更多细节

注意:当一起使用appendNotifUrloverrideNotifUrl时,仅将使用过度overrideNotifUrl

两个标头只能收到最多3个URL

智力 - 键

您可以选择在充电事务上添加divempotency键。可以通过将其他HTTP标头添加到负责请求中来实现。是一个独特的值,它在API请求上放在标题上。 Midtrans API接受标头上的IDEMPOTENCY-KEY,可以安全处理重试请求,而无需两次执行相同的操作。对于由于网络问题或其他意外错误而未收到响应的情况,这很有帮助。

Config:: $ paymentIdempotencyKey = " Unique-ID " ;

更多细节

2.2选择产品/方法

我们有3种不同的付款产品,您可以使用:

  • SNAP-可自定义的付款弹出窗口将出现在您的Web/App上(无重定向)。 Doc Ref
  • SNAP重定向 - 需要将客户重定向到由中型托管托管的付款URL。 Doc Ref
  • Core API(VT -Direct) - 基本的后端实现,您可以根据自己的意愿自定义嵌入在Web/应用程序上的前端(无重定向)。 Doc Ref

选择最适合自己独特需求的一种。

2.2

您可以在此处看到快照示例。

获得快照令牌

 $ params = array (
    ' transaction_details ' => array (
        ' order_id ' => rand (),
        ' gross_amount ' => 10000 ,
    )
);

$ snapToken = \ Midtrans \Snap:: getSnapToken ( $ params );

当客户点击付款按钮时,初始化snap js

 < 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.sand*box.m*idtr*ans.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 > 

实施通知处理程序

请参阅本节

2.2.b快速重定向

您可以在此处看到一些快照重定向示例。

获取付款页面的重定向URL

 $ 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 ();
}

实施通知处理程序

请参阅本节

2.2.c核心API(VT-Direct)

您可以在此处看到一些核心API示例。

设置客户端密钥

 MidtransNew3ds . clientKey = "<your client key>" ; 

结帐页面

请参考此文件

结帐过程

1。创建交易详细信息
 $ transaction_details = array (
  ' order_id '    => time (),
  ' gross_amount '  => 200000
);
2。创建项目详细信息,计费地址,运输地址和客户详细信息(可选)
 // 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 '            => " test@test.com " ,
    ' phone '            => " 081322311801 " ,
    ' billing_address '  => $ billing_address ,
    ' shipping_address ' => $ shipping_address
);
3。从结帐页面获取令牌ID
 // Token ID from checkout page
$ token_id = $ _POST [ ' token_id ' ];
4。创建交易数据
 // 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
);
5。充电
 $ response = \ Midtrans \CoreApi:: charge ( $ transaction_data );
6。信用卡3DS身份验证

信用卡收费结果可能包含3DS身份验证的redirect_url 。 3DS身份验证应在前端处理,请参阅API文档

有关信用卡3DS交易的完整示例,请参阅:

  • 核心API示例
7。处理交易状态
 // 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> " ;
}

8。实施通知处理程序

请参阅本节

2.3处理HTTP通知

创建分离的Web端点(通知URL)以接收HTTP Post Notification Callback/Webhook。每当更改事务状态时,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'
}

2.4过程交易

获取交易状态

 $ status = \ Midtrans \Transaction:: status ( $ orderId );
var_dump ( $ status );

批准交易

如果交易fraud_status ==挑战,则可以批准商家仪表板或API的交易:

 $ approve = \ Midtrans \Transaction:: approve ( $ orderId );
var_dump ( $ approve );

取消交易

您可以通过fraud_status == CHALLENGE取消交易,或使用transaction_status == CAPTURE信用卡事务(在结算之前)

 $ cancel = \ Midtrans \Transaction:: cancel ( $ orderId );
var_dump ( $ cancel );

到期交易

您可以使用transaction_status == PENDING处理(在结算或到期之前)到期

 $ 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 );

直接退款交易

退款通过直接退款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 );

3。snap-bi(*新功能启动v2.6.0)

STARAR NASIANT OPEN API PEMBAYARAN,即简短的SNAP,是印度尼西亚银行出版的全国付款API标准。要了解更多信息,您可以阅读此文档

3.1一般设置

 //These config value are based on the header stated here https://docs.*mid**trans.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 "

3.2创建付款

3.2.1直接借方(Gopay,Dana,Shopeepay)

有关使用直接借方创建付款的更多详细信息,请参阅此文档。

   
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.go**ogl*e.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 " => " andri@litani.com " ,
            " 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 " => "							 
					
下载源码

通过命令行克隆项目:

git clone https://github.com/Midtrans/midtrans-php.git