Heim >Backend-Entwicklung >PHP-Problem >Was ist der PHP-WeChat-Zahlungsprozess?
Frühe Vorbereitung:
1. WeChat-Authentifizierungsdienstkonto und WeChat-Zahlung eröffnen
2. WeChat-Zahlungs-SDK, Download-Adresse: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
3. Melden Sie sich bei der WeChat-Zahlungsplattform https an :/ /pay.weixin.qq.com/index.php/account/api_certZahlungszertifikat herunterladen
Methodenschritte:
1.Demo-Dateiverarbeitung
(1) Laden Sie die offizielle Demo herunter, der Dateiname ist WxpayAPI_php_v3, und benennen Sie die Datei in wxpay um, damit Sie das Verzeichnis später bequem schreiben können.
(2) Öffnen Sie WxPay.Api.php im lib-Ordner In der Datei befindet sich in Zeile 537 ein Curl-Netzwerkanforderungskonfigurationscode:
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
wird ersetzt durch:
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
, um zu verhindern, dass cURL das Zertifikat des Peers überprüft.
(3) Öffnen Sie die Datei WxPay.Config.php im lib-Ordner. Vervollständigen Sie ab Zeile 25 die grundlegenden Informationseinstellungen entsprechend Ihrem Konto.
const APPID = '公众账号APPID'; const MCHID = '商户号'; const KEY = '商户支付密钥'; const APPSECRET = '公众帐号secert';
(4) Öffnen Sie die lib Ordner In der Datei WxPay.Notify.php unten wird der Code in Zeile 79:
if($needSign == true && $this->GetReturn_code($return_code) == "SUCCESS") { $this->SetSign(); }
geändert in:
if($needSign == true && $this->GetReturn_code() == "SUCCESS") { $this->SetSign(); }
(5) Öffnen Sie das Zertifikatverzeichnis cert und ersetzen Sie die beiden darin enthaltenen Zertifikate durch Ihr eigenes Zahlungszertifikat.
Verwandte Empfehlungen: „PHP-Tutorial“
2. Offizielle Kontohintergrundeinstellungen
(1) Konfigurieren Sie den für die Webseite autorisierten Domänennamen, meine Domäne Name ist (xy.chuyin.ren);
(2) Konfigurieren Sie das Zahlungsautorisierungsverzeichnis Demo im Verzeichnis, auf das dieser Domainname verweist. Die Datei jsapi.php in der Demo befindet sich im Verzeichnis example/. Das Zahlungsautorisierungsverzeichnis lautet also: xy.chuyin.ren/weixinopen/wxpay/. Beispiel/
3. Zahlungsvorgang
Öffnen Sie die Datei jsapi.php im Beispielverzeichnis. Hier sind alle Zahlungen abgeschlossen.
(1) Erhalten Sie die Benutzer-OpenID
Sie haben Ihre APPID und Ihr APPSecert bereits konfiguriert, sodass eine Verarbeitung hier nicht erforderlich ist.
//①、获取用户openid $tools = new JsApiPay(); $openId = $tools->GetOpenid();
Die hier initialisierte JsApiPay()-Klasse erhält zuerst ein Objekt. Die Datei entspricht WxPay.JsApiPay.php im Verzeichnis example/ und erhält automatisch eine eigene openID.
(2) Unified order
//②、统一下单 $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);
entspricht der unifiedOrder()-Methode in Zeile 24 von WxPay.Api.php, die die Bestellinformationen und die Zahlungsrückruffunktion konfiguriert hier geändert:
Produktname:
$input->SetBody("test");
Bestellnummer
$input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));
D. Zahlungsbestätigungslink
Legen Sie den Speicherort Ihrer notify.php-Datei fest, daher habe ich sie hier auf http://xy.chuyin.ren/weixinopen/wxpay/example/notify.php eingestellt
Das können Sie auch Schreiben Sie andere Adressen. Natürlich muss sie sich unter dem Domänennamen für die Zahlungsautorisierung befinden. Nach erfolgreicher Zahlung wird automatisch die im Link angegebene Methode aufgerufen, über die Beurteilungs- und Datenbankvorgänge durchgeführt werden können.
$input->SetTotal_fee("1");
E. Zusätzliche Parameter
$input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");
Zusätzliche Parameter können ausgefüllt werden oder nicht. Wenn ausgefüllt, ist es am besten, keine Leerzeichen in der Zeichenfolge zu haben.
Klicken Sie zu diesem Zeitpunkt auf „Bezahlen“ und die Zahlung sollte erfolgreich sein.
(3) Zahlung einleiten
$input->SetAttach("test");
Durch Klicken auf die Schaltfläche „Jetzt bezahlen“ wird die Funktion callpay() aufgerufen, die die Funktion jsApiCall() aufruft, um das Zahlungsprogramm zu öffnen.
jsApiCall()-Funktion überwacht jede Aktion:
res.err_msg gibt das Front-End-Urteil für get_brand_wcpay_request an :cancel Um die Zahlung abzubrechen, lautet es.err_msg get_brand_wcpay_request:ok. Dies zeigt an, dass das Front-End die Zahlung als erfolgreich beurteilt hat, und wir können auf dieser Grundlage zur Zahlungserfolgsseite springen.
(4) Unterstützt Erfolgsrückruf
Das Zahlungsergebnis kann über die Front-End-Funktion jsApiCall() überwacht werden, dies ist jedoch nicht vertrauenswürdig. Um zu bestätigen, ob die Zahlung erfolgreich ist, sollte die Geschäftslogik über notify.php verarbeitet werden. Der Zahlungsbestätigungslink SetNotify_url() wurde zuvor konfiguriert. Nach Abschluss der Zahlung fordert der WeChat-Server automatisch Ihre notify.php-Datei gemäß dem Link an und öffnet diese Datei. Tatsächlich besteht der Hauptcode dieser Datei nur aus zwei Zeilen:
<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>
Die Handle()-Funktion der Klassendatei WxPay.Notify.php wird von folgendem verfolgt:
$notify = new PayNotifyCallBack(); $notify->Handle(false);
Hauptcode:
/** * * 回调入口 * @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); }
The $xml=$ GLOBALS['HTTP_RAW_POST_DATA'] ist hier: Nach erfolgreicher Zahlung gibt der Benutzer ein Ergebnis an Sie zurück, bei dem es sich um eine Zeichenfolge im XML-Format handelt.
Wir können die hier zurückgegebenen XML-Daten aufzeichnen und sie dann öffnen, um zu sehen, ob $out_trade_no die Bestellnummer ist, die ich vor der Zahlung festgelegt habe, und $attach der zusätzliche Parametersatz ist.
Nach Erhalt der Bestellnummer schreibe ich direkt nach erfolgreicher Zahlung die Logik, z. B. das Ändern der Daten in der Datenbank usw.
Auf diese Weise ist die allgemeine Analyse der JsApi-Zahlung der WeChat-Zahlung abgeschlossen.
Das obige ist der detaillierte Inhalt vonWas ist der PHP-WeChat-Zahlungsprozess?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!