그러나 충분한 배경; 코드를 작성해 봅시다.
이제 실제 BrainTree PHP 클라이언트 라이브러리를 설치할 차례입니다. 다음 명령을 실행하여 작곡가로 그렇게 할 수 있습니다.
투명 리디렉션
SAQ D 또는 SAQ A를 작성 해야하는지 여부를 결정하는 데 도움이되는 주요 요인 중 하나는 신용 카드 데이터가 시스템을 통해 전송되는지 여부입니다. 또한 일반적인 서버 간 서버 (S2S) 모델의 시작 부분에서 웹 서버는 고객의 브라우저에 결제 양식을 보냅니다. 양식을 작성한 후 고객은 제출을 누르고,이 데이터를 웹 서버에 다시 게시 할 수있게되며,이 데이터의 일부를 유효성 검사 및 처리를 위해 BrainTree에 전달할 수 있습니다. 그것은 다음과 같이 보일 것입니다 :
그러나 투명한 리디렉션을 사용하면 양식이 설정되어 양식이 BrainTree의 서버에 직접 게시되고 응답이 클라이언트 브라우저로 다시 전송됩니다. 그런 다음 브라우저는 HTTP 303 리디렉션을 사용하여 웹 서버의 스크립트로 리디렉션됩니다. 마지막으로 웹 서버 스크립트는 BrainTree와의 트랜잭션을 확인하고 결과를 클라이언트 브라우저에 제시합니다. 그 모델은 다음과 비슷해 보입니다
이제 우리는 벨트 아래에 이론이 있었으므로 계속해서 코드를 작성합시다. 완전한 버전을보고 싶은 분들은 Github에서 찾을 수 있습니다.
우리가해야 할 첫 번째 일은 매우 기본적인 HTML 양식을 작성하여 처리를 위해 BrainTree로 보낼 데이터를 입력 할 수 있도록하는 것입니다. 기능에 집중할 수 있도록 최대한 간단하게 만들 것입니다.
여기에는 복잡한 일이 없습니다. 눈에 띄는 유일한 것은 입력 필드 이름이 배열 형식이라는 것입니다. 여기에서 유효한 필드 이름의 전체 목록을 볼 수 있습니다. 이 페이지에서 지적 할 또 다른 것은 입력 이름에 배열을 사용하는 데 문제가있는 프레임 워크를 사용하는 경우 (Zend Framework를보고 있습니다!) 대체 이중 밑줄을 사용할 수 있다는 것입니다. 통사론. 따라서 만료 날짜 입력은 다음과 같습니다
당신이 눈에 띄는 유일한 것은 내 양식에 "자동 완성"속성을 추가하고 그 값을 OFF로 설정한다는 것입니다. Braintree는이 작업을 수행 할 것을 권장하며, 그 이유가 분명하기를 바랍니다… composer require braintree/braintree:* 로그인 후 복사
로그인 후 복사
형태에 투명한 리디렉션의 마법을 활용하기 위해해야 할 몇 가지 다른 일이 있습니다. 그러나 그렇게하기 전에 Braintree의 API와 함께 작동하도록 스크립트를 구성해야합니다.
그렇게하는 방법을 알려주기 전에 명확성을 위해 모든 PHP와 HTML을 샘플 코드에 같은 파일에 넣었다고 언급 할 것입니다. 제작 프로젝트에서 설정 코드가 프로젝트의 부트 스트랩 파일에 들어가고 양식 처리 코드가 컨트롤러 동작 또는 기타 별도 파일로 들어가는 것은 말할 것도 없습니다. 좋아, 충분히 사과 -이 일을 설정하자!
<span><span><!doctype html></span>
</span> <span><span><span><html</span> lang<span>="en"</span>></span>
</span> <span><span><span><body</span>></span>
</span> <span><span><span><div</span> id<span>="wrap"</span>></span>
</span> <span><span><span><form</span> method<span>="post"</span> action<span>=""</span> autocomplete<span>="off"</span>></span>
</span> <span><span><span><label</span>></span>Name on Card: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cardholder_name]"</span>></span><span><span></label</span>></span>
</span> <span><span><span><label</span>></span>Card Number: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][number]"</span>></span><span><span></label</span>></span>
</span> <span><span><span><label</span>></span>CVV: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cvv]"</span> class<span>="short"</span>></span><span><span></label</span>></span>
</span> <span><span><span><label</span>></span>Expiration Date (MM/YYYY): <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][expiration_date]"</span> class<span>="short"</span>></span><span><span></label</span>></span>
</span> <span><span><span><input</span> type<span>="submit"</span> value<span>="submit payment"</span>></span>
</span> <span><span><span></form</span>></span>
</span> <span><span><span></div</span>></span>
</span> <span><span><span></body</span>></span>
</span> <span><span><span></html</span>></span></span> 로그인 후 복사
로그인 후 복사
첫 번째 줄을 사용하면 추가 파일을 명시 적으로 포함하지 않고도 작곡가의 자동 로더를 활용하고 Braintree의 라이브러리를 사용할 수 있습니다. 바라건대, 다음 네 줄은 샌드 박스 제어판 API 키 도구에서 구두로 복사되어 이전 섹션에서 소개했기 때문에 익숙해 보입니다. 분명히 이것을 자체 제어판 계정의 코드로 바꿀 것입니다.
다음으로하고 싶은 것은 고객이 민감한 데이터를 BrainTree로 직접 보내도록 양식 조치를 설정하는 것입니다. 다행히도 Braintree 라이브러리는 도우미 객체/방법을 제공하여 매우 쉽게 만듭니다. 따라서 양식 코드를 그렇게 수정하십시오composer require braintree/braintree:* 로그인 후 복사
로그인 후 복사
우리가해야 할 유일한 일은 BrainTree가 양식을 제출 한 후 고객을 리디렉션하려는 URL의 해시 표현을 포함하는 숨겨진 입력을 만드는 것입니다. 지정할 수 있습니다. 예를 들어, 이곳은 거래 금액을 넣을 수 있습니다. 스타일의 문제로, 반환 URL을 지불 양식 자체로 설정하여 사용자에게 오류를 표시하고 다시 제출할 수있는 기회를 제공하는 것을 좋아합니다. 이것이 바로 보이는 것입니다 :
분명히 여기에서 금액을 하드 코딩하고 있지만 프로덕션 앱에서는 일부 서버 측 논리를 사용하여이를 생성하거나 지정되지 않은 기부 양식의 경우 양식 필드를 생성합니다. 사용자가 하나를 제공 할 수 있습니다. 또한 보통 "합의 제출"옵션을 True로 설정했습니다. 그렇지 않으면이 거래는 단순히 <span><span><!doctype html></span>
</span> <span><span><span><html</span> lang<span>="en"</span>></span>
</span> <span><span><span><body</span>></span>
</span> <span><span><span><div</span> id<span>="wrap"</span>></span>
</span> <span><span><span><form</span> method<span>="post"</span> action<span>=""</span> autocomplete<span>="off"</span>></span>
</span> <span><span><span><label</span>></span>Name on Card: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cardholder_name]"</span>></span><span><span></label</span>></span>
</span> <span><span><span><label</span>></span>Card Number: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][number]"</span>></span><span><span></label</span>></span>
</span> <span><span><span><label</span>></span>CVV: <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][cvv]"</span> class<span>="short"</span>></span><span><span></label</span>></span>
</span> <span><span><span><label</span>></span>Expiration Date (MM/YYYY): <span><span><input</span> type<span>="text"</span> name<span>="transaction[credit_card][expiration_date]"</span> class<span>="short"</span>></span><span><span></label</span>></span>
</span> <span><span><span><input</span> type<span>="submit"</span> value<span>="submit payment"</span>></span>
</span> <span><span><span></form</span>></span>
</span> <span><span><span></div</span>></span>
</span> <span><span><span></body</span>></span>
</span> <span><span><span></html</span>></span></span> 로그인 후 복사
로그인 후 복사
입니다
이제 나는 이것을 내 형태에 숨겨진 필드로 추가해야합니다.
이제 데이터를 BrainTree에 제출할 준비가되었으므로 실제 투명한 리디렉션 응답을 처리하기 위해 코드를 추가해야합니다.
이제 우리가 방금 한 일을 알아 봅시다. 사용자가 제출 버튼을 누르면 양식이 BrainTree에 직접 게시되며 모든 고객의 민감한 정보는 PCI CSS 호환 서버에 안전하게 저장됩니다. 그런 다음 HTTP 303 리디렉션이 브라우저로 전송되어 $ TR_DATA 변수를 생성 할 때 지정된 URL로 사용자를 보내고 URL의 쿼리 문자열에 여러 매개 변수를 추가합니다.
.
데이터가 성공적으로 제출되면 해당 매개 변수 중 하나는 HTTP_STATUS가 될 것이며 BrainTree의 서버로 모든 것이 원활하게 실행되면 200으로 설정됩니다. 분명히 생산에서는 2000이 아닌 응답 코드를 처리하고 싶을 것입니다. 그러나 지금은 결제 정보를 시스템에 성공적으로 제출 한 경우이 IF 문의 코드 만 실행해야합니다. <span><span><span><input</span> type<span>="text"</span> name<span>="transaction__credit_card__expiration_date"</span>></span></span> 로그인 후 복사
다음으로 발생하는 일은 투명한 리디렉션에서 쿼리 문자열을 가져 와서 BrainTree로 다시 보내 트랜잭션을 완료해야한다는 것입니다. 그래서 우리는 다른 라이브러리 함수 (braintree_transparentRedirect :: 확인)를 실행하고 BrainTree에 계속해서 지불을 처리하도록 지시하기 위해 URL 쿼리 문자열을 제공합니다. 그런 일이 발생하면 Braintree는 스크립트를 결과 객체를 다시 보냅니다. 내부적으로 해당 객체는 Braintree_result_error 또는 Braintree_result_successful 일 수 있지만 두 개체 모두 부울 성공 속성을 가지므로 트랜잭션이 성공했는지 여부를 확인할 수 있습니다. . 당신은 아마 내가 시도/캐치 블록으로 전체 확인을 포장했다는 것을 알았을 것입니다. 동일한 페이지를 사용하여 양식을 표시하고 처리하는 결과는 TR 쿼리 문자열을 한 번만 확인할 수 있다는 것입니다. 즉, 트랜잭션이 실패한 후 누군가가 새로 고침 버튼을 누르면 코드가 만료 된 쿼리 문자열을 다시 확인하려고 시도하고 Braintree는 예외를 던집니다. .
이제 우리는 필요한 모든 것을 갖추고 있으므로 계속해서 테스트 거래를 실행할 수 있습니다. 샌드 박스 사용에 대한 전체 문서는 여기에서 찾을 수 있지만, 정말로 흥분하고 즉시 성공적인 트랜잭션을 실행하고 싶다면 411111111111111 (4 개에 15 개가 뒤 따르는”“카드 이름”에 이름을 입력하십시오. “카드 번호”, CVV 박스의 123 및 미래의 날짜는 만료일로. 모든 것이 잘 진행되면 샌드 박스로 돌아갈 수 있고 "고급 검색"에서 "트랜잭션"을 클릭하고 "검색"버튼을 클릭 한 후 첫 번째 성공적인 트랜잭션을 참조하십시오.
.
공상
투명 리디렉션은 PCI 준수 부담을 최소화하는 데 도움이되는 좋은 방법이지만 익숙해 져야 할 몇 가지 기발한 점이 있습니다. 우선, BrainTree의 거래, 고객 또는 신용 카드 개체 중 하나에 해당하지 않는 결제 양식에 데이터를 포함하려면 "사용자 정의 필드"기능을 사용해야합니다. 사용자가 좋아하는 색상을 캡처하고 싶다고 가정 해 봅시다. 내가 할 첫 번째 일은 제어판으로 가서 "설정 -> 처리"를 클릭하는 것입니다. "사용자 정의 필드"섹션으로 스크롤하고 "새"를 클릭하십시오. 다음 화면에서 자신을 찾을 수 있습니다 :
API 이름은 입력의 이름 속성 양식에서 참조 할 것입니다. 디스플레이 이름은 참조 용이며, Transaction과 함께 BrainTree에 사용자 정의 필드의 값을 저장할지 여부를 지정할 수 있습니다.
수집하는 것은 단순히 다음 필드를 양식에 추가하는 문제입니다.
BrainTree 제어판에 사용자 정의 필드를 추가하지 않고 그렇게하려고하면 유효성 검사 오류가 발생합니다.
검증에 대해 TR은 결제 양식의 서버 측 유효성 검사를 복잡하게 할 수 있습니다. 고객의 이메일 주소를 요구하고 싶다고 가정 해 봅시다. 거래가 이미 확인되기 전까지는 사용자가 공백을 남겼 음을 모르겠습니다. 내가 찾은 솔루션은 TR 스크립트의 성공 블록에서 내 검증을 실행 한 다음 유효성 검사가 통과되지 않으면 트랜잭션을 무효화하는 것입니다. 그래서 그것은 우리의 코드를 다음과 같이 바꿀 것입니다 :
보시다시피, 로컬 유효성 검사가 통과되지 않으면 클라이언트 라이브러리를 사용하여 내 BrainTree_Result_Success 객체의 트랜잭션 ID를 사용하여 트랜잭션을 무효화합니다. 마지막으로, 기본 예에서는 모든 필드에 BrainTree가 서버에서 숨어있는 민감한 신용 카드 데이터가 포함되어 있기 때문에 사용자를위한 양식 필드를 다시 채우지 않았습니다. 그러나 이제 일부 고객 데이터를 추가 했으므로 BrainTree 결과 객체의 데이터로 덜 민감한 필드를 미리 채울 수 있습니다. 내 GitHub 샘플에서 전체 코드를 볼 수 있지만, 무슨 일이 일어나고 있는지 이해하는 요령은 BrainTree_Result_Success 객체가 사용자가 제출 한 양식 데이터를 트랜잭션 속성에 저장하는 반면 BrainTree_Result_Error는 매개 변수 속성에 저장한다는 것을 아는 것입니다. 예를 들어, 이름 변수는 거래가 성공했을 때 $ result-> transaction-> customer [ 'firstName']에서 찾을 수 있지만, 실패한 트랜잭션은 $ result-> params [ 'transaction'] [ '에 저장합니다. 고객 '] ['firstName '].
포장
Braintree의 투명한 리디렉션은 응용 프로그램의 민감한 고객 데이터에 대한 노출을 최소화하여 PCI 준수 부담을 줄이고 PHP 클라이언트 라이브러리가 통합 프로세스를 크게 단순화하지만 NON이 아닌 비를 수집하고 검증하기가 더 어려워집니다. 고객의 신용 카드 정보와 동일한 형태로 지불 관련 정보.
다음에, 우리는 그들의 다른 영리한 해결책을 살펴볼 것입니다 : braintree.js.
투명한 리디렉션 에 대한 자주 묻는 질문
결제 처리에서 투명 리디렉션을 사용하는 주요 목적은 무엇입니까? 투명 리디렉션은 지불 처리에 사용되어 거래 보안을 향상시킵니다. 이를 통해 고객의 민감한 데이터가 판매 게이트웨이로 직접 전송되어 판매자의 서버를 우회 할 수 있습니다. 이로 인해 데이터 유출의 위험이 줄어들고 가맹점이 지불 카드 산업 데이터 보안 표준 (PCI DSS)을 준수 할 수 있도록 도와줍니다. 웹 사이트 최적화의 맥락에서 투명한 리디렉션이 어떻게 작동합니까? 최적화, 투명한 리디렉션은 HTTP 요청 수를 줄여 사이트의 로딩 속도를 향상시킬 수 있습니다. 사용자가 웹 페이지를 방문하면 서버는 상태 코드로 HTTP 응답을 보냅니다. 상태 코드에 리디렉션이 표시되면 브라우저는 추가 HTTP 요청을 작성해야하므로 로딩 시간이 느려질 수 있습니다. 투명한 리디렉션은이 추가 단계를 제거하여 웹 사이트를보다 빠르고 효율적으로 만들 수 있습니다. 투명한 리디렉션과 기존 리디렉션의 차이점은 무엇입니까?
기존 리디렉션은 가맹점의 서버를 포함합니다. 민감한 고객 데이터를 잠재적 인 보안 위험에 노출시킬 수있는 거래 프로세스. 반면에 투명한 리디렉션은 가맹점의 서버를 우회하고 데이터를 결제 게이트웨이로 직접 보냅니다. 내 웹 사이트에서 투명한 리디렉션을 구현하려면 어떻게 될 수 있습니까? 투명한 리디렉션을 구현하려면 기술 지식이 필요합니다. 웹 사이트를 결제 게이트웨이의 API와 통합해야합니다. 여기에는 웹 사이트에서 고객의 지불 정보를 게이트웨이에 직접 게시하는 양식을 설정하는 것이 포함됩니다. 그런 다음 게이트웨이는 트랜잭션을 처리하고 귀하의 웹 사이트에 응답을 다시 보냅니다. 투명한 리디렉션을 사용하면 어떤 이점이 있습니까?
투명한 리디렉션을 사용하는 주요 이점은 보안을 향상시키고 개선되었습니다. 웹 사이트 성능. 가맹점의 서버를 우회함으로써 투명한 리디렉션은 데이터 유출의 위험을 줄입니다. 또한 HTTP 요청의 수를 줄임으로써 웹 사이트의 로딩 속도를 향상시키는 데 도움이됩니다. 투명한 리디렉션을 사용하는 데 필요한 단점이 있습니까? 투명한 리디렉션을 사용하는 잠재적 인 단점 중 하나는 즉 기존 리디렉션보다 구현하는 것이 더 복잡 할 수 있습니다. 웹 개발 및 결제 게이트웨이 API에 대한 더 깊은 이해가 필요합니다. 그러나 향상된 보안 및 성능 이점은 종종 이러한 과제를 능가합니다.
는 모든 지불 게이트웨이와 호환되는 투명한 리디렉션입니까? 모든 지불 게이트웨이가 투명 리디렉션을 지원하는 것은 아닙니다. 결제 게이트웨이 제공 업체 가이 기능을 제공하는지 확인하는 것이 중요합니다. 투명한 리디렉션을 지원하는 인기있는 결제 게이트웨이에는 Braintree, Bluefin 및 PayPal이 포함됩니다. 투명한 리디렉션이 사용자 경험에 어떤 영향을 미칩니 까?
사용자의 관점에서 투명한 리디렉션은 원활합니다. 사용자는 단순히 판매자의 웹 사이트에 결제 정보를 입력하고 "제출"을 클릭합니다. 리디렉션은 백그라운드에서 발생하므로 사용자는 기존의 트랜잭션 프로세스와 비교하여 차이를 알지 못합니다. PCI 준수에 대한 투명한 리디렉션 도움말이 가능합니까? PCI 준수에 도움이됩니다. 고객의 지불 정보를 지불 게이트웨이로 직접 보내면 투명한 리디렉션은 판매자에 대한 PCI 준수 범위를 줄입니다. 이를 통해 상인이 지불 카드 산업에서 설정 한 엄격한 보안 표준을보다 쉽게 충족시킬 수 있습니다. 투명한 리디렉션이 실패하면 어떻게됩니까?
투명한 리디렉션이 실패하면 트랜잭션은 그렇지 않습니다. 처리됩니다. 정확한 응답은 지불 게이트웨이의 API에 따라 다릅니다. 대부분의 경우 게이트웨이는 상인의 웹 사이트에 오류 메시지를 다시 보낸 다음 사용자에게 표시 할 수 있습니다. 좋은 사용자 경험을 보장하기 위해 이러한 오류를 우아하게 처리하는 것이 중요합니다.