Note that there are some explanatory texts on larger screens.

plurals
  1. POAuth.net Issue on capture
    primarykey
    data
    text
    <p>My function to capture the transaction on auth.net is </p> <pre><code>public function capture(Varien_Object $payment, $amount){ if(!$this-&gt;isEnabled()){ return parent::capture($payment, $amount); }else{ $captureCase = $_POST['invoice']['capture_case']; if(isset($captureCase) &amp;&amp; $captureCase == "online"){ if($capOrderid = $payment-&gt;getOrder()-&gt;getIncrementId()){ $capOrder = $payment-&gt;getOrder(); $capPayment = $payment; $capAmount = $amount; $capTransID = $capPayment-&gt;getLastTransId(); $ccProfile = $this-&gt;getProfileForOrder($capOrderid); if(isset($ccProfile['used_this_profile']) &amp;&amp; $ccProfile['used_this_profile'] == 1){ $pID = $ccProfile['cust_profile_id']; $ppID = $ccProfile['cust_paymentprofile_id']; $nick = $ccProfile['nickname']; $lastOrderId = $capOrder-&gt;getIncrementId(); $cvv = $payment-&gt;getCcCid(); $directResponseFields = $this-&gt;createTransaction($pID,$ppID,$capAmount,$lastOrderId,"profileTransPriorAuthCapture",$cvv,$capTransID); $responseCode = $directResponseFields[0]; // 1 = Approved 2 = Declined 3 = Error $responseReasonCode = $directResponseFields[2]; // See http://www.authorize.net/support/AIM_guide.pdf $responseReasonText = $directResponseFields[3]; $approvalCode = $directResponseFields[4]; // Authorization code $transId = $directResponseFields[6]; switch ($responseCode) { case "1": $capPayment-&gt;setStatus(self::STATUS_APPROVED); $capPayment-&gt;setCcTransId($transId); $capPayment-&gt;setLastTransId($transId); if (!$capPayment-&gt;getParentTransactionId() || $transId != $capPayment-&gt;getParentTransactionId()) { $capPayment-&gt;setTransactionId($transId); } return true; break; case "2": Mage::throwException(__('Payment authorization transaction has been declined.')); break; default: Mage::throwException(__('Payment authorization error.')); break; } } } }elseif(!isset($captureCase)){ $oldorderid = Mage::getModel('adminhtml/sales_order_create')-&gt;getSession()-&gt;getOrder()-&gt;getIncrementId(); if(isset($oldorderid) &amp;&amp; ($oldorderid != $payment-&gt;getOrder()-&gt;getIncrementId())){ // if order is created from admin and has an order to refund first. $oldOrder = Mage::getModel('sales/order')-&gt;loadByIncrementId($oldorderid); $oldPayment = $oldOrder-&gt;getPayment(); $oldAmount = $oldPayment-&gt;getAmountOrdered(); $transID = $oldPayment-&gt;getLastTransId(); $ccProfile = $this-&gt;getProfileForOrder($oldorderid); if(isset($ccProfile['used_this_profile']) &amp;&amp; $ccProfile['used_this_profile'] == 1){ $pID = $ccProfile['cust_profile_id']; $ppID = $ccProfile['cust_paymentprofile_id']; if($directResponseFields = $this-&gt;refundCIM($pID,$ppID,$transID,$oldorderid,$oldAmount)){ $responseCode = $directResponseFields[0]; // 1 = Approved 2 = Declined 3 = Error $responseReasonCode = $directResponseFields[2]; // See http://www.authorize.net/support/AIM_guide.pdf $responseReasonText = $directResponseFields[3]; $approvalCode = $directResponseFields[4]; // Authorization code $transId = $directResponseFields[6]; switch ($responseCode) { case "1": //$oldPayment-&gt;setStatus(self::STATUS_SUCCESS); $oldOrder-&gt;cancel()-&gt;save(); //$oldPayment-&gt;setIsTransactionClosed(1); $oldOrder-&gt;setState(Mage_Sales_Model_Order::STATE_CANCELED, true)-&gt;save(); //$oldOrder-&gt;setState(Mage_Sales_Model_Order::STATE_CLOSED, true)-&gt;save(); //Mage::throwException(__("a".$responseCode)); //return $this; break; case "4": Mage::throwException(__('Error Code 4. You cannot refund an unsettled transaction.')); break; default: if(isset($responseReasonText) &amp;&amp; !empty($responseReasonText)){ Mage::throwException(__("Code: ".$responseReasonCode." - ".$responseReasonText)); }else{ Mage::throwException(__('Error in refunding the payment. This can happen if the customer has deleted their profile from CIM.')); } break; } } }else if(isset($transID) &amp;&amp; $oldAmount &gt; 0) { $oldPayment-&gt;setAnetTransType(self::REQUEST_TYPE_CREDIT); $oldRequest = $this-&gt;_buildRequest($oldPayment); $oldRequest-&gt;setXTransId($transID); $oldPayment-&gt;setXAmount($oldAmount,2); $oldRequest-&gt;setXCurrencyCode($oldOrder-&gt;getBaseCurrencyCode()); $oldRequest-&gt;setXCardNum($oldPayment-&gt;getCcLast4()); $oldResult = $this-&gt;_postRequest($oldRequest); if ($oldResult-&gt;getResponseCode()==self::RESPONSE_CODE_APPROVED) { $oldPayment-&gt;setStatus(self::STATUS_SUCCESS); $oldOrder-&gt;cancel()-&gt;save(); }else{ Mage::throwException($this-&gt;_wrapGatewayError($oldResult-&gt;getResponseReasonText())); //////////error here///////// } }else{ Mage::throwException(Mage::helper('authnet')-&gt;__('Error in refunding the payment.')); } } } $quote = Mage::getSingleton('customer/session'); $nickname = $quote-&gt;getAuthorizenetNickname(); $profile = $quote-&gt;getProfile(); $postedNickname = $quote-&gt;getNickname(); if(!isset($nickname) || $nickname == "" || $nickname == "nnnew"){ if ($amount &lt;= 0) { Mage::throwException(Mage::helper('authnet')-&gt;__('Invalid amount for authorization.')); } if ($payment-&gt;getCcTransId()) { $payment-&gt;setAnetTransType(self::REQUEST_TYPE_PRIOR_AUTH_CAPTURE); } else { $payment-&gt;setAnetTransType(self::REQUEST_TYPE_AUTH_CAPTURE); } $payment-&gt;setAmount($amount); $request= $this-&gt;_buildRequest($payment); $result = $this-&gt;_postRequest($request); if ($result-&gt;getResponseCode() == self::RESPONSE_CODE_APPROVED) { $payment-&gt;setStatus(self::STATUS_APPROVED); $payment-&gt;setCcTransId($result-&gt;getTransactionId()); $payment-&gt;setLastTransId($result-&gt;getTransactionId()); if (!$payment-&gt;getParentTransactionId() || $result-&gt;getTransactionId() != $payment-&gt;getParentTransactionId()) { $payment-&gt;setTransactionId($result-&gt;getTransactionId()); } if(isset($profile) &amp;&amp; $profile == "save"){ $order = $payment-&gt;getOrder(); $billing = $order-&gt;getBillingAddress(); $ccno = $payment-&gt;getCcNumber(); $exp = sprintf('%04d-%02d', $payment-&gt;getCcExpYear(), $payment-&gt;getCcExpMonth()); $cvv = $payment-&gt;getCcCid(); $email = $order-&gt;getCustomerEmail(); $orderId = $order-&gt;getIncrementId(); if($profiles = $this-&gt;getCustId($email)){ foreach ($profiles as $_nickname =&gt; $cust_profile_id){ if($_nickname == $postedNickname){ Mage::throwException(__('Nickname already in use.')); } } $profileId = $cust_profile_id; }else{ $profileId = $this-&gt;createProfile($payment,true); } if($profileId &amp;&amp; $profileId != 1){ $ppId = $this-&gt;createPaymentProfile($billing,$profileId,$ccno,$exp,$postedNickname,$email,$cvv,true); $this-&gt;assignNicknameToOrder($orderId,$profileId,$ppId,$postedNickname,0); } } return $this; } if ($result-&gt;getResponseReasonText()) { Mage::throwException($this-&gt;_wrapGatewayError($result-&gt;getResponseReasonText())); } Mage::throwException(Mage::helper('paygate')-&gt;__('Error in capturing the payment.')); }else if($nickname != "" &amp;&amp; $nickname != "nnnew"){ $selectedNickname = $nickname; $conn_selected = $this-&gt;conn(); $results_selected = $conn_selected-&gt;query("SELECT * FROM ".$this-&gt;getTable()." WHERE cust_paymentprofile_id = '".$selectedNickname."'"); while ($row = $results_selected-&gt;fetch() ) { $pID = $row['cust_profile_id']; $nick = $row['nickname']; } $ppID = $selectedNickname; $order = $payment-&gt;getOrder(); $lastOrderId = $order-&gt;getIncrementId(); $cvv = $payment-&gt;getCcCid(); $directResponseFields = $this-&gt;createTransaction($pID,$ppID,$amount,$lastOrderId,"profileTransAuthCapture",$cvv); $responseCode = $directResponseFields[0]; // 1 = Approved 2 = Declined 3 = Error $responseReasonCode = $directResponseFields[2]; // See http://www.authorize.net/support/AIM_guide.pdf $responseReasonText = $directResponseFields[3]; $approvalCode = $directResponseFields[4]; // Authorization code $transId = $directResponseFields[6]; switch ($responseCode) { case "1": $payment-&gt;setStatus(self::STATUS_APPROVED); //$payment-&gt;setCcTransId($result-&gt;getTransactionId()); $payment-&gt;setLastTransId($transId); if (!$payment-&gt;getParentTransactionId() || $transId != $payment-&gt;getParentTransactionId()) { $payment-&gt;setTransactionId($transId); } $this-&gt;assignNicknameToOrder($lastOrderId,$pID,$ppID,$nick,1); return true; break; case "2": Mage::throwException(__('Payment authorization transaction has been declined.')); break; default: Mage::throwException(__('Payment authorization error.')); break; } } Mage::throwException(Mage::helper('paygate')-&gt;__('Error in capturing the payment.')); } } </code></pre> <p>the issue comes randomly when I try to Caputre an already authorized amount..Dump of my transaction request is </p> <pre><code>[request] =&gt; Array ( [x_version] =&gt; 3.1 [x_delim_data] =&gt; True [x_relay_response] =&gt; False [x_test_request] =&gt; FALSE [x_login] =&gt; **** [x_tran_key] =&gt; **** [x_type] =&gt; PRIOR_AUTH_CAPTURE [x_method] =&gt; CC [x_invoice_num] =&gt; dummy [x_amount] =&gt; 127.48 [x_currency_code] =&gt; USD [x_trans_id] =&gt; [x_first_name] =&gt; dummy [x_last_name] =&gt; dummyl [x_company] =&gt; [x_address] =&gt; dummy Apt 67 [x_city] =&gt; dummy [x_state] =&gt; California [x_zip] =&gt; dummy [x_country] =&gt; US [x_phone] =&gt; dummy [x_fax] =&gt; [x_cust_id] =&gt; [x_customer_ip] =&gt; 68.183xxxxx8 [x_customer_tax_id] =&gt; [x_email] =&gt; abc@aol.com [x_email_customer] =&gt; 0 [x_merchant_email] =&gt; [x_ship_to_first_name] =&gt;dummy [x_ship_to_last_name] =&gt; dummy [x_ship_to_company] =&gt; [x_ship_to_address] =&gt; dummy Blvd. [x_ship_to_city] =&gt; dummy [x_ship_to_state] =&gt; dummy [x_ship_to_zip] =&gt; dummy [x_ship_to_country] =&gt; US [x_po_num] =&gt; [x_tax] =&gt; 0.0000 [x_freight] =&gt; 0.0000 ) </code></pre> <p>and the response is </p> <pre><code>[result] =&gt; Array ( [response_code] =&gt; 3 [response_subcode] =&gt; 2 [response_reason_code] =&gt; 33 [response_reason_text] =&gt; A valid referenced transaction ID is required. [approval_code] =&gt; [avs_result_code] =&gt; P [transaction_id] =&gt; 0 [invoice_number] =&gt; 100dddd38 [description] =&gt; [amount] =&gt; 127.48 [method] =&gt; CC [transaction_type] =&gt; prior_auth_capture [customer_id] =&gt; [md5_hash] =&gt; dummy [card_code_response_code] =&gt; [c_av_vresponse_code] =&gt; [split_tender_id] =&gt; [acc_number] =&gt; [card_type] =&gt; [requested_amount] =&gt; [balance_on_card] =&gt; ) </code></pre> <p>I noted that <code>Transaction ID</code> is missing In my Request, the Auth.net developer site says the same ..Some times the orders get captured, but most of time, they dont..I also noted that both successful captures and unsuccessfull captures,transaction ID exists in Magento ( I can view it in in admin panel, see <a href="http://awesomescreenshot.com/0e0sz0wba">this</a></p> <p>When I try to create invoice and capture transaction via mag admin, I get the error</p> <p><strong>Gateway error: A valid referenced transaction ID is required.</strong></p> <p>I am wondering why this Happening..Can somebody help me>? any idea?</p> <p>My plate form is Magento Enterpise (1.12.x) and the extension I am trying to get working is Elayers ( I did not purchased it, working for someone)</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload