Skip to content

Commit 4649a40

Browse files
authored
Merge pull request #274 from BoulangerV/OX6-154-Amz_Fix_for_release
OX6-154: Fix ref number double increment during AmzPay order
2 parents d47883a + b88f3ea commit 4649a40

File tree

3 files changed

+53
-1
lines changed

3 files changed

+53
-1
lines changed

extend/application/models/fcPayOneOrder.php

+8-1
Original file line numberDiff line numberDiff line change
@@ -1696,7 +1696,14 @@ public function fcHandleAuthorization($blReturnRedirectUrl = false, $oPayGateway
16961696
$oPayment->load($this->oxorder__oxpaymenttype->value);
16971697
$sAuthorizationType = $oPayment->oxpayments__fcpoauthmode->value;
16981698

1699-
$sRefNr = $oPORequest->getRefNr($this);
1699+
if (
1700+
$this->oxorder__oxpaymenttype->value === 'fcpoamazonpay'
1701+
&& !empty($this->_oFcpoHelper->fcpoGetSessionVariable('fcpoRefNr'))
1702+
) {
1703+
$sRefNr = $oPORequest->getRefNr(false, true);
1704+
} else {
1705+
$sRefNr = $oPORequest->getRefNr($this);
1706+
}
17001707

17011708
$aResponse = $oPORequest->sendRequestAuthorization($sAuthorizationType, $this, $this->getOrderUser(), $aDynvalue, $sRefNr);
17021709
$sMode = $oPayment->fcpoGetMode($aDynvalue);

lib/fcpohelper.php

+43
Original file line numberDiff line numberDiff line change
@@ -643,4 +643,47 @@ protected static function _useRegistry()
643643
return self::$_blUseRegistry;
644644
}
645645

646+
/**
647+
* Method that updates fcporefnr table if combination Prefix+RefNr isn't there yet
648+
*
649+
* @param string $sRefNr
650+
* @param bool $blIncludesPrefix
651+
* @return int
652+
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
653+
*/
654+
public function fcpoUpdateRefNr($sRefNr, $blIncludesPrefix = true)
655+
{
656+
try {
657+
$iRet = 0;
658+
659+
$sRawPrefix = (string) $this->getConfig()->getConfigParam('sFCPORefPrefix');
660+
$sBasePrefix = $blIncludesPrefix ? substr($sRefNr, 0, strlen($sRawPrefix)) : '';
661+
if ($blIncludesPrefix && $sRawPrefix !== $sBasePrefix) {
662+
// abort, the $sRefNr was built with a different prefix. Not possible to extract incremental part
663+
return -1;
664+
}
665+
$sRawIncrement = $blIncludesPrefix ? substr($sRefNr, strlen($sRawPrefix)) : $sRefNr;
666+
667+
$oDb = oxDb::getDb();
668+
$sPrefix = $oDb->quote($sRawPrefix);
669+
$sIncrement = $oDb->quote($sRawIncrement);
670+
671+
$sQuery = "SELECT fcpo_refnr FROM fcporefnr WHERE fcpo_refprefix = {$sPrefix} AND fcpo_refnr = {$sIncrement}";
672+
$sExistingRefNr = $oDb->GetOne($sQuery);
673+
674+
if ($sExistingRefNr) {
675+
return $iRet;
676+
}
677+
678+
$sQuery = "INSERT INTO fcporefnr (fcpo_refnr, fcpo_txid, fcpo_refprefix) VALUES ({$sIncrement}, '', {$sPrefix})";
679+
$oResult = $oDb->Execute($sQuery);
680+
if ($oResult) {
681+
$iRet = 1;
682+
}
683+
684+
return $iRet;
685+
} catch (Exception $oEx) {
686+
return -1;
687+
}
688+
}
646689
}

lib/fcporequest.php

+2
Original file line numberDiff line numberDiff line change
@@ -3322,6 +3322,7 @@ public function getRefNr($oOrder = false, $blAddPrefixToSession = false)
33223322
if ($blUseSessionRefNr) {
33233323
$sRefNrComplete = ($blAddPrefixToSession) ?
33243324
$sRawPrefix . $sSessionRefNr : $sSessionRefNr;
3325+
$this->_oFcpoHelper->fcpoUpdateRefNr($sSessionRefNr, false);
33253326
return $sRefNrComplete;
33263327
}
33273328

@@ -3330,6 +3331,7 @@ public function getRefNr($oOrder = false, $blAddPrefixToSession = false)
33303331

33313332
if ($oOrder && !empty($oOrder->oxorder__oxordernr->value)) {
33323333
$sRefNr = $oOrder->oxorder__oxordernr->value;
3334+
$this->_oFcpoHelper->fcpoUpdateRefNr($sRefNr, false);
33333335
} else {
33343336
$sQuery = "SELECT MAX(fcpo_refnr) FROM fcporefnr WHERE fcpo_refprefix = {$sPrefix}";
33353337
$iMaxRefNr = $oDb->GetOne($sQuery);

0 commit comments

Comments
 (0)