PHP에서 WeChat 결제(jsapi 결제) 프로세스를 구현하는 방법

藏色散人
풀어 주다: 2023-04-07 22:50:02
앞으로
8889명이 탐색했습니다.

최근 위챗 결제 관련 프로젝트를 접하게 되었습니다. 오랫동안 위챗을 개발해왔지만 결제를 해본 적이 없어서 빨간 봉투를 보내주신 선배님들께도 감사드립니다. 그들의 탐험, 나는 그들의 블로그 게시물을 읽고 많은 우회로를 구했습니다.

조기 준비:

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/PHP에서 WeChat 결제(jsapi 결제) 프로세스를 구현하는 방법

#입니다. 🎜🎜#

3. 결제 프로세스

PHP에서 WeChat 결제(jsapi 결제) 프로세스를 구현하는 방법예제 디렉터리에서 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 &#39;<font color="#f00"><b>统一下单支付单信息</b></font><br/>&#39;;
printf_info($order);
$jsApiParameters = $tools->GetJsApiParameters($order);
로그인 후 복사

B. 결제 금액#🎜🎜 #

$input->SetBody("test");
로그인 후 복사
#🎜 🎜#D. 결제 확인 링크

는 inform.php 파일의 위치로 설정되어 있으므로 여기에서

#🎜🎜로 설정했습니다. #http://xy .chuyin.ren/weixinopen/wxpay/example/notify.php

다른 주소도 쓰실 수 있습니다. 물론 결제 승인 도메인에 속해야 합니다. 결제가 성공적으로 완료되면 해당 주소로 자동 콜백됩니다.

$input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));
로그인 후 복사

E. #
$input->SetTotal_fee("1");
로그인 후 복사

추가 매개변수는 입력할 수도 있고 입력하지 않을 수도 있습니다. 입력할 경우 문자열에 공백이 없는 것이 가장 좋습니다.

이때 결제를 클릭하시면 결제가 성공됩니다.

(3) 결제 시작

$input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");
로그인 후 복사

지금 결제 버튼을 클릭하면 callpay() 함수가 호출되며, 이 함수는 jsApiCall() 함수를 호출하여 결제 프로그램을 엽니다.

jsApiCall() 함수는 모든 작업을 모니터링합니다.

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개뿐입니다. 줄: PHP에서 WeChat 결제(jsapi 결제) 프로세스를 구현하는 방법

$input->SetAttach("test");
로그인 후 복사
# 🎜🎜#WxPay.Notify.php 클래스 파일의 Handle() 함수는 다음에서 추적됩니다.

<script type="text/javascript">
//调用微信JS api 支付
function jsApiCall()
{
WeixinJSBridge.invoke(
&#39;getBrandWCPayRequest&#39;,
<?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(&#39;WeixinJSBridgeReady&#39;, jsApiCall, false);
}else if (document.attachEvent){
document.attachEvent(&#39;WeixinJSBridgeReady&#39;, jsApiCall); 
document.attachEvent(&#39;onWeixinJSBridgeReady&#39;, jsApiCall);
}
}else{
jsApiCall();
}
}
</script>
로그인 후 복사

기본 코드:

$notify = new PayNotifyCallBack();
$notify->Handle(false);
로그인 후 복사
#🎜🎜 #The $xml=$GLOBALS[ 'HTTP_RAW_POST_DATA']는 결제 성공 후 사용자가 반환한 결과입니다. xml 형식의 문자열입니다.

PHP에서 WeChat 결제(jsapi 결제) 프로세스를 구현하는 방법

여기에 반환된 xml 데이터를 기록하고 열어보면 $out_trade_no가 결제 전에 직접 설정한 주문 번호인 $attach It을 확인할 수 있습니다. 추가 매개변수 세트입니다.

주문번호를 받은 후 데이터베이스의 데이터 변경 등 결제 성공 후 로직을 직접 작성하겠습니다.

이렇게 해서 위챗 결제의 JsApi 결제에 대한 전반적인 분석이 완료되었습니다.

PHP에서 WeChat 결제(jsapi 결제) 프로세스를 구현하는 방법

SDK를 사용하지 않는 경우 더 간단한 방법을 사용할 수 있습니다. PHP에서 WeChat 결제를 구현합니다. (jsapi 결제) 및 환불(결제 SDK 통합 필요 없음)

PHP 관련 지식을 더 보려면 PHPTutorial을 방문하세요!

위 내용은 PHP에서 WeChat 결제(jsapi 결제) 프로세스를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!