ThinkPHP 프레임 워 크 에서 알 리 페 이 결제 기능 도문 튜 토리 얼 통합

이 사례 는 ThinkPHP 프레임 워 크 에서 알 리 페 이 결제 기능 을 통합 하 는 것 을 보 여 준다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
배경
  • 최근 프로젝트 는 알 리 페 이 결제 기능 에 접속 해 야 한다.그 중에서 ThinkpHP 3.2.3 프레임 워 크 를 개발 했다.참고개발 플랫폼 문서를 통 해 알 수 있 듯 이 사이트 개발 은 두 가지 장면 이 있 는데 하 나 는 핸드폰 사이트 결제 이 고 알 리 페 이 앱 을 직접 깨 워 결제 작업 에 들 어 가 는 것 이다.다른 하 나 는 주로 PC 측 에서 결제 QR 코드 를 표시 한 다음 에 핸드폰 의 알 리 페 이 앱 으로 스 캔 하 는 것 이다.
  • 이곳 은 주로 핸드폰 사이트 결제 의 실현 을 소개 하고 후기 에 스 캔 결 제 를 보충 합 니 다.
  • 접속 설정
    1)접속 절차
    "빠 른 접속"중의 절차 에 따라 이들 은 대동소이 하 게 모두 진행 된다.
  • 첫 번 째 단계:앱 을 만 들 고 APPID 가 져 오기
  • 두 번 째 단계:키 설정
  • 세 번 째 단계:개발 환경 구축 과 배치
  • 네 번 째 단계:인터페이스 호출
  • 2).캡 처 설정
    应用配置截图
    3).제시 설명
    비록 공식 문 서 는 이미 매우 상세 하고 성숙 하 게 만 들 었 지만,불필요 한 갈등 을 피하 기 위해 몇 가지 중점 을 두 고 일 깨 워 주어 야 한다.
  • 응용 프로그램 생 성 성공 후 1~3 일 정도 의 심사 가 필요 합 니 다
  • 키 를 설정 할 때 제공 하 는 암호 화 도 구 를 다운로드 하 는 것 을 권장 합 니 다.참고RSA 키 생 성 방법
  • 여기 서 제 가 다운로드 한 것 은개발 플랫폼 서버 SDK의 PHP 버 전 자원 입 니 다.DEMO 파일 이 아니 라 둘 이 다 를 것 이 라 고 믿 습 니 다.
  • 2.모 바 일 사이트 결제 인터페이스 실현
    1).테스트 입구 페이지
    아래 그림 에서 보 듯 이 저 는 여기 서 간단 한 입구 파일 을 만 들 었 습 니 다.개발 문서 의 소개 에 따라 인 코딩 형식 을 통일 해 야 합 니 다.여기 서 제 가 선택 한 것 은 UTF-8 입 니 다.
    代码参考-header处理
    2).html 코드 참조
    주의해 야 할 것 은 인터페이스 가 POST 방식 으로 제출 요청 을 해 야 한 다 는 것 을 가리킨다
    入口界面参考截图
    3).알 리 페 이 설정 정보
    알 리 페 이의 설정 정보 에 대해 저 는 application/Common/conf/config.php 에 썼 습 니 다.
    
    //        
      'ALI_CONFIG' => array(
        'gatewayUrl'      => 'https://openapi.alipay.com/gateway.do',//     (  )'
        'appId'         => '2017xxxxxxxx9',//APPID        
        //        :                ,     
        'rsaPrivateKey'     => 'MIIExxxxxxxxxxxxxxxxxxxxxxxxxxxq',
        //     ,      :         ,     
        'alipayrsaPublicKey'  => 'IIBxxxxxxxxxxxxxxxxxxxEFAA',
        'notifyUrl'       => 'http://www.xxx.com/m/cartpay/notify_ali', //         
        'returnUrl'       => 'http://www.xxx.com', //        
        'returnPcUrl'      => 'http://www.xxx.com/Home', // PC          
      ),
    4).서버 SDK 가 져 오기
    앞에서 다운로드 한 SDK 를 사용자 정의 위치 에 넣 습 니 다.여기 서 저 는 다음 과 같은 경로 에 습관 이 되 어 있 습 니 다.\ThinkpHP\Library\Vendor\Alipay 는 특히 각 파일 류 의 인용 은 코드 프레임 워 크 에 따라 다 르 므 로 스스로 확인 해 야 합 니 다.
    5).결제 인터페이스 구현
    알 리 페 이 결 제 를 깨 워 달라 고 요청 하 는 경로 에서 인터페이스 코드 편집
    代码参考-手机端支付接口
    제시 하 다.
  • 실험 을 통 해 컴퓨터 에서 이 기능 의 결제 테스트 를 하면 다음 과 같은 유사 한 오 류 를 보고 할 수 있다 는 것 을 발견 했다.개인 은 핸드폰 과 PC 의 내장 설정 이 다르다 고 생각한다
  • .
  • 핸드폰 사이트 결제 에 대해 핸드폰 에서 테스트 해 야 하고 가상 도 메 인 네 임 핸드폰 방문 을 자체 적 으로 설정 하면 되 며 이 문제 에 불필요 한 시간 을 쓰 지 마 세 요
  • 본인 이 컴퓨터 에 잘못 보 고 했 기 때문에 핸드폰 단말기 의 방문 은 완벽 하 게 이 루어 졌 습 니 다.그래서 서명 을 검증 하 는 과정 에서 마지막 까지 서명 을 잘못 한 것 이 아 닙 니 다.물론 당신 의 조작 과정 서명 은 문제 가 없 을 것 입 니 다.
  • 无效签名报错
    手机支付参考截图
    코드 구현 은 다음 과 같 습 니 다.
    
      /**
       *      post    
       */
      public function alipay(){
        if (IS_POST){
          Vendor('Alipay.aop.AopClient');
          Vendor('Alipay.aop.request.AlipayTradeWapPayRequest');
          //$out_trade_no = I('post.order_sn');
          /*
           * $out_trade_no                
           *     POST     ,                       
           * $order_amount                   
           *     :3.50,10.00
           * $aliConfig          
           */
          $out_trade_no = '2017M'.time();
          $body = '      ,      ';
          $subject = '  ';
          $order_amount = 9.00;
          $aliConfig = C('ALI_CONFIG');
          $aop = new \AopClient();
          $aop->gatewayUrl = $aliConfig['gatewayUrl'];
          $aop->appId = $aliConfig['appId'];
          $aop->rsaPrivateKey = $aliConfig['rsaPrivateKey'];
          $aop->alipayrsaPublicKey=$aliConfig['alipayrsaPublicKey'];
          $aop->apiVersion = '1.0';
          $aop->postCharset='UTF-8';
          $aop->format='json';
          $aop->signType='RSA2';
          $request = new \AlipayTradeWapPayRequest ();
          $bizContent = "{" .
            "  \"body\":\"$body.\"," .
            "  \"subject\":\"$subject\"," .
            "  \"out_trade_no\":\"$out_trade_no\"," .
            "  \"timeout_express\":\"90m\"," .
            "  \"total_amount\":$order_amount," .
            "  \"product_code\":\"QUICK_WAP_WAY\"" .
            " }";
          $request->setBizContent($bizContent);
          $request->setNotifyUrl($aliConfig['notifyUrl']);
          $request->setReturnUrl($aliConfig['returnUrl']);
          $result = $aop->pageExecute ( $request);
          echo $result;
        }else{
          echo 'sorry,      ';
        }
      }
    6).지급 완료 후 통지 처리
    이때 제출 한 post 데 이 터 를 가 져 와 주문 번호 의 박리 를 통 해 다음 단계 의 업무 논리 처 리 를 하면 됩 니 다.
    [주의]:
  • 인터페이스 문서 에 명시 되 어 있 고 결제 알림 기능 은 마지막 으로'success'
  • 를 출력 해 야 합 니 다.
  • 이 곳 의 알림 경 로 는 설정 에서 확 정 된'notifyUrl'과 완전히 일치 해 야 합 니 다
  • 
     /**
      *          
      */
      public function notify_ali(){
        $out_trade_no = I('post.out_trade_no');
        $this->toUpdatePayInfo($out_trade_no,'ali');
        echo 'success';
      }
    3.컴퓨터 사이트 결제 인터페이스 실현
    비교 해 보면 PC 엔 드 의 코드 디자인 은 핸드폰 엔 드 와 대동소이 하 므 로 여기 서사용 상황를 밝 히 면 참고 할 수 있 습 니 다.
    1).결제 인터페이스 구현
    电脑端支付接口代码截图
    알림:

  • 테스트 결과 인터페이스 에서'subject'를 정의 할 때 문자 의 수량 에 대한 요구 가 있 고 네 글 자 를 초과 할 수 없 으 며 알파벳 에 특별한 제한 이 없 는 것 같 습 니 다.개발 과정 에서 모든 상품 이름 을 표시 하려 고 했 으 나 실현 되 지 못 했 습 니 다.주의 하 시기 바 랍 니 다.

  • 제 공 된 코드 는 잠시 인터페이스 디자인 을 하지 않 았 습 니 다.핸드폰 엔 드 인터페이스 사상 을 참고 하여 주문 정 보 를 받 고 처리 한 후에 알 리 페 이 를 깨 울 수 있 습 니 다.현재 의 코드 는 공공 파일 설정 이 정확 한 상황 에서 직접 공공 네트워크 에서 인터페이스 링크 를 방문 하면 효 과 를 볼 수 있 습 니 다.

  • 지불 성공 후의 통지 처 리 는 휴대 전화 단말기 의 실현 방식 을 참고 하 시기 바 랍 니 다.
  • 2).구현 효과 캡 처
    电脑端唤醒支付宝接口
    手机扫码效果
    电脑端支付方式-登录
    3).코드 는 다음 과 같다.
    
     /**
       *                
       */
      public function aliPayPage(){
        $out_trade_no = '2017PC'.time();
        $order_amount = '12.88';
        $proName = "     XXXXXX";
        Vendor('Alipay.aop.AopClient');
        Vendor('Alipay.aop.request.AlipayTradePagePayRequest');
        //    
        $aop = new \AopClient();
        $aliConfig = C('ALI_CONFIG');
        $aop->gatewayUrl = $aliConfig['gatewayUrl'];
        $aop->appId = $aliConfig['appId'];
        $aop->rsaPrivateKey = $aliConfig['rsaPrivateKey'];
    
        $aop->apiVersion = '1.0';
        $aop->signType = 'RSA2';
        $aop->postCharset= 'utf-8';
        $aop->format='json';
        $request = new \AlipayTradePagePayRequest ();
        $request->setReturnUrl($aliConfig['returnPcUrl']);
        $request->setNotifyUrl($aliConfig['notifyUrl']);
        $request->setBizContent(
          "{" .
          "  \"product_code\":\"FAST_INSTANT_TRADE_PAY\"," .
          "  \"subject\":\"$proName\"," .
          "  \"out_trade_no\":\"$out_trade_no\"," .
          "  \"total_amount\":$order_amount," .
          "  \"body\":\"Iphone6 16G\"" .
          " }");
        //  
        $result = $aop->pageExecute ($request);
        //  
        echo $result;
      }
    부록:
    소스 코드 다운로드>>
    thinkpHP 와 관련 된 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.,,,,,ThinkpHP 입문 강좌,thinkpHP 템 플 릿 조작 기법 요약,ThinkPHP 상용 방법 총화,codeigniter 입문 강좌,CI(CodeIgniter)프레임 워 크 진급 강좌Zend FrameWork 프레임 워 크 입문 강좌.
    본 고 는 ThinkPHP 프레임 워 크 를 기반 으로 한 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

    좋은 웹페이지 즐겨찾기