2016-06-10 3 views
0

Silverstripe에서 양식을 제출하면 제출 된 모든 데이터를 취하고 양식을 반환 한 다음 데이터에 md5 체크섬을 추가합니다. 일단 완료되면 외부 URL로 보내야하지만 제대로 작동하지 않습니다.Silverstripe - 외부 URL에 데이터 게시

public function doPayment($data, Form $form) { 
    $data['CHECKSUM'] = md5($data['NAME'].$data['SURNAME']); 

보낼 방법이 있습니까?

나는
setFormAction 

을 시도했지만 양식이 이미 반환 된 후 작동하지 않습니다.

감사합니다.

+0

나는 당신이 무엇을 다루고 있는지 지급 제공자에게 있습니다? 옴니 페이 또는 실버 스트라이프 - 옴니 페이 모듈과 같은 것을 사용하는 것이 더 낫지는 않습니까? – bummzack

+0

불행히도 Omnipay를 사용할 수 없으므로 지역 업체 중 하나가되어야합니다. – Craig

+0

나는 본다. 당신은 여전히 ​​Omnipay 게이트웨이를 구현할 수 있습니다. 필요한 기능에 따라 전반적으로 작업이 적을 수 있습니다. – bummzack

답변

0

정말로 MD5를 추가하기 위해 양식을 다시로드하지 마십시오. 이렇게하면 사용자는 제출하기 전에 양식 데이터를 수정할 수 있습니다 (따라서 해시가 무효화됩니다).

대신해야 할 일은 양식 데이터를 가져 와서 해시를 계산하고 모든 것을 서버 (예 : 결제 서비스 제공 업체)에 직접 보냅니다. 이 경우 curl 호출을 사용하거나 guzzle 라이브러리를 사용할 수 있습니다.

목구멍을 사용하여, 코드는 다음과 같이 수 :

use GuzzleHttp\Client; 

public function doPayment($data, Form $form) 
{ 
    $data['CHECKSUM'] = md5($data['NAME'].$data['SURNAME']); 

    $client = new Client([ 
     'base_uri' => 'https://paymentprovider.tld' 
    ]); 

    $response = $client->request('POST', 'https://paymentprovider.tld/pay', [ 
     'form_params' => $data 
    ]); 

    if ($response->getStatusCode() === 200) { 
     // sucesss! 
    } 
} 
+0

죄송합니다. 조금 더 명확하게 작성 했어야합니다. 이것은 내가 현재하고있는 일이지만 모든 것을 지불 서버에 보냈습니다. – Craig

+0

@Craig CURL이나 guzzle을 사용하고 있습니다 만 작동하지 않습니까? – bummzack

+0

나는 CURL에 시도를했지만 그 중 하나를 보내지 못했습니다. CURL에 대해 좀 더 살펴 보겠습니다. – Craig

관련 문제