Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Class Interface Library
- * Creator: Elka
- * Email: elka@tokodistributor.com
- * Date: 2019/07/09
- */
- namespace App\Libs;
- use App\Model\Mysqld\App\PaymentMethodReseller;
- use App\Model\Mysqld\Config\PaymentMethod;
- use App\Model\Mysqld\Transaction\OrderSummary;
- class PaymentVirtualAccount extends PaymentMethodAbstract
- {
- const CATEGORIES = 'VIRTUAL_ACCOUNT';
- const BNI_CODE_LENGTH = 8;
- const BNI = 'BNI';
- public function beforeTrans(
- OrderSummary $order
- ): bool {
- $this->setModel($order);
- $this->setOrderData($this->parseOrder($order));
- $serviceName = $this->getService();
- switch ($serviceName) {
- case self::BNI:
- if (!$this->createVaBNI()) {
- return false;
- }
- break;
- }
- return true;
- }
- private function createVaBNI(&$seq = 0)
- {
- $serviceName = self::BNI;
- $success = false;
- $orderData = $this->getOrderData();
- $paymentMethodModel = new PaymentMethod();
- $qry = $paymentMethodModel->where(
- 'categories', $this->getCategories()
- )
- ->where('name', $serviceName)
- ->first();
- if (!$qry) {
- $this->setErrMsg(__('payment_method.NOT_FOUND'));
- return false;
- }
- $pMethodResModel = new PaymentMethodReseller();
- $paymentData = [
- 'reseller_id' => $orderData['resellerId'],
- 'reseller_code' => $orderData['resellerId'],
- 'payment_method_id' => $qry->id,
- 'is_active' => 1,
- 'expired_at' => $orderData['orderExpired'],
- 'payment_method_name' => $serviceName
- ];
- $vaCode = '';
- $pMethodResModel = new PaymentMethodReseller();
- if ($qryMethod = $pMethodResModel->create($paymentData)) {
- $lengthLeft = self::BNI_CODE_LENGTH - strlen($qryMethod->id);
- $vaCode = str_repeat(0, $lengthLeft).$qryMethod->id;
- $qryMethod->code = $vaCode;
- $qryMethod->save();
- }
- $content = [
- 'trx_id' => (string) $orderData['orderId'],
- 'trx_amount' => (string) $orderData['orderAmount'],
- 'billing_type' => 'c',
- 'customer_name' => $orderData['resellerName'],
- 'customer_email' => $orderData['resellerEmail'],
- 'customer_phone' => $orderData['resellerPhone'],
- 'virtual_account' => $qry->no_rekening.$vaCode,
- 'datetime_expired' => $orderData['orderExpired'],
- 'description' => $orderData['orderNumber']
- ];
- $host = config('server.HOST_VA_BNI');
- $url = $host.'/create';
- $client = new \GuzzleHttp\Client();
- $response = $client->request('POST', $url, [
- 'body' => json_encode($content),
- 'headers' => [
- 'Content-Type' => 'application/json',
- ]
- ]);
- $resp = json_decode($response->getBody(), true);
- $seq++;
- if ($resp['status'] == 202) {
- if ($seq < self::TRY_LOOP) {
- $this->createVaBNI($seq);
- } else {
- $this->setErrMsg($resp['message']);
- }
- } else {
- $model = OrderSummary::find(
- $orderData['orderId']
- );
- $paymentDataModel = json_decode($model->payment_data, true);
- $paymentDataModel['name'] = $orderData['resellerName'];
- $paymentDataModel['number'] = $content['virtual_account'];
- $paymentDataModel['description'] = $content['description'];
- $model->payment_data = json_encode($paymentDataModel);
- $updateOrderModel = $model->save();
- if ($updateOrderModel) {
- $success = true;
- }
- }
- return $success;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement