SAE에서 알리페이의 "발송 확인"인터페이스를 지원하여 "protocol error"를 완벽하게 해결

이틀 동안 SAE 기반 프로젝트가 알리페이의 담보 거래 결제 인터페이스에 사용되었다.결제 인터페이스는 SAE 디버깅이 모두 정상적이지만 발송 확인을 사용할 때 "ERROR: 501 - protocol error"라는 오류가 계속 발생했습니다.
나중에 알리페이 인터페이스의'alipay_core.function.php'의 getHttpResponse는 fsockopen+ssl을 사용하여 원격 캡처를 했지만 SAE는 SSL을 열지 않았습니다.그러나 알리페이 인터페이스의 주석도 "이 함수의 기능은curl로 실현하고 대체할 수 있다.curl은 자체적으로 작성해야 한다"고 썼다.
알리페이 인터페이스의 원래 getHttpResponse 방법은 다음과 같습니다.
/**
*  
*  : curl 。curl 。
* $url  URL 
* @param $input_charset  。 : 
* @param $time_out  。 :60
* return  
*/
function getHttpResponse($url, $input_charset = '', $time_out = "60") {
        $urlarr     = parse_url($url);
        $errno      = "";
        $errstr     = "";
        $transports = "";
        $responseText = "";
        if($urlarr["scheme"] == "https") {
                $transports = "ssl://";
                $urlarr["port"] = "443";
        } else {
                $transports = "tcp://";
                $urlarr["port"] = "80";
        }
        $fp=@fsockopen($transports . $urlarr['host'],$urlarr['port'],$errno,$errstr,$time_out);
        if(!$fp) {
                die("ERROR: $errno - $errstr<br />
"); } else { if (trim($input_charset) == '') { fputs($fp, "POST ".$urlarr["path"]." HTTP/1.1\r
"); } else { fputs($fp, "POST ".$urlarr["path"].'?_input_charset='.$input_charset." HTTP/1.1\r
"); } fputs($fp, "Host: ".$urlarr["host"]."\r
"); fputs($fp, "Content-type: application/x-www-form-urlencoded\r
"); fputs($fp, "Content-length: ".strlen($urlarr["query"])."\r
"); fputs($fp, "Connection: close\r
\r
"); fputs($fp, $urlarr["query"] . "\r
\r
"); while(!feof($fp)) { $responseText .= @fgets($fp, 1024); } fclose($fp); $responseText = trim(stristr($responseText,"\r
\r
"),"\r
"); return $responseText; } }

이제 이 방법을 다음과 같이 수정합니다.
/**
*  
*  : curl 。curl 。
* $url  URL 
* @param $input_charset  。 : 
* @param $time_out  。 :60
* return  
*/
function getHttpResponse($url, $input_charset = '', $time_out = "60") {

    /*  SAE  fsockopen + ssl    CURL  */
    $ch = curl_init();
        curl_setopt ($ch, CURLOPT_URL, $url);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $time_out);
        $responseText = curl_exec($ch);
        curl_close($ch);                
        return $responseText;
}

이렇게 하면'ERROR:501-protocol error'문제를 완벽하게 해결할 수 있다.알리페이 인터페이스에서 제공하는 데모를 사용하여 확인 배송을 테스트했는데 과연 성공했습니다.마지막으로 SAE의 문봉이의 따뜻한 도움에 감사드립니다.

좋은 웹페이지 즐겨찾기