public function testMultiTransaction() { $transferRequest = new TransferRequest(); $transferRequest->setType(TransferRequest::TYPE_GENERAL); $transferRequest->setSourceBankAccount($this->account); $transferRequest->setDate(\DateTime::createFromFormat('Y-m-d', '2016-03-12')); $receiverBankAccount = new BankAccount(); $receiverBankAccount->setType(BankAccount::TYPE_CURRENT); $receiverBankAccount->setBankName('トウキョウトミン'); $receiverBankAccount->setHolderName('テストー.カブシキガイシャ'); //Note: using a normal dot/dash in this example $receiverBankAccount->setBankCode('0137'); $receiverBankAccount->setBranchName('シブヤ'); $receiverBankAccount->setBranchCode('031'); $receiverBankAccount->setNumber('1231990'); $violations = Validator::validateBankAccount($receiverBankAccount, Validator::BANK_ACCOUNT_ROLE_RECEIVER); $this->assertTrue(count($violations) === 0); $receiverTransaction = new MoneyTransferTransaction(); $receiverTransaction->setDestinationBankAccount($receiverBankAccount); $receiverTransaction->setAmount(1103661); $violations = Validator::validateMoneyTransferTransaction($receiverTransaction); $this->assertTrue(count($violations) === 0); $transferRequest->addTransaction($receiverTransaction); $receiverBankAccount = new BankAccount(); $receiverBankAccount->setType(BankAccount::TYPE_NORMAL); $receiverBankAccount->setBankName('ミツビシトウキョウUFJ'); $receiverBankAccount->setHolderName('カ)ゼンギン'); //Note: using a normal dot in this example $receiverBankAccount->setBankCode('0005'); $receiverBankAccount->setBranchName('ギンザドオリ'); $receiverBankAccount->setBranchCode('024'); $receiverBankAccount->setNumber('2275535'); $violations = Validator::validateBankAccount($receiverBankAccount, Validator::BANK_ACCOUNT_ROLE_RECEIVER); $this->assertTrue(count($violations) === 0); $receiverTransaction = new MoneyTransferTransaction(); $receiverTransaction->setDestinationBankAccount($receiverBankAccount); $receiverTransaction->setAmount(599300); $violations = Validator::validateMoneyTransferTransaction($receiverTransaction); $this->assertTrue(count($violations) === 0); $transferRequest->addTransaction($receiverTransaction); $zenginContentShiftJis = $this->generator->generate($transferRequest); //Let's verify that ミツビシトウキョウUFJ "small" (full-width + latin + small voiced) is converted correctly. //We do compare to the result file below, but we'd like to explicitly check for this beforehand anyway. $zenginContentUtf = \mb_convert_encoding($zenginContentShiftJis, 'utf-8', 'cp932'); $this->assertTrue(str_replace('ミツビシトウキヨウUFJ', '', $zenginContentUtf) !== $zenginContentUtf); $this->assertTrue(str_replace(1103661 + 599300, '', $zenginContentUtf) !== $zenginContentUtf, "Cannot find total amount."); $this->validateZenginContent($zenginContentShiftJis, 'results/multi-transaction.txt'); }
public function testValidationFailsWithCorruptedTransaction() { //Ensuring that validation cascades and checks transactions. $transaction = $this->transferRequest->getTransactions()[0]; $transaction->setAmount(-500); $violations = Validator::validateTransferRequest($this->transferRequest); $this->assertTrue(count($violations) === 1); $this->assertTrue(count($violations->get('transactions')) === 1); }
private function generateTransferXML(TransferRequest $request) { $xml = null; if ($request->getFundingMapped() == null) { $xml = "<TransferRequest>"; $xml .= "<LocalDate>" . $request->getLocalDate() . "</LocalDate>"; $xml .= "<LocalTime>" . $request->getLocalTime() . "</LocalTime>"; $xml .= "<TransactionReference>" . $request->getTransactionReference() . "</TransactionReference>"; $xml .= "<SenderName>" . $request->getSenderName() . "</SenderName>"; $xml .= "<SenderAddress>"; $xml .= "<Line1>" . $request->getSenderAddress()->getLine1() . "</Line1>"; $xml .= "<Line2>" . $request->getSenderAddress()->getLine2() . "</Line2>"; $xml .= "<City>" . $request->getSenderAddress()->getCity() . "</City>"; $xml .= "<CountrySubdivision>" . $request->getSenderAddress()->getCountrySubdivision() . "</CountrySubdivision>"; $xml .= "<PostalCode>" . $request->getSenderAddress()->getPostalCode() . "</PostalCode>"; $xml .= "<Country>" . $request->getSenderAddress()->getCountry() . "</Country>"; $xml .= "</SenderAddress>"; $xml .= "<FundingCard>"; $xml .= "<AccountNumber>" . $request->getFundingCard()->getAccountNumber() . "</AccountNumber>"; $xml .= "<ExpiryMonth>" . $request->getFundingCard()->getExpiryMonth() . "</ExpiryMonth>"; $xml .= "<ExpiryYear>" . $request->getFundingCard()->getExpiryYear() . "</ExpiryYear>"; $xml .= "</FundingCard>"; $xml .= "<FundingUCAF>" . $request->getFundingUCAF() . "</FundingUCAF>"; $xml .= "<FundingMasterCardAssignedId>" . $request->getFundingMasterCardAssignedId() . "</FundingMasterCardAssignedId>"; $xml .= "<FundingAmount>"; $xml .= "<Value>" . $request->getFundingAmount()->getValue() . "</Value>"; $xml .= "<Currency>" . $request->getFundingAmount()->getCurrency() . "</Currency>"; $xml .= "</FundingAmount>"; $xml .= "<ReceiverName>" . $request->getReceiverName() . "</ReceiverName>"; $xml .= "<ReceiverAddress>"; $xml .= "<Line1>" . $request->getReceiverAddress()->getLine1() . "</Line1>"; $xml .= "<Line2>" . $request->getReceiverAddress()->getLine2() . "</Line2>"; $xml .= "<City>" . $request->getReceiverAddress()->getCity() . "</City>"; $xml .= "<PostalCode>" . $request->getReceiverAddress()->getPostalCode() . "</PostalCode>"; $xml .= "<Country>" . $request->getReceiverAddress()->getCountry() . "</Country>"; $xml .= "</ReceiverAddress>"; $xml .= "<ReceiverPhone>" . $request->getReceiverPhone() . "</ReceiverPhone>"; $xml .= "<ReceivingCard>"; $xml .= "<AccountNumber>" . $request->getReceivingCard()->getAccountNumber() . "</AccountNumber>"; $xml .= "</ReceivingCard>"; $xml .= "<ReceivingAmount>"; $xml .= "<Value>" . $request->getReceivingAmount()->getValue() . "</Value>"; $xml .= "<Currency>" . $request->getReceivingAmount()->getCurrency() . "</Currency>"; $xml .= "</ReceivingAmount>"; $xml .= "<Channel>" . $request->getChannel() . "</Channel>"; $xml .= "<UCAFSupport>" . $request->getUCAFSupport() . "</UCAFSupport>"; $xml .= "<ICA>" . $request->getICA() . "</ICA>"; $xml .= "<ProcessorId>" . $request->getProcessorId() . "</ProcessorId>"; $xml .= "<RoutingAndTransitNumber>" . $request->getRoutingAndTransitNumber() . "</RoutingAndTransitNumber>"; $xml .= "<CardAcceptor>"; $xml .= "<Name>" . $request->getCardAcceptor()->getName() . "</Name>"; $xml .= "<City>" . $request->getCardAcceptor()->getCity() . "</City>"; $xml .= "<State>" . $request->getCardAcceptor()->getState() . "</State>"; $xml .= "<PostalCode>" . $request->getCardAcceptor()->getPostalCode() . "</PostalCode>"; $xml .= "<Country>" . $request->getCardAcceptor()->getCountry() . "</Country>"; $xml .= "</CardAcceptor>"; $xml .= "<TransactionDesc>" . $request->getTransactionDesc() . "</TransactionDesc>"; $xml .= "<MerchantId>" . $request->getMerchantId() . "</MerchantId>"; $xml .= "</TransferRequest>"; } else { $xml = "<TransferRequest>"; $xml .= "<LocalDate>" . $request->getLocalDate() . "</LocalDate>"; $xml .= "<LocalTime>" . $request->getLocalTime() . "</LocalTime>"; $xml .= "<TransactionReference>" . $request->getTransactionReference() . "</TransactionReference>"; $xml .= "<FundingMapped>"; $xml .= "<SubscriberId>" . $request->getFundingMapped()->getSubscriberId() . "</SubscriberId>"; $xml .= "<SubscriberType>" . $request->getFundingMapped()->getSubscriberType() . "</SubscriberType>"; $xml .= "<SubscriberAlias>" . $request->getFundingMapped()->getSubscriberAlias() . "</SubscriberAlias>"; $xml .= "</FundingMapped>"; $xml .= "<FundingUCAF>" . $request->getFundingUCAF() . "</FundingUCAF>"; $xml .= "<FundingMasterCardAssignedId>" . $request->getFundingMasterCardAssignedId() . "</FundingMasterCardAssignedId>"; $xml .= "<FundingAmount>"; $xml .= "<Value>" . $request->getFundingAmount()->getValue() . "</Value>"; $xml .= "<Currency>" . $request->getFundingAmount()->getCurrency() . "</Currency>"; $xml .= "</FundingAmount>"; $xml .= "<ReceiverName>" . $request->getReceiverName() . "</ReceiverName>"; $xml .= "<ReceiverAddress>"; $xml .= "<Line1>" . $request->getReceiverAddress()->getLine1() . "</Line1>"; $xml .= "<Line2>" . $request->getReceiverAddress()->getLine2() . "</Line2>"; $xml .= "<City>" . $request->getReceiverAddress()->getCity() . "</City>"; $xml .= "<PostalCode>" . $request->getReceiverAddress()->getPostalCode() . "</PostalCode>"; $xml .= "<Country>" . $request->getReceiverAddress()->getCountry() . "</Country>"; $xml .= "</ReceiverAddress>"; $xml .= "<ReceiverPhone>" . $request->getReceiverPhone() . "</ReceiverPhone>"; $xml .= "<ReceivingCard>"; $xml .= "<AccountNumber>" . $request->getReceivingCard()->getAccountNumber() . "</AccountNumber>"; $xml .= "</ReceivingCard>"; $xml .= "<ReceivingAmount>"; $xml .= "<Value>" . $request->getReceivingAmount()->getValue() . "</Value>"; $xml .= "<Currency>" . $request->getReceivingAmount()->getCurrency() . "</Currency>"; $xml .= "</ReceivingAmount>"; $xml .= "<Channel>" . $request->getChannel() . "</Channel>"; $xml .= "<UCAFSupport>" . $request->getUCAFSupport() . "</UCAFSupport>"; $xml .= "<ICA>" . $request->getICA() . "</ICA>"; $xml .= "<ProcessorId>" . $request->getProcessorId() . "</ProcessorId>"; $xml .= "<RoutingAndTransitNumber>" . $request->getRoutingAndTransitNumber() . "</RoutingAndTransitNumber>"; $xml .= "<CardAcceptor>"; $xml .= "<Name>" . $request->getCardAcceptor()->getName() . "</Name>"; $xml .= "<City>" . $request->getCardAcceptor()->getCity() . "</City>"; $xml .= "<State>" . $request->getCardAcceptor()->getState() . "</State>"; $xml .= "<PostalCode>" . $request->getCardAcceptor()->getPostalCode() . "</PostalCode>"; $xml .= "<Country>" . $request->getCardAcceptor()->getCountry() . "</Country>"; $xml .= "</CardAcceptor>"; $xml .= "<TransactionDesc>" . $request->getTransactionDesc() . "</TransactionDesc>"; $xml .= "<MerchantId>" . $request->getMerchantId() . "</MerchantId>"; $xml .= "</TransferRequest>"; } return $xml; }
private function generateTrailerLine(TransferRequest $request) { $items = array(); $items[] = array('%1d', self::RECORD_TRAILER); $items[] = array('%06d', count($request->getTransactions())); $totalAmount = array_sum(array_map(function (MoneyTransferTransaction $transaction) { return $transaction->getAmount(); }, $request->getTransactions())); $items[] = array('%012d', $totalAmount); $items[] = array('%s', str_repeat(' ', 101)); return StringUtil::sprintfItemGroupsToString($items); }