PHP 위 챗 환불 신청 기능 구현

본 논문 의 사례 는 PHP 가 위 챗 에서 환불 을 신청 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
위 챗 공식 번호 개발 문서링크 주소
앞에서 위 챗 결 제 를 어떻게 실현 하 는 지 에 대해 말씀 드 렸 습 니 다.상세 한 내용 은 블 로그:PHP 는 위 챗 결제(jsapi 결제)절 차 를 실현 합 니 다.  ThinkpHP 에서 위 챗 결제(jsapi 결제)절 차 를 실현 합 니 다.업무 수요 로 인해 위 챗 환불 도 필요 하고 연구 와 모색 을 통 해 드디어 해결 되 었 습 니 다.
초기 준비:<
당연히 위 챗 결 제 를 해 결 했 습 니 다.그렇지 않 으 면 어떻게 환불 하 는 지,이번 에는 공식 demo 를 사용 하 겠 습 니 다.물론 인터넷 에 도 많은 신 들 이 스스로 demo 를 다시 쓰 고 포장 했다.아마 더욱 간결 하 게 사용 하기 좋 을 것 이다.그러나 나 는 사용 하 는 것 을 제창 하지 않 는 다.그 이 유 는 다음 과 같다.
(1)기능 이 불완전 할 수 있 습 니 다.그 는 위 챗 결제 만 실 현 했 을 수도 있 습 니 다.그러나 환불 신청,환불 조회,주문 조회,주문 취소 등 업무 기능 도 추 후 필요 할 수 있 습 니 다.만약 에 대 신의 SDK 에 의존 하 는 편리 함 이 있 으 면 새로운 업무 수요 가 있 으 면 어 리 석 습 니 다.
(2)안전 을 고려 할 때 지불 과 관련 된 돈 은 반드시 안전 해 야 한다.공식 SDK 는 나 도 토 설 했 지만 적어도 상대 적 으로 안전 할 것 이 고 다시 쓰 는 것 은 당분간 문 제 를 눈치 채 지 못 했 지만 혹시 라 도 허점 이 있 으 면 좋 지 않 을 것 이다.
이 편 은 공식 적 으로 제공 하 는 SDK 에서 가장 중요 한 파일 인 WxPay.api.PHP 에서 제공 하 는 refund()방법 으로 이 루어 집 니 다.이 방법 은 WxPay.api.php 파일 의 141 줄 에 있 습 니 다.코드 는 다음 과 같 습 니 다.

 /** 
   * 
   *     ,WxPayRefund out_trade_no、transaction_id       
   * out_refund_no、total_fee、refund_fee、op_user_id      
   * appid、mchid、spbill_create_ip、nonce_str      
   * @param WxPayRefund $inputObj 
   * @param int $timeOut 
   * @throws WxPayException 
   * @return      ,      
   */ 
  public static function refund($inputObj, $timeOut = 6){ 
    $url = "https://api.mch.weixin.qq.com/secapi/pay/refund"; 
    //       
    if(!$inputObj->IsOut_trade_noSet() && !$inputObj->IsTransaction_idSet()) { 
      throw new WxPayException("       ,out_trade_no、transaction_id     !"); 
    }else if(!$inputObj->IsOut_refund_noSet()){ 
      throw new WxPayException("       ,      out_refund_no!"); 
    }else if(!$inputObj->IsTotal_feeSet()){ 
      throw new WxPayException("       ,      total_fee!"); 
    }else if(!$inputObj->IsRefund_feeSet()){ 
      throw new WxPayException("       ,      refund_fee!"); 
    }else if(!$inputObj->IsOp_user_idSet()){ 
      throw new WxPayException("       ,      op_user_id!"); 
    } 
    $inputObj->SetAppid(WxPayConfig::APPID);//    ID 
    $inputObj->SetMch_id(WxPayConfig::MCHID);//    
    $inputObj->SetNonce_str(self::getNonceStr());//      

    $inputObj->SetSign();//   
    $xml = $inputObj->ToXml(); 
    $startTimeStamp = self::getMillisecond();//       
    $response = self::postXmlCurl($xml, $url, true, $timeOut); 
    $result = WxPayResults::Init($response); 
    self::reportCostTime($url, $startTimeStamp, $result);//         

    return $result; 
  } 

공식 적 인 방법 은 어떤 매개 변수 가 필요 한 지 잘 쓰 여 있 고 필요 한 매개 변수 인 SDK 가 우리 에 게 보완 해 주 었 습 니 다.저 는 이 방법 을 다시 포장 해서 프로젝트 에서 호출 할 수 있 습 니 다.

 /** 
   *      
   * @param string  $order_id    ID 
   * @return      (array  ),      
   */ 
  function wxRefund($order_id){ 
    //  SDK         Api    
    require_once APP_ROOT."/Api/wxpay/lib/WxPay.Api.php"; 
    //    ,              
    $order = M('order')->where(array('id'=>$order_id,'is_refund'=>2,'order_status'=>1))->find(); 
    $merchid = WxPayConfig::MCHID; 

    if(!$order) return false; 

    $input = new WxPayRefund(); 
    $input->SetOut_trade_no($order['order_sn']);     //       
    $input->SetTransaction_id($order['transaction_id']);   //            ,          
    $input->SetOut_refund_no(getrand_num(true));     //     
    $input->SetTotal_fee($order['total_price']);     //      ,     
    $input->SetRefund_fee($order['total_price']);      //     ,     ,    ,      
    $input->SetOp_user_id($merchid); 

    $result = WxPayApi::refund($input); //     

    //   file_put_contents                         
    //file_put_contents(APP_ROOT.'/Api/wxpay/logs/log3.txt',arrayToXml($result),FILE_APPEND); 
    return $result; 
  } 

여기 서 말 을 해 야 합 니 다.반환 값 의 유형 은 말 하지 않 고 지불 할 때 XML 데 이 터 를 되 돌려 주 었 습 니 다.여기 서 배열 을 되 돌려 주 었 습 니 다.당 황 스 럽 습 니 다.하하 하지만 배열 로 돌아 가 는 것 이 좋 습 니 다.직접 판단 하여 처리 할 수 있 습 니 다.
방법 호출 은 더욱 간단 하 다.

 //     
  $result = wxRefund($order_id); 
  //   file_put_contents                         
  //file_put_contents(APP_ROOT.'/Api/wxpay/logs/log4.txt',arrayToXml($result),FILE_APPEND); 
  if(($result['return_code']=='SUCCESS') && ($result['result_code']=='SUCCESS')){ 
    //     
  }else if(($result['return_code']=='FAIL') || ($result['result_code']=='FAIL')){ 
    //     
    //   
    $reason = (empty($result['err_code_des'])?$result['return_msg']:$result['err_code_des']); 
  }else{ 
    //   
  } 

환불 성공 반환 은 다음 과 같 습 니 다.

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기