00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 class Mage_AmazonPayments_Model_Api_Asp_Ipn_Request extends Varien_Object
00035 {
00036
00037
00038
00039 const STATUS_CANCEL_CUSTOMER = 'A';
00040 const STATUS_CANCEL_TRANSACTION = 'CANCELLED';
00041 const STATUS_RESERVE_SUCCESSFUL = 'PR';
00042 const STATUS_PAYMENT_INITIATED = 'PI';
00043 const STATUS_PAYMENT_SUCCESSFUL = 'PS';
00044 const STATUS_PAYMENT_FAILED = 'PF';
00045 const STATUS_REFUND_SUCCESSFUL = 'RS';
00046 const STATUS_REFUND_FAILED = 'RF';
00047 const STATUS_SYSTEM_ERROR = 'SE';
00048
00049
00050
00051
00052 private $requestParams;
00053
00054
00055
00056
00057
00058
00059
00060 public function init($requestParams)
00061 {
00062 if (!$this->_validateRequestParams($requestParams)) {
00063 return false;
00064 }
00065 $this->requestParams = $requestParams;
00066 $this->_setRequestParamsToData($this->_convertRequestParams($requestParams));
00067 return $this;
00068 }
00069
00070
00071
00072
00073
00074
00075
00076 private function _validateRequestParams($requestParams)
00077 {
00078 if (!isset($requestParams['transactionAmount']) ||
00079 !isset($requestParams['transactionDate']) ||
00080 !isset($requestParams['status'])) {
00081 return false;
00082 }
00083
00084 $statusCode = $requestParams['status'];
00085 if ($statusCode != self::STATUS_CANCEL_CUSTOMER &&
00086 $statusCode != self::STATUS_CANCEL_TRANSACTION &&
00087 $statusCode != self::STATUS_RESERVE_SUCCESSFUL &&
00088 $statusCode != self::STATUS_PAYMENT_INITIATED &&
00089 $statusCode != self::STATUS_PAYMENT_SUCCESSFUL &&
00090 $statusCode != self::STATUS_PAYMENT_FAILED &&
00091 $statusCode != self::STATUS_REFUND_SUCCESSFUL &&
00092 $statusCode != self::STATUS_REFUND_FAILED &&
00093 $statusCode != self::STATUS_SYSTEM_ERROR) {
00094 return false;
00095 }
00096
00097 if ($statusCode != self::STATUS_CANCEL_TRANSACTION &&
00098 !isset($requestParams['referenceId'])){
00099 return false;
00100 }
00101
00102 if (($statusCode == self::STATUS_RESERVE_SUCCESSFUL ||
00103 $statusCode == self::STATUS_PAYMENT_SUCCESSFUL ||
00104 $statusCode == self::STATUS_REFUND_SUCCESSFUL) &&
00105 !isset($requestParams['transactionId'])) {
00106 return false;
00107 }
00108
00109 if (!$this->_convertAmount($requestParams['transactionAmount'])) {
00110 return false;
00111 }
00112
00113 if ($requestParams['status'] == self::STATUS_REFUND_SUCCESSFUL ||
00114 $requestParams['status'] == self::STATUS_REFUND_FAILED) {
00115 if (!$this->_convertReferenceId($requestParams['referenceId'])) {
00116 return false;
00117 }
00118 }
00119
00120 return true;
00121 }
00122
00123
00124
00125
00126
00127
00128
00129 private function _convertRequestParams($requestParams)
00130 {
00131 $_tmpResultArray = $this->_convertAmount($requestParams['transactionAmount']);
00132 unset($requestParams['transactionAmount']);
00133 $requestParams = array_merge($requestParams, $_tmpResultArray);
00134
00135 if ($requestParams['status'] == self::STATUS_REFUND_SUCCESSFUL ||
00136 $requestParams['status'] == self::STATUS_REFUND_FAILED) {
00137 $requestParams['referenceId'] = $this->_convertReferenceId($requestParams['referenceId']);
00138 }
00139
00140 $requestParams['transactionDate'] = $this->_convertTransactionDate($requestParams['transactionDate']);
00141
00142 return $requestParams;
00143 }
00144
00145
00146
00147
00148
00149
00150
00151
00152 private function _convertAmount($requestAmount)
00153 {
00154 $amount = Mage::getSingleton('amazonpayments/api_asp_amount');
00155 if (!$amount->init($requestAmount)) {
00156 return false;
00157 }
00158
00159 $resultArray = array();
00160 $resultArray['amount'] = $amount->getValue();
00161 $resultArray['currencyCode'] = $amount->getCurrencyCode();
00162 return $resultArray;
00163 }
00164
00165
00166
00167
00168
00169
00170
00171 private function _convertReferenceId($referenceId)
00172 {
00173 $tmpArr = array();
00174 if (!preg_match("/^Refund\sfor\s([0-9]{9})$/", $referenceId, $tmpArr)) {
00175 return false;
00176 }
00177 return $tmpArr[1];
00178 }
00179
00180
00181
00182
00183
00184
00185
00186 private function _convertTransactionDate($transactionDate)
00187 {
00188 return Mage::app()->getLocale()->date($transactionDate);
00189 }
00190
00191
00192
00193
00194
00195
00196 private function _setRequestParamsToData($requestParams)
00197 {
00198 foreach ($requestParams as $kay => $value) {
00199 $setMethodName = 'set' . ucfirst($kay);
00200 $this->$setMethodName($value);
00201 }
00202 }
00203
00204
00205
00206
00207 public function toString($format='')
00208 {
00209 $resultString = '';
00210 foreach($this->getData() as $kay => $value){
00211 $resultString .= "[$kay] = $value<br/>";
00212 }
00213 return $resultString;
00214 }
00215 }