ThinkPHP 프레임 워 크 통합 위 챗 결제 의 Native 스 캔 결제 모델
10841 단어 ThinkPHP위 챗 페 이 먼 트스 캔 페 이 먼 트
안녕하세요,이 글 은 위 챗 결제 의 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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ThinkPHP5 일반 데이터 작업1. 데이터베이스는:thinkphp5, 새 데이터 테이블think_test 2.\application\database.php에서 수정 3.\application\index\model 다음에 새 모델 파일 테스트.ph...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.