ThinkpHP 프레임 워 크 가 실 현 된 위 챗 결제 인터페이스 개발 의 전체 예시

이 사례 는 ThinkPHP 프레임 워 크 가 구현 한 위 챗 결제 인터페이스 개발 을 다 루 고 있다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
위 챗 결제 인터페이스 개발 은 간단 합 니 다.우 리 는 공식 적 으로 권한 을 신청 한 다음 에 공식 적 인 글 을 참고 하면 결제 개발 을 실현 할 수 있 습 니 다.다음은 간단 한 예 를 들 어 구체 적 으로 다음 과 같 습 니 다.
최근 에 한 마이크로 상점 에서 위 챗 결제 인 터 페 이 스 를 만 들 었 는데 지금 정리 해서 보 내 주세요.
우선 위 챗 결제 인터페이스 가 개 통 된 공식 번호 가 필요 합 니 다.이 는 모두 가 알 고 있 을 것 입 니 다.개통 후에 위 챗 은 메 일 로 메 일 을 보 낼 것 입 니 다.메 일의 내용 은 필요 한 인터페이스 정 보 를 개발 하 는 것 입 니 다(계 정 비밀번호 같은 것 포함).
개발 절차
1.공공 번호 플랫폼 에 들 어가 면 도 메 인 이름 바 인 딩,리 셋 주소 설정 등 몇 가지 인 자 를 설정 합 니 다.
1.설정 중->공중 번호 설정->기능 설정->JS 인터페이스 보안 도 메 인 설정
 
2.위 챗 결제->개발 설정->js 결제 인터페이스,리 셋 주소 등 을 설정 합 니 다.정식 디 렉 터 리 와 테스트 디 렉 터 리 를 모두 쓸 수 있 습 니 다.테스트 디 렉 터 리 는 개인 마이크로 신 호 를 화이트 리스트 에 먼저 추가 해 야 사용 할 수 있 습 니 다.(알림:TP 프레임 워 크 의 어린 파트너 들 이 결제 권한 디 렉 터 리 를 작성 할 때 이렇게 작성 할 수 있 습 니 다.도 메 인 이름/index.php/컨트롤 러/테스트 를 통 해 통과 할 수 있 습 니 다.위 챗 에서 도 확인 할 수 있 습 니 다.예전 에 인터넷 에서 이러 면 안 된다 는 말 을 들 었 는데 지금 업 그 레이 드 된 것 같 습 니 다.하하,그리고 하 나 는 도 메 인 이름 이 반드시 준비 되 어 있어 야 합 니 다.만약 에 현지에서 테스트 를 하 는 친구 들 이 땅콩 껍질 을 사용 할 수 있다 면 저 는 광 고 를 하 는 것 이 아니 라 개인 적 으로 좋 을 것 같 습 니 다)
 
3.개발 자 센터 에서“웹 페이지 권한 부여 사용자 기본 정보&rdquo 획득;도 메 인 이름 에 자신의 도 메 인 이름 을 쓰 고 위 챗 로그 인 에 필요 한 것;
 
2.위 에 가서 큰 걸음 으로 설치 한 후에 우리 의 개발 작업 을 시작 할 수 있 습 니 다.
1.TP 를 사용 하 는 친구 들 은 아래 의 가방 으로 tp 의 확장 에 넣 을 수도 있 고 홈 페이지 에서 sdk 가방 을 다운로드 할 수도 있 습 니 다.구체 적 인 디 렉 터 리:ThinkpHP\Library\Vendor\,다른 것 은 상관 하지 않 아 도 됩 니 다.
2.가방 에 있 는 WxPayPubConfig.php 파일 을 열 고 위 챗 결제 의 인터페이스 정 보 를 작성 하면 됩 니 다.
3.위의 두 번 째 단 계 는 모두 설정 입 니 다.이 단 계 는 결제 류 를 쓰 는 것 입 니 다.사실은 아무것도 아 닙 니 다.복사 해서 붙 여 넣 으 면 됩 니 다.
1.Wxpay 컨트롤 러 를 새로 만 듭 니 다.물론 이름 을 지 을 수도 있 습 니 다.방문 하 는 이름 은 위 챗 에 설 정 된 인증 디 렉 터 리 와 같 으 면 됩 니 다.클릭 하여 Wxpay 다운로드
2.코드 의 부분 은 더 이상 말 하지 않 고 아래 에 코드 를 직접 올 립 니 다.

<?php
namespace Home\Controller;
use Think\Controller;
//     
class WxpayController extends Controller {
  //  access_token      uri,     code  jsapi    
  public function js_api_call() {
    $order_sn = I('get.order_sn', '');
    if (empty($order_sn)) {
      header('location:'.__ROOT__.'/');
    }
    vendor('Weixinpay.WxPayPubHelper');
    //  jsapi  
    $jsApi = new \JsApi_pub();
    //=========  1:        openid============
    //  code  openid
    if (!isset($_GET['code'])){
      //      code 
      $url = $jsApi->createOauthUrlForCode('  /Wxpay/js_api_call?order_sn='.$order_sn);
      //$url = $jsApi->createOauthUrlForCode(\WxPayConf_pub::JS_API_CALL_URL);
      Header("Location: $url");
    }else{
      //  code ,   openid
      $code = $_GET['code'];
      $jsApi->setCode($code);
      $openid = $jsApi->getOpenId();
    }
    $res = array(
      'order_sn' => '20150109113322',
      'order_amount' => 255
    );
    //=========  2:        ,  prepay_id============
    //        
    $unifiedOrder = new \UnifiedOrder_pub();
    //          
    //      
    //appid  ,        
    //mch_id  ,        
    //noncestr  ,        
    //spbill_create_ip  ,        
    //sign  ,        
    $total_fee = $res['order_amount']*100;
    //$total_fee = 1;
    $body = "    {$res['order_sn']}";
    $unifiedOrder->setParameter("openid", "$openid");//    
    $unifiedOrder->setParameter("body", $body);//    
    //      ,      
    $out_trade_no = $res['order_sn'];
    $unifiedOrder->setParameter("out_trade_no", $out_trade_no);//     
    $unifiedOrder->setParameter("total_fee", $total_fee);//   
    //$unifiedOrder->setParameter("attach", "order_sn={$res['order_sn']}");//    
    $unifiedOrder->setParameter("notify_url", \WxPayConf_pub::NOTIFY_URL);//    
    $unifiedOrder->setParameter("trade_type", "JSAPI");//    
    //     ,           
    //$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
    $prepay_id = $unifiedOrder->getPrepayId();
    //=========  3:  jsapi    ============
    $jsApi->setPrepayId($prepay_id);
    $jsApiParameters = $jsApi->getParameters();
    $wxconf = json_decode($jsApiParameters, true);
    if ($wxconf['package'] == 'prepay_id=') {
      $this->error('        ,      ');
    }
    $this->assign('res', $res);
    $this->assign('jsApiParameters', $jsApiParameters);
    $this->display('jsapi');
  }
  //    url,            
  public function notify_url() {
    vendor('Weixinpay.WxPayPubHelper');
    //        
    $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();
    //==                 ,      =======
    // log          
    //$log_name = "notify_url.log";//log    
    //$this->log_result($log_name, "【    notify  】:
".$xml."
"); $parameter = $notify->xmlToArray($xml); //$this->log_result($log_name, "【 notify 】:
".$parameter."
"); if($notify->checkSign() == TRUE){ if ($notify->data["return_code"] == "FAIL") { // , //$this->log_result($log_name, "【 】:
".$xml."
"); // 【 】 echo 'error'; } else if($notify->data["result_code"] == "FAIL"){ // , //$this->log_result($log_name, "【 】:
".$xml."
"); // 【 】 echo 'error'; } else{ //$this->log_result($log_name, "【 】:
".$xml."
"); // process , , if ($this->process($parameter)) { // success, echo 'success'; }else { // , echo 'error'; } } } } // private function process($parameter) { // , /* * * $parameter = array( 'out_trade_no' => xxx,// 'total_fee' => XXXX,// 'openid' => XXxxx,// ID ); */ return true; } } ?>
4.이상 은 위 챗 결제 의 전체 절차 입 니 다.스 캔 결제 의 차이 가 많 지 않 을 것 입 니 다.저 는 하지 않 았 습 니 다.사용 한 친구 도 공유 할 수 있 습 니 다.^ ^;결제 캡 처 몇 장 주세요.
 
더 많은 PHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기