최근 위챗 결제 관련 프로젝트를 접하게 되었습니다. 오랫동안 위챗을 개발해왔지만 결제를 해본 적이 없어서 빨간 봉투를 보내주신 선배님들께도 감사드립니다. 그들의 탐험, 나는 그들의 블로그 게시물을 읽고 많은 우회로를 구했습니다.
조기 준비:
1. WeChat 인증 서비스 계정 및 활성화된 WeChat 결제
2, 다운로드 주소: https: / /pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
3 WeChat 결제 플랫폼 https://pay.weixin.qq.com에 로그인하세요. /index .php/account/api_cert 결제 인증서 다운로드
방법 단계:
1.demo 파일 처리
(1) 공식 데모 다운로드 , 파일 이름은 WxpayAPI_php_v3입니다. 나중에 디렉토리 작성의 편의를 위해 이 파일의 이름을 wxpay로 바꿉니다.
(2) lib 폴더 아래에 있는 WxPay.Api.php 파일을 엽니다. 537행의 섹션 네트워크 요청 구성 코드:
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
은 cURL이 피어 인증서를 확인하지 못하도록 하기 위해
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
으로 대체됩니다.
(3) lib 폴더에서 WxPay.Config.php 파일을 엽니다. 25번째 줄부터 계정에 따라 기본 정보 설정을 완료합니다. ) lib 폴더 아래의 WxPay.Notify.php 파일을 엽니다. 79행의 코드를
const APPID = '公众账号APPID'; const MCHID = '商户号'; const KEY = '商户支付密钥'; const APPSECRET = '公众帐号secert';
에서
if($needSign == true && $this->GetReturn_code($return_code) == "SUCCESS") { $this->SetSign(); }
으로 변경합니다. (5) 인증서 인증서 디렉터리를 열고 두 인증서를 자신의 결제 인증서로 교체하세요.
2. 공개 계정 배경 설정
(1) 웹 페이지 인증 도메인 이름을 구성합니다. 내 도메인 이름은
#입니다. 🎜🎜#(1) 결제 승인 디렉터리를 구성합니다. 도메인 이름은 (xy.chuyin.ren)이 가리키는 디렉터리의 weixinopen/ 폴더 아래에 있습니다. 데모의 jsapi는 example/ 디렉터리에 있으므로 결제 승인 디렉터리는 xy.chuyin.ren/weixinopen/wxpay/example/
#입니다. 🎜🎜#3. 결제 프로세스예제 디렉터리에서 jsapi.php 파일을 열면 여기서 결제 시작 및 처리가 모두 완료됩니다.
(1) 사용자 openid 확보
이전에 APPID와 APPSecert를 구성했으므로 여기서는 처리할 필요가 없습니다.
if($needSign == true && $this->GetReturn_code() == "SUCCESS") { $this->SetSign(); }
여기에서 초기화된 JsApiPay() 클래스는 먼저 객체를 얻습니다. 파일은 example/ 디렉터리의 WxPay.JsApiPay.php에 해당합니다. GetOpenid() 메서드를 호출하면 자동으로 자체 openID를 얻습니다.
(2) 통합 주문
//①、获取用户openid $tools = new JsApiPay(); $openId = $tools->GetOpenid();
WxPay.Api.php 24번째 라인의 UnifiedOrder() 메소드에 해당하며, 주문 정보 및 결제 콜백 기능을 구성합니다. 여러 매개변수를 수정해야 합니다:
//②、统一下单 $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);
B. 결제 금액#🎜🎜 #
$input->SetBody("test");
는 inform.php 파일의 위치로 설정되어 있으므로 여기에서
#🎜🎜로 설정했습니다. #http://xy .chuyin.ren/weixinopen/wxpay/example/notify.php
다른 주소도 쓰실 수 있습니다. 물론 결제 승인 도메인에 속해야 합니다. 결제가 성공적으로 완료되면 해당 주소로 자동 콜백됩니다.$input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));
$input->SetTotal_fee("1");
추가 매개변수는 입력할 수도 있고 입력하지 않을 수도 있습니다. 입력할 경우 문자열에 공백이 없는 것이 가장 좋습니다.
이때 결제를 클릭하시면 결제가 성공됩니다.
(3) 결제 시작jsApiCall() 함수는 모든 작업을 모니터링합니다.지금 결제 버튼을 클릭하면 callpay() 함수가 호출되며, 이 함수는 jsApiCall() 함수를 호출하여 결제 프로그램을 엽니다.$input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");로그인 후 복사
res .err_msg는 get_brand_wcpay_request:cancel로 프론트엔드에서 결제가 취소되었다고 판단했다는 의미이고, es.err_msg는 get_brand_wcpay_request:ok으로 프론트엔드에서 결제가 성공했다고 판단했다는 의미로 성공으로 점프할 수 있습니다. 이를 기반으로 한 페이지입니다.
(4) 성공 콜백 지원
프론트엔드 jsApiCall() 함수를 통해 결제 결과를 모니터링할 수 있지만 이는 신뢰할 수 없습니다. 결제 성공 여부를 확인하려면 inform.php를 통해 비즈니스 로직을 처리해야 한다. 결제 확인 링크 SetNotify_url()은 이전에 구성되었습니다. 결제가 완료된 후 WeChat 서버는 링크에 따라 자동으로 inform.php 파일을 요청하고 이 파일을 엽니다. 실제로 이 파일의 주요 코드는 2개뿐입니다. 줄:
$input->SetAttach("test");
<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>
기본 코드:
$notify = new PayNotifyCallBack(); $notify->Handle(false);
주문번호를 받은 후 데이터베이스의 데이터 변경 등 결제 성공 후 로직을 직접 작성하겠습니다.
이렇게 해서 위챗 결제의 JsApi 결제에 대한 전반적인 분석이 완료되었습니다.
SDK를 사용하지 않는 경우 더 간단한 방법을 사용할 수 있습니다. PHP에서 WeChat 결제를 구현합니다. (jsapi 결제) 및 환불(결제 SDK 통합 필요 없음)
PHP 관련 지식을 더 보려면 PHPTutorial을 방문하세요!
위 내용은 PHP에서 WeChat 결제(jsapi 결제) 프로세스를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!