Magento 결제 흐름
저는 Magento를위한 새로운 결제 모듈을 구현하기 위해 노력하고 있으며이 로직의 핵심 개념을 이해하고 싶습니다. 나는 Mage_Payment_Model_Method_Abstract 또는 그 하위 클래스에서 확장해야한다는 것을 알고 있지만, 내 문제는 내 모델에서 캡처 및 권한 부여 메서드를 사용하는시기와 사용 방법입니다. 예를 들어 다음과 같은 단계로 전체 프로세스를 분할하면 :
- 사용자가 장바구니에 와서 게이트웨이 인 결제 수단을 선택합니다.
- 시스템은 요청을 가로 채서 제출 된 모든 데이터를 수집하고 사용자를 게이트웨이 URL로 보냅니다.
- 사용자가 내 상점으로 정보를 보내는 게이트웨이 사이트에서 주문 (또는 취소)합니다.
- 내 스토어는 수신 된 데이터로 주문을 더 수정하고 완료 또는 취소 상태로 주문을 저장합니다.
이 단계에서 권한 부여 및 캡처 방법을 사용해야합니까? 누군가 권한 부여 및 캡처가 무엇을 의미하는지 설명해 주시면 감사하겠습니다.
다음은 제가 항상 개념을 이해 한 방법과 Magento에서 결제 모듈을 구현하기 위해 알아야 할 사항입니다. 원하는만큼 간단하지는 않지만 구체적인 "어디에서 이런 일이 발생합니까"에 대한 답변은 아래에 굵게 표시되어 있습니다.
사전 인터넷, 오프라인 및 오프라인 신용 카드 거래는 2 단계 프로세스였습니다.
판매 시점에 판매자는 구매를 위해 소비자의 신용 카드를 가져 갔을 때 신용 카드의 중앙 사무실로 전화를 걸어 "이 카드가이 네트워크에 대해 승인되었는지, 그리고 이 구매를 허용 할만큼 충분히 큰이 특정 소비자의 사용 가능한 신용 한도입니다. "
구매가 수락 된 경우 (거부 된 것이 아니라) 청구가 승인 되었다고합니다 . 소비자는 제품을 가져 가고 POS 시스템 / 현금 등록기는 거래가 승인되었음을 알립니다. 그런 다음 하루가 끝날 때 또는 주말에 미리 정해진 일정에 따라 또는 소유자가 음주를 중단하기로 결정하면 상인은 승인 된 모든 영수증을 살펴보고 또 다른 요청을 중앙 사무실로 보냅니다. 승인 된 거래 에서 자금 을 수집 합니다 . 자금을 확보하는 것은 판매자의 계정에 돈을 넣는 것입니다.
이것은 여전히 대부분의 게이트웨이에서 사용되는 모델이며 Magento Inc.가 결제 모듈을 위해 구현하기로 선택한 도메인 모델입니다.
사물이 실행되는 방식 은 소비자가 Magento와 같은 시스템에서 최종 결제 단계 에 도달하면 Magento가 게이트웨이의 API에 인증 요청을 발행하는 것입니다. 트랜잭션이 성공하면 주문이 시스템에 승인되고 권한 요청의 고유 ID가 저장됩니다. 다음으로, 소비재가 배송 될 때 상점 소유자 는 Magento 관리자를 사용하여 송장을 생성합니다 . 이 인보이스를 생성하면 캡처 요청이 발생합니다 (승인 요청에서 반환 된 상점 ID 사용). Magento에서 이러한 메서드 호출이 실행되는 곳 입니다.
그러나 모든 지불 게이트웨이가 이러한 개념을 약간 다르게 해석하고 모든 판매자가 "우리가 배송 할 때까지 캡처하지 않음"책임을 다르게 해석하기 때문에 상황이 까다로워집니다. 위에서 설명한 시나리오 외에도 결제 모듈에는 결제 작업 이라는 시스템 구성 값이 있습니다 . 위에서 설명한 흐름을 구현하는 Authorize Only 로 설정할 수 있습니다 . 또한 Authorize 및 Capture 로 설정할 수 있으며 , 주문이 접수되면 결제를 승인하고 캡처합니다. 심지어 얻는다 더메서드가 Authorize 및 Capture라고하지만 현재 버전의 Magento는이 모드 (적어도 Authorize.net의 경우)로 설정 될 때만 캡처 요청을 발행하고 Authorize.net은 내부적으로 승인 된 대부분의 하루 동안 캡처되지 않은 상태입니다. Magento가 주문, 결제 및 송장을 처리하는 방법은 버전마다 많이 변경되는 코드베이스의 한 영역입니다.
따라서 Magento 결제 모듈 시스템의 기본 아이디어는 결제 게이트웨이 로직을 프로그래밍하는 클러스터 F--로부터 사용자를 보호하는 것입니다. 당신에 authorize
방법 당신은 당신의 지불 게이트웨이의 권한 부여 API에 대한 호출을 구현 (또는이 시점에서 일이 원하는대로 검사 및 로직 수행). 이 방법은 지불 개체와 금액을 전달합니다. 로직을 요청 / 수행하고 어떤 이유로 든 유효하지 않다고 판단하면 다음과 같은 예외가 발생합니다.
Mage::throwException('...');
이것은 Magento에게 인증 실패를 알리고 그에 따라 작동합니다 (오류 메시지 등 표시). 그렇지 않으면 결제 개체에 데이터 멤버를 설정하고
return $this;
데이터 멤버는 나중에 지불을 캡처 할 때 필요한 것입니다. 어느 우리에게 가져다 capture
귀하의 지불 모듈의 제조 방법. 이 방법은 지불 개체와 금액도 전송됩니다. 이 방법에서는 캡처 요청을 발행합니다. 결제 개체에는 cc_trans_id
데이터 멤버가 있습니다.
$payment->getCcTransId()
그러면 게이트웨이에 대해 캡처를 실행할 수 있습니다. 에서 저장해야하는 데이터 멤버 중 하나입니다 authorize
. 다시 말하지만, 코드에서 캡처가 실패했다고 판단하면 예외가 발생합니다. 그렇지 않으면 return $this
.
authorize.net 결제 모듈에는 이것이 어떻게 수행되는지에 대한 좋은 예가 있습니다.
app/code/core/Mage/Paygate/Model/Authorizenet.php
예를 들어, capture
방법 의이 부분을 고려하십시오.
public function capture(Varien_Object $payment, $amount)
{
if ($payment->getCcTransId()) {
$payment->setAnetTransType(self::REQUEST_TYPE_PRIOR_AUTH_CAPTURE);
} else {
$payment->setAnetTransType(self::REQUEST_TYPE_AUTH_CAPTURE);
}
$payment->setAmount($amount);
$request= $this->_buildRequest($payment);
$result = $this->_postRequest($request);
//...
여기서 캡처 방법은 결제에 cc_trans_id
. 결과에 따라 anet_trans_type
다음 중 하나로 설정 됩니다.
self::REQUEST_TYPE_PRIOR_AUTH_CAPTURE
self::REQUEST_TYPE_AUTH_CAPTURE
This value is then used by the API request object to send an API call for either
- Capturing a pre-authorized transaction
- Immediate capture
Hope that helps, and good luck!
참고URL : https://stackoverflow.com/questions/5366551/magento-payment-flow
'program tip' 카테고리의 다른 글
String.format ()에 대한 Java의 % ld에 해당하는 C ++ (0) | 2020.11.04 |
---|---|
어설 션을 완전히 비활성화하는 방법 (0) | 2020.11.04 |
교리 2에서 엔티티를 다른 행으로 다시 저장하는 방법 (0) | 2020.11.04 |
NGINX gzip이 JavaScript 파일을 압축하지 않음 (0) | 2020.11.04 |
PHP-변수가 정의되지 않았는지 확인 (0) | 2020.11.04 |