PHP 구현 위 챗 결제(jsapi 결제)절차 상세 설명
초기 준비:
1.위 챗 인증 서비스 번호,위 챗 결제 개통
2.위 챗 결제 SDK,다운로드 주소:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
3.위 챗 결제 플랫폼 에 접속https://pay.weixin.qq.com/index.php/account/api_cert결제 증서 다운로드
방법 단계:
1.demo 파일 처리
(1)공식 demo 를 다운로드 합 니 다.파일 이름 은 WxpayAPI 입 니 다.php_v3,이 파일 을 wxpay 로 이름 을 바 꾸 면 뒤에 디 렉 터 리 를 쓰기 편 합 니 다.
(2)lib 폴 더 의 WxPay.api.php 파일 을 열 고 537 줄 에 curl 네트워크 요청 설정 코드 가 있 습 니 다.
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//
다음으로 바 꾸 기:
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//
cURL 인증 대등한 인증서(peer's certificate)를 금지 하기 위해 서 입 니 다.(3)lib 폴 더 에 있 는 WxPay.Config.php 파일 을 열 고 25 번 째 줄 부터 자신의 계 정 에 따라 기본 정보 설정 을 완성 합 니 다.
const APPID = ' APPID';
const MCHID = ' ';
const KEY = ' ';
const APPSECRET = ' secert';
(4)lib 폴 더 의 WxPay.Notify.php 파일 을 열 고 79 번 째 줄 의 코드:
if($needSign == true &&
$this->GetReturn_code($return_code) == "SUCCESS")
{
$this->SetSign();
}
다음으로 변경:
if($needSign == true &&
$this->GetReturn_code() == "SUCCESS")
{
$this->SetSign();
}
(5)cert 인증서 디 렉 터 리 를 열 고 안에 있 는 두 인증 서 를 자신의 결제 인증서 로 바 꿉 니 다.2.공중 번호 배경 설정
(1)웹 페이지 권한 수여 도 메 인 이름 을 설정 합 니 다.제 도 메 인 이름 은(xy.chuyin.ren)입 니 다.
(1)지불 권한 수여 디 렉 터 리 를 설정 합 니 다.도 메 인 이름 은(xy.chuyin.ren)입 니 다.이 도 메 인 이름 이 가리 키 는 디 렉 터 리 의 weixinopen/폴 더 에 demo 를 두 겠 습 니 다.demo 에서 jsapi.php 파일 은 example/디 렉 터 리 에 있 기 때문에 지불 권한 수여 디 렉 터 리 는 xy.chuyin.ren/weixinopen/wxpay/example/입 니 다.
3.지불 절차
example 디 렉 터 리 에 있 는 jsapi.phop 파일 을 열 고 시작 과 처 리 를 지불 하 는 것 은 모두 여기에서 이 루어 집 니 다.
(1)사용자 openid 가 져 오기
기 존 에 자체 APPID 와 APPESecert 를 설 정 했 기 때문에 여 기 는 처리 할 필요 가 없습니다.
//①、 openid
$tools = new JsApiPay();
$openId = $tools->GetOpenid();
여기 서 먼저 초기 화 된 JsApipay()클래스 는 example/디 렉 터 리 에 있 는 WxPay.JsApipay.php 에 대응 하 는 파일 을 대상 으로 받 습 니 다.GetOpenid()방법 을 사용 하면 자신의 openID 를 자동 으로 가 져 옵 니 다.(2)통일 주문
//②、
$input = new WxPayUnifiedOrder();
$input->SetBody("test");
$input->SetAttach("test");
$input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));
$input->SetTotal_fee("1");
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("test");
$input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openId);
$order = WxPayApi::unifiedOrder($input);
echo '<font color="#f00"><b> </b></font><br/>';
printf_info($order);
$jsApiParameters = $tools->GetJsApiParameters($order);
WxPay.api.php 의 24 번 째 줄 에 대응 하 는 유 니 피 드 Order()방법 으로 주문 정보 와 지불 리 셋 함 수 를 설정 합 니 다.여기 서 몇 가지 인 자 를 수정 해 야 합 니 다.A.상품 명:
$input->SetBody("test");
B.주문 번호
$input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));
C.지불 금액
$input->SetTotal_fee("1");
D.결제 인증 링크notify.php 파일 이 있 는 위치 로 설정 되 어 있 습 니 다.그래서 저 는 다음 과 같이 설정 합 니 다http://xy.chuyin.ren/weixinopen/wxpay/example/notify.php
다른 주 소 를 쓸 수도 있 습 니 다.물론 지불 권한 수여 도 메 인 이름 에서 지불 이 성공 하면 이 링크 가 지정 한 방법 으로 자동 으로 되 돌아 가 안에서 판단 과 데이터 베 이 스 를 조작 할 수 있 습 니 다.
$input->SetNotify_url(http://paysdk.weixin.qq.com/example/notify.php);
E.추가 매개 변수
$input->SetAttach("test");
추가 매개 변 수 는 채 울 수 있 고 쓰 지 않 을 수 있 으 며,쓰 면 안에 있 는 문자열 에 빈 칸 이 생기 지 않 는 것 이 좋 습 니 다.이때 결 제 를 클릭 하면 성공 적 으로 지불 할 수 있 을 것 이다.
(3)지급 개시
<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);
}
);
}
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>
즉시 결제 단 추 를 누 르 면 콜 페 이()함수 가 호출 됩 니 다.jsApiCal()함 수 를 호출 하여 결제 프로그램 을 엽 니 다.jsApiCal()함수 가 모든 동작 을 감청 합 니 다:
res.err_msg get_brand_wcpay_request:cancel
전단 판단 의 지불 취소,es.errmsg 는 getbrand_wcpay_request:ok 은 전단 판단 의 지불 성공 을 나타 내 고 우 리 는 이것 에 따라 지불 을 성공 페이지 로 옮 길 수 있 습 니 다.(4)성공 리 셋 지원
전단 jsApiCal()함 수 를 통 해 결제 결 과 를 감청 할 수 있 지만 믿 을 수 없습니다.지불 성공 여 부 를 확인 하려 면 notify.phop 을 통 해 업무 논 리 를 처리 해 야 합 니 다.앞쪽 에 결제 인증 링크 가 설정 되 어 있 습 니 다 SetNotifyurl(),결제 가 완료 되면 위 챗 서버 는 링크 에 따라 notify.phop 파일 을 자동 으로 요청 하여 이 파일 을 엽 니 다.사실 이 파일 의 가장 주요 한 코드 는 두 줄 입 니 다.
$notify = new PayNotifyCallBack();
$notify->Handle(false);
WxPay.Notify.php 파일 의 Handle()함 수 를 추적 합 니 다.
/**
*
*
* @param bool $needSign
*/
final public function Handle($needSign = true)
{
$msg = "OK";
// false , notify NotifyCallBack ,
$result = WxpayApi::notify(array($this, 'NotifyCallBack'), $msg);
if($result == false){
$this->SetReturn_code("FAIL");
$this->SetReturn_msg($msg);
$this->ReplyNotify(false);
return;
} else {
// NotifyCallBack ,
$this->SetReturn_code("SUCCESS");
$this->SetReturn_msg("OK");
}
$this->ReplyNotify($needSign);
}
주 코드:
$result = WxpayApi::notify(array($this, 'NotifyCallBack'), $msg);
그리고 WxPay.api.php 파일 의 411 줄 에 와 서 notify()함수:
/**
*
*
* @param function $callback
* : notify(you_function);
* :notify(array($this, you_function));
* $callback :function function_name($data){}
*/
public static function notify($callback, &$msg)
{
//
$xml = $GLOBALS['HTTP_RAW_POST_DATA'];
//file_put_contents('log.txt',$xml,FILE_APPEND);
//
try {
$result = WxPayResults::Init($xml);
} catch (WxPayException $e){
$msg = $e->errorMessage();
return false;
}
return call_user_func($callback, $result);
}
이 안의$xml=$GLOBALS[HTTPRAW_POST_DATA']는 결제 가 성공 한 후에 사용자 가 당신 에 게 되 돌려 준 결과 입 니 다.그 는 xml 형식의 문자열 입 니 다.우 리 는 이곳 에서 돌아 온 xml 데 이 터 를 기록 한 후에$out 를 열 어 볼 수 있 습 니 다.trade_no 는 지불 하기 전에 제 가 설정 한 주문 번호 입 니 다.$attach 는 설정 한 추가 매개 변수 입 니 다.
이 주문 번 호 를 얻 은 후에 나 는 바로 아래 에 지불 성공 후의 논 리 를 썼 다.예 를 들 어 데이터 베이스 중의 데 이 터 를 바 꾸 는 등 이다.
이렇게 위 챗 결제 의 JsApi 결 제 를 대충 분석 해 봤 습 니 다.
이것 은 공식 SDK 를 통합 하여 실현 한 것 으로 SDK 를 사용 하지 않 으 면 더욱 간단 한 방법 을 사용 할 수 있다.
총결산
위 에서 말 한 것 은 편집장 이 여러분 에 게 소개 한 PHP 가 위 챗 결제(jsapi 결제)절 차 를 상세 하 게 설명 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.