ThinkPHP 프레임 워 크 통합 위 챗 결제 의 JSPI 모드 그림 설명
11313 단어 ThinkPHP위 챗 페 이 먼 트
현재 위 챗 은 매우 핫 하 다.위 챗 결 제 는 현재 인터넷 에서 일련의 상세 한 demo 를 볼 수 없 기 때문에 위 챗 결제 시리즈 에 관 한 강 좌 를 하 는 데 시간 이 좀 걸린다.
이번 튜 토리 얼 은 JSPI 모드 결제 이 며,나머지 는 계속 쓰 겠 습 니 다.
우선,위 챗 결 제 를 다운로드 한 demo 는 위 챗 의 demo 에 따라 TP 에 통합 합 니 다.
우리 가 여기에 필요 로 하 는 몇 가지 파일 을 소개 합 니 다.
demo 폴 더 에서:
js_api_call.php:위 챗 jsapi 의 주요 기능 을 제공 합 니 다.
log_.php:인쇄 로그 기능 제공
notify_url.php:비동기 알림 기능
notify_url.log:비동기 알림 로그
qrcode.js:QR 코드 js 플러그 인 생 성
다음은 WxPayPubHelper 폴 더 의 파일 을 소개 합 니 다.
cacert 폴 더 는 위 챗 인증 서 를 저장 합 니 다(PS:구체 적 으로 저 는 인증 서 를 별로 사용 하지 않 았 습 니 다.다운로드 되 었 지만 인증 서 는 위 챗 상점 플랫폼 에서 다운로드 하 십시오)
SDKRuntimeException.php:이것 이 이상 처리 입 니 다.
WxPay.pub.config.php:이것 은 설정 을 한 것 입 니 다.잠시 후에 자세히 설명 하 겠 습 니 다.
WxPayPub Helper.php:이것 은 사실 위 챗 결제 도구 류 입 니 다.초보 자 에 게 는 그 안에 있 는 방법 만 알 면 됩 니 다.
OK,위 챗 이 공식 적 으로 제공 한 서 류 를 알 게 되면 우 리 는 TP 에 통합 할 수 있 습 니 다.쓸데없는 말 을 하지 않 고 시작 합 니 다!
step 1:demo 의 WxPayPubHelper 폴 더 전 체 를 TP 의 Vendor 디 렉 터 리 에 복사 합 니 다.저 처럼:
step 2:WxPay.pub.config.php 파일 설정:
여기 설정 에 주석 이 있 습 니 다.모 르 거나 설정 에 문제 가 있 으 면 질문 을 남 길 수 있 습 니 다.
동시에 저 는 위 챗 의 이 설정 을 TP config 에 넣 었 습 니 다.이 단 계 는 여러분 이 마음대로 하 셔 도 됩 니 다.
<?php
return array(
//' '=>' '
define('WEB_HOST', ' '),
/* */
'WxPayConf_pub'=>array(
'APPID' => ' APPID',
'MCHID' => ' ID',
'KEY' => ' ',
'APPSECRET' => ' APPSECRET',
'JS_API_CALL_URL' => WEB_HOST.'/index.php/Home/WxJsAPI/jsApiCall',
'SSLCERT_PATH' => WEB_HOST.'/ThinkPHP/Library/Vendor/WxPayPubHelper/cacert/apiclient_cert.pem',
'SSLKEY_PATH' => WEB_HOST.'/ThinkPHP/Library/Vendor/WxPayPubHelper/cacert/apiclient_key.pem',
'NOTIFY_URL' => WEB_HOST.'/index.php/Home/WxJsAPI/notify',
'CURL_TIMEOUT' => 30
)
);
step 3:QR 코드 를 생 성 하 는 js 를 Public 디 렉 터 리 에 놓 습 니 다.step 4:컨트롤 러 만 들 기:여기 WxJSAPIController 컨트롤 러 를 만 들 었 습 니 다.여기 서 여러분 이 마음대로 이름 을 짓 고 이것 이 공공 플랫폼 에서 의 설정 과 대응 하면 됩 니 다.(공공 플랫폼 설정 은 잠시 후에 소개 합 니 다)
다음은 컨트롤 러 의 코드 부분 입 니 다.먼저 컨트롤 러 를 초기 화하 고 WxPayPubHelper 를 가 져 옵 니 다.
/**
*
*/
public function _initialize()
{
// WxPayPubHelper
vendor('WxPayPubHelper.WxPayPubHelper');
}
다음은 통일 결제 인 터 페 이 스 를 사용 하여 prepay 획득id 방법:
public function jsApiCall()
{
// jsapi
$jsApi = new \JsApi_pub();
//========= 1: openid============
// code openid
if (!isset($_GET['code']))
{
// code
$url = $jsApi->createOauthUrlForCode(C('WxPayConf_pub.JS_API_CALL_URL'));
Header("Location: $url");
}else
{
// code , openid
$code = $_GET['code'];
$jsApi->setCode($code);
$openid = $jsApi->getOpenId();
}
//========= 2: , prepay_id============
//
$unifiedOrder = new \UnifiedOrder_pub();
//
//
//appid ,
//mch_id ,
//noncestr ,
//spbill_create_ip ,
//sign ,
$unifiedOrder->setParameter("openid",$openid);//
$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","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();
$this->assign('jsApiParameters',$jsApiParameters);
$this->display('pay');
//echo $jsApiParameters;
}
여 기 는 모두 위 챗 demo 를 복사 하여 이름 을 바 꾸 었 을 뿐 다른 것 은 없습니다.다음은 비동기 알림 방법 이자 복 제 된 위 챗 데모 에 있 는 것 입 니 다.
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
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."
");
}
// ,
// :
// :
// :
}
}
여기 서 나 는 기록 로그 의 종 류 를 function.php 에 썼 다.
function log_result($file,$word)
{
$fp = fopen($file,"a");
flock($fp, LOCK_EX) ;
fwrite($fp," :".strftime("%Y-%m-%d-%H:%M:%S",time())."
".$word."
");
flock($fp, LOCK_UN);
fclose($fp);
}
자,사실 컨트롤 러 의 방법 이 이렇게 많 습 니 다.다른 것 은 없습니다.아래 페이지 를 보고 바로 코드 를 올 리 세 요.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title> </title>
<script type="text/javascript">
// JS api
function jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
<?php echo $jsApiParameters; ?>,
function(res){
WeixinJSBridge.log(res.err_msg);
alert(res.err_code+res.err_desc+res.err_msg);
//alert("{$jsApiParameters}");
}
);
}
function callpay()
{
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
}else{
jsApiCall();
}
}
</script>
</head>
<body>
</br></br></br></br>
<div align="center">
<button style="width:210px; height:30px; background-color:#FE6714; border:0px #FE6714 solid; cursor: pointer; color:white; font-size:16px;" type="button" onclick="callpay()" > </button>
</div>
</body>
</html>
아무것도 바 꿀 필요 가 없 이 바로 복사 하면 된다.다음은 위 챗 공식 플랫폼 의 설정 입 니 다.여기 서 제 가 문제 가 생 긴 적 이 있 습 니 다.여기 서 문제 가 생 긴 친구 가 있 으 면 메 시 지 를 남 겨 주세요.예 를 들 어 accessdeined 또는 accessnotallowed 등의 문 제 는 설정 이 잘못 되 었 기 때 문 일 수 있 습 니 다.
설정 프로 세 스 캡 처 보기:
변경 을 누 르 면 설정 에 들 어 갑 니 다:
자,테스트 할 수 있 습 니 다.다음은 제 테스트 캡 처 입 니 다.
위 챗 으로 QR 코드 를 스캐닝 하 다
위 챗 에서 공헌 을 클릭 하여 결제 페이지 출현:
지금까지 위 챗 JSPI 결제 기능 이 모두 완료 되 었 습 니 다.
물론 당신 이 처음 한다 면 여러 가지 문제 에 부 딪 힐 것 입 니 다.
만약 당신 이 신출내기 라면,겪 은 문제 들 이 왜 그런 지 모 르 겠 지만,
제때에 네가 한 다음 에 해라.나 는 세부 적 인 부주의 로 인해 문제 가 생 길 수 있다 고 믿는다.
그러나 조급해 하지 말고 인내심 을 가지 고 문 제 를 발견 해라.
질문 이 있 으 면 메 시 지 를 남 겨 주세요.다음은 위 챗 스 캔 결제 모델 1,모델 2 의 상세 한 튜 토리 얼 도 소개 합 니 다.
위 챗 결제 튜 토리 얼 스 캔 모드 1:
//www.jb51.net/article/159356.htm
위 챗 결제 튜 토리 얼 스 캔 모드 2:
//www.jb51.net/article/159362.htm
위 챗 결제 튜 토리 얼 카드 결제:
//www.jb51.net/article/159401.htm
thinkpHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 고 는 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에 따라 라이센스가 부여됩니다.