jooyeshgar/moadian

Laravel 交互 intamedia.ir 的 Moadian API 的包

v2.0.1 2024-09-10 12:10 UTC

This package is auto-updated.

Last update: 2024-09-10 12:12:42 UTC


README

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

重要通知:此包提供对 Moadian 系统API的访问权限,但并非用于直接用户交互。它旨在帮助开发者在他们的应用程序中集成 Moadian 功能。

为了获得友好的会计软件体验,我们建议您查看我们的 FreeAmin 项目(处于 开发 阶段)

要求

此包需要 Laravel 8 或更高版本。它已在 Laravel 8 和 PHP 7.4,以及 Laravel 10 和 PHP 8.1 上进行了测试。

安装

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

composer require jooyeshgar/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 Jooyeshgar\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 Jooyeshgar\Moadian\Invoice as MoadianInvoice;
use Jooyeshgar\Moadian\InvoiceHeader;
use Jooyeshgar\Moadian\InvoiceItem;
use Jooyeshgar\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 许可证许可。