ThinkPHP 프레임 워 크 통합 위 챗 결제 의 Native 스 캔 결제 모델

이 사례 는 ThinkPHP 프레임 워 크 통합 위 챗 결제 의 네 이 티 브 스 캔 결제 모델 2 를 다 루 고 있다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
안녕하세요,이 글 은 위 챗 결제 의 Native 스 캔 결제 모델 1 에 이 어 위 챗 결제 시리즈 의 세 번 째 편 입 니 다.스 캔 결제 모델 2.
소개 하 겠 습 니 다.스 캔 결 제 는 현재 두 가지 모델 이 있 습 니 다.모델 1 대 모델 2 는 약간 복잡 합 니 다.모델 1 과 모델 2 의 구체 적 인 내용,절차,위 챗 개발 문서 에 대해 상세 하 게 소개 되 었 습 니 다.여 기 는 쓸데없는 말 을 하지 않 고 다음 에 빨리 튜 토리 얼 에 들 어 갑 니 다!
우선 우 리 는 마찬가지 로 위 챗 결제 의 라 이브 러 리 를 가 져 옵 니 다.
 
다음은 Public 에서 파일:

이상 은 Native 스 캔 모드 와 같 습 니 다.모 르 겠 습 니 다.보 세 요//www.jb51.net/article/159356.htm
jsAPI 결제 보 세 요://www.jb51.net/article/159351.htm
다음은 컨트롤 러 부분의 코드 를 직접 보 겠 습 니 다.
step 1:마찬가지 로 WxPayPubHelper 라 이브 러 리 도입 초기 화

/**
     *    
     */
    public function _initialize()
    {
        //  WxPayPubHelper
        vendor('WxPayPubHelper.WxPayPubHelper');
    }
step 2:여 기 는 스 캔 결제 모델 과 차이 가 있 습 니 다.주문 에 따라 QR 코드 를 생산 하고 통일 결제 인 터 페 이 스 를 사용 합 니 다.코드 를 보 세 요.

public function createQrcode()
    {
        //        
        $unifiedOrder = new \UnifiedOrder_pub();
        
        //          
        //      
        //appid  ,        
        //mch_id  ,        
        //noncestr  ,        
        //spbill_create_ip  ,        
        //sign  ,        
        $unifiedOrder->setParameter("body","     ");//    
        //      ,      
        $timeStamp = time();
        $out_trade_no = C('WxPayConf_pub.APPID')."$timeStamp";
        $unifiedOrder->setParameter("out_trade_no","$out_trade_no");//      
        $unifiedOrder->setParameter("total_fee","1");//   
        $unifiedOrder->setParameter("notify_url", C('WxPayConf_pub.NOTIFY_URL'));//     
        $unifiedOrder->setParameter("trade_type","NATIVE");//    
        //     ,           
        //$unifiedOrder->setParameter("sub_mch_id","XXXX");//      
        //$unifiedOrder->setParameter("device_info","XXXX");//    
        //$unifiedOrder->setParameter("attach","XXXX");//     
        //$unifiedOrder->setParameter("time_start","XXXX");//      
        //$unifiedOrder->setParameter("time_expire","XXXX");//       
        //$unifiedOrder->setParameter("goods_tag","XXXX");//     
        //$unifiedOrder->setParameter("openid","XXXX");//    
        //$unifiedOrder->setParameter("product_id","XXXX");//  ID
        
        //          
        $unifiedOrderResult = $unifiedOrder->getResult();
        
        //                 
        if ($unifiedOrderResult["return_code"] == "FAIL") 
        {
            //          
            echo "    :".$unifiedOrderResult['return_msg']."<br>";
        }
        elseif($unifiedOrderResult["result_code"] == "FAIL")
        {
            //          
            echo "    :".$unifiedOrderResult['err_code']."<br>";
            echo "      :".$unifiedOrderResult['err_code_des']."<br>";
        }
        elseif($unifiedOrderResult["code_url"] != NULL)
        {
            //          code_url
            $code_url = $unifiedOrderResult["code_url"];
            //          
            //......
        }
        $this->assign('out_trade_no',$out_trade_no);
        $this->assign('code_url',$code_url);
        $this->assign('unifiedOrderResult',$unifiedOrderResult);
        
        $this->display('qrcode');
    }
qrcode.html 페이지 에 대응:

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="UTF-8">
    <title>      </title>
</head>
<body>
    <div align="center" id="qrcode">
    </div>
    <div align="center">
        <p>   :<?php echo $out_trade_no; ?></p>
    </div>
    <div align="center">
        <form  action="./order_query.php" method="post">
            <input name="out_trade_no" type='hidden' value="<?php echo $out_trade_no; ?>">
            <button type="submit" >      </button>
        </form>
    </div>
    <br>
    <div align="center">
        <form  action="./refund.php" method="post">
            <input name="out_trade_no" type='hidden' value="<?php echo $out_trade_no; ?>">
            <input name="refund_fee" type='hidden' value="1">
            <button type="submit" >    </button>
        </form>
    </div>
    <br>
    <div align="center">
        <a href="../index.php" rel="external nofollow" >    </a>
    </div>
</body>
    <script src="__PUBLIC__/js/qrcode.js"></script>
    <script>
        if(<?php echo $unifiedOrderResult["code_url"] != NULL; ?>)
        {
            var url = "<?php echo $code_url;?>";
            //  1      ,    1-10;  2    ,    'L','M','Q','H'
            var qr = qrcode(10, 'M');
            qr.addData(url);
            qr.make();
            var wording=document.createElement('p');
            wording.innerHTML = "  ,  ";
            var code=document.createElement('DIV');
            code.innerHTML = qr.createImgTag();
            var element=document.getElementById("qrcode");
            element.appendChild(wording);
            element.appendChild(code);
        }
    </script>
</html>
모델 2 는 공공 플랫폼 을 설정 할 필요 가 없 기 때문에 간단 하 다.
step 3:비동기 알림,여 기 는 모두 같 습 니 다.

public function notify()
    {
        //        
        $notify = new \Notify_pub();
         
        //       
        $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
        $notify->saveData($xml);
         
        //    ,     。
        //        ,                  ,        ,
        //          ( 30   8 )        ,
        //           ,             。
        if($notify->checkSign() == FALSE){
            $notify->setReturnParameter("return_code","FAIL");//     
            $notify->setReturnParameter("return_msg","    ");//    
        }else{
            $notify->setReturnParameter("return_code","SUCCESS");//     
        }
        $returnXml = $notify->returnXml();
        echo $returnXml;
         
        //==                 ,      =======
         
        // log          
        //         $log_ = new Log_();
        $log_name= __ROOT__."/Public/notify_url.log";//log    
         
        $this->log_result($log_name,"【    notify  】:
".$xml."
");                   if($notify->checkSign() == TRUE)         {             if ($notify->data["return_code"] == "FAIL") {                 // ,                 log_result($log_name,"【 】:
".$xml."
");             }             elseif($notify->data["result_code"] == "FAIL"){                 // ,                 log_result($log_name,"【 】:
".$xml."
");             }             else{                 // ,                 log_result($log_name,"【 】:
".$xml."
");             }                           // ,             // :             // :             // :         }     }
이렇게 모드 2 의 스 캔 결 제 는 OK 입 니 다.상대 적 으로 간단 하지 않 습 니까?
다음은 테스트 캡 처:
스 캔 캡 처:

 스 캔 결과:
 
질문 이 있 으 면 메 시 지 를 남 겨 주세요.다음은 위 챗 결제 결제 결제 의 상세 한 튜 토리 얼 도 소개 해 드 리 겠 습 니 다.
위 챗 결제 강좌 jsapi 편:
//www.jb51.net/article/159351.htm
위 챗 결제 튜 토리 얼 스 캔 모드 1:
//www.jb51.net/article/159356.htm
위 챗 결제 튜 토리 얼 카드 결제:
//www.jb51.net/article/159401.htm
thinkpHP 와 관련 된 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.,,,,,ThinkpHP 입문 강좌,thinkpHP 템 플 릿 조작 기법 요약,ThinkPHP 상용 방법 총화,codeigniter 입문 강좌,CI(CodeIgniter)프레임 워 크 진급 강좌Zend FrameWork 프레임 워 크 입문 강좌.
본 고 는 ThinkPHP 프레임 워 크 를 기반 으로 한 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기