novaday-co/moadian

用于与intamedia.ir的Moadian API交互的Laravel包

v2.0.0-beta 2023-10-18 06:33 UTC

This package is auto-updated.

Last update: 2024-09-27 17:28:05 UTC


README

此Laravel包提供了一种方便的方式与由intamedia.ir提供的“Moadian系统”(سامانه مودیان)API进行交互。使用此包,您可以轻松地向Moadian API发送请求并在您的Laravel应用程序中处理响应。

重要

此包提供对Moadian系统API的访问,并不旨在直接与用户交互。它专为将Moadian功能集成到其应用程序中的开发者设计。

要求

此包需要Laravel 8和PHP 7.4或更高版本。

安装

要安装此包,请运行以下命令

composer require novaday-co/moadian

用法

要使用此包,您需要从intamedia.ir获取用户名、私钥和证书。一旦您拥有这些凭证,您就可以在Laravel应用程序的.env文件中配置此包

MOADIAN_USERNAME=your-username-here
MOADIAN_PRIVATE_KEY_PATH=/path/to/private.pem
MOADIAN_CERTIFICATE_PATH=/path/to/certificate.crt

注意

默认的私钥存储位置为:storage_path('app/keys/private.pem');
默认的证书存储位置为:storage_path('app/keys/certificate.crt');

然后,您可以使用Moadian外观与Moadian API交互。以下是一些示例

use Novaday\Moadian\Facades\Moadian;

// Get server info
$info = Moadian::getServerInfo();

// Get fiscal info
$fiscalInfo = Moadian::getFiscalInfo();

// Get economic code information
$info = Moadian::getEconomicCodeInformation('10840096498');

// Inquiry by reference numbers
$info = Moadian::inquiryByReferenceNumbers('a45aa663-6888-4025-a89d-86fc789672a0');

发送发票

要向Moadian发送发票,您可以使用插件提供的sendInvoice()方法。以下是如何使用它的示例

use Novaday\Moadian\Invoice as MoadianInvoice;
use Novaday\Moadian\InvoiceHeader;
use Novaday\Moadian\InvoiceItem;
use Novaday\Moadian\Payment;

public function sendInvoice($invoiceId = '') {
    $invoiceId = intval($invoiceId);
    $invoice = Invoice::find($invoiceId);

    if (!$invoice) {
        throw new Exception('Invoice not found');
    }

    $timestamp = Carbon::parse($invoice->date)->timestamp * 1000;

    $header = new InvoiceHeader(env('MOADIAN_USERNAME'));
    $header->setTaxID(Carbon::parse($invoice->date), $invoice->number);
    $header->indati2m = $timestamp;
    $header->indatim = $timestamp;
    $header->inty = 1; //invoice type
    $header->inno = $invoiceId;
    $header->irtaxid = null; // invoice reference tax ID
    $header->inp = $invoice->inp; //invoice pattern
    $header->ins = 1;
    $header->tins = env('TAXID');
    $header->tob = 2;
    $header->bid = $invoice->nationalnum;
    $header->tinb = $invoice->nationalnum;
    $header->bpc = $invoice->postal;

    $amount   = $invoice->items->sum('amount');
    $discount = $invoice->items->sum('discount');
    $vat      = $invoice->items->sum('vat');
    $header->tprdis = $amount;
    $header->tdis = $discount;
    $header->tadis = $amount - $discount;
    $header->tvam = $vat;
    $header->todam = 0;
    $header->tbill = $amount - $discount + $vat;
    $header->setm = $invoice->setm;
    $header->cap = $amount - $discount + $vat;

    $moadianInvoice = new MoadianInvoice($header);

    foreach ($invoice->items as $item) {
        $body = new InvoiceItem();
        $body->sstid = $item->seals->sstid;
        $body->sstt = $item->desc;
        $body->am = '1';
        $body->mu = 1627;
        $body->fee = $item->amount;
        $body->prdis = $item->amount;
        $body->dis = $item->discount;
        $body->adis = $item->amount - $item->discount;
        $body->vra = 9;
        $body->vam = $item->vat; // or directly calculate here like floor($body->adis * $body->vra / 100)
        $body->tsstam = $item->amount - $item->discount + $item->vat;
        $moadianInvoice->addItem($body);
    }

    foreach ($invoice->cashes as $cashe) {
        if ($cashe->active == 1) {
            $payment = new Payment();
            $payment->trn = $cashe->code;
            $payment->pdt = Carbon::parse($cashe->date)->timestamp * 1000;
            $moadianInvoice->addPayment($payment);
        }
    }

    $info = Moadian::sendInvoice($moadianInvoice);
    $info = $info->getBody();
    $info = $info['result'][0];

    $invoice->taxID           = $header->taxid;
    $invoice->uid             = $info['uid'] ?? '';
    $invoice->referenceNumber = $info['referenceNumber'] ?? '';
    $invoice->taxResult       = 'send';

    $invoice->save();
}

请注意,您需要拥有有效的Moadian账户和凭证才能使用此插件。

此包还可以发送其他类型的发票(取消、纠正、销售退货)。有关不同类型发票的更多信息以及如何发送它们的说明,请参阅官方文档。

有用链接

贡献

如果您发现了一个错误或想为此包做出贡献,请随时提交一个问题创建一个拉取请求

许可

此包是开源软件,根据GPL-3.0许可证授权。