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{ 
 //   
} 
환불 성공 반환 은 다음 과 같 습 니 다.

친 측 오류 없 음:이것 은 공식 SDK 를 통합 하여 이 루어 진 것 입 니 다.SDK 를 사용 하지 않 으 면 더욱 간단 한 방법 을 사용 할 수 있 습 니 다.PHP 는 위 챗 결제(jsapi 결제)와 환불(통합 결제 SDK 필요 없 음)을 실현 합 니 다.

총결산
위 에서 말씀 드 린 것 은 소 편 이 소개 한 PHP 구현 위 챗 환불 신청 절차 인 스 턴 스 코드 입 니 다.여러분 께 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 이 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기