So implementieren Sie den WeChat-Zahlungsprozess (jsapi payment) in PHP

藏色散人
Freigeben: 2023-04-07 22:50:02
nach vorne
8889 Leute haben es durchsucht

Kürzlich bin ich mit einem WeChat-Zahlungsprojekt in Berührung gekommen. Ich habe in der langen Zeit, in der ich WeChat entwickelt habe, auch noch nie ein öffentliches Konto erstellt, um den Senioren dafür zu danken Erkundung, ich habe ihre Blogbeiträge gelesen. Das hat mir viele Umwege erspart.

Frühzeitige Vorbereitung:

1. WeChat-zertifiziertes Dienstkonto und aktiviertes WeChat-Zahlungs-SDK, Download-Adresse: https://pay.weixin .com/wiki/doc/api/jsapi.php?chapter=11_1

3. Melden Sie sich bei der WeChat-Zahlungsplattform an: https://pay.weixin.qq.com/index.php/account/api_cert Zertifikat herunterladen und bezahlen

Methodenschritte:

1.Demo-Dateiverarbeitung

(1) Laden Sie die offizielle Demo herunter, der Dateiname lautet WxpayAPI_php_v3, und benennen Sie die Datei in um wxpay, Um das Verzeichnis später zu schreiben; (2) Öffnen Sie die Datei WxPay.Api.php im Ordner lib. In Zeile 537 befindet sich ein Curl-Netzwerkanforderungscode:

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
Nach dem Login kopieren

wird ersetzt durch:

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
Nach dem Login kopieren

Um cURL bei der Überprüfung des Peer-Zertifikats zu deaktivieren.

(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';
Nach dem Login kopieren

(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();
}
Nach dem Login kopieren

geändert in:

if($needSign == true && 
$this->GetReturn_code() == "SUCCESS")
{
$this->SetSign();
}
Nach dem Login kopieren

(5) Öffnen Sie das Zertifikatverzeichnis cert und ersetzen Sie die beiden darin enthaltenen Zertifikate durch Ihr eigenes Zahlungszertifikat.

2. Hintergrundeinstellungen für das öffentliche Konto

(1) Konfigurieren Sie den autorisierten Domänennamen der Webseite, mein Domänenname ist (xy.chuyin.ren);

(1) Konfigurieren Sie das Zahlungsautorisierungsverzeichnis (xy.chuyin.ren). Ich habe die Demo im Ordner weixinopen/ abgelegt, auf den dieser Domainname verweist Die Datei in der Demo befindet sich im Verzeichnis example/. Daher lautet das Zahlungsautorisierungsverzeichnis: xy.chuyin.ren/weixinopen/wxpay/example/

So implementieren Sie den WeChat-Zahlungsprozess (jsapi payment) in PHP3 Prozess

Öffnen Sie jsapi im Beispielverzeichnis der PHP-Dateien, die Zahlungsinitiierung und -verarbeitung ist hier abgeschlossen.

(1) Erhalten Sie die Benutzer-OpenID So implementieren Sie den WeChat-Zahlungsprozess (jsapi payment) in PHP

Sie haben Ihre APPID und Ihr APPSecert bereits konfiguriert, sodass eine Verarbeitung hier nicht erforderlich ist.

//①、获取用户openid
$tools = new JsApiPay();
$openId = $tools->GetOpenid();
Nach dem Login kopieren

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 &#39;<font color="#f00"><b>统一下单支付单信息</b></font><br/>&#39;;
printf_info($order);
$jsApiParameters = $tools->GetJsApiParameters($order);
Nach dem Login kopieren

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");
Nach dem Login kopieren

Bestellnummer

$input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));
Nach dem Login kopieren

D. Zahlungsbestätigungslink

Stellen Sie den Speicherort Ihrer notify.php-Datei ein, also stelle ich ihn hier ein auf:

http://xy.chuyin.ren/weixinopen/wxpay/example/notify.php

Sie können auch andere Adressen schreiben, diese müssen natürlich unter dem Domainnamen der Zahlungsautorisierung stehen. Nach erfolgreicher Zahlung wird automatisch zu der im Link angegebenen Methode zurückgerufen, wo Sie können Führen Sie Beurteilungs- und Datenbankoperationen durch.

$input->SetTotal_fee("1");
Nach dem Login kopieren

E. Zusätzliche Parameter

$input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");
Nach dem Login kopieren

Zusätzliche Parameter können ausgefüllt werden oder nicht. Wenn sie ausgefüllt sind, 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");
Nach dem Login kopieren

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.

So implementieren Sie den WeChat-Zahlungsprozess (jsapi payment) in PHP(4) Erfolgsrückruf unterstützen

Sie können das Zahlungsergebnis über die Front-End-Funktion jsApiCall() überwachen, 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(
&#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>
Nach dem Login kopieren

Die Handle()-Funktion der Klassendatei WxPay.Notify.php wird von folgendem verfolgt: So implementieren Sie den WeChat-Zahlungsprozess (jsapi payment) in PHP

$notify = new PayNotifyCallBack();
$notify->Handle(false);
Nach dem Login kopieren

Hauptcode:

/**
 * 
 * 回调入口
 * @param bool $needSign  是否需要签名输出
 */
final public function Handle($needSign = true)
{
$msg = "OK";
//当返回false的时候,表示notify中调用NotifyCallBack回调失败获取签名校验失败,此时直接回复失败
$result = WxpayApi::notify(array($this, &#39;NotifyCallBack&#39;), $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);
}
Nach dem Login kopieren
The $xml=$ GLOBALS['HTTP_RAW_POST_DATA'] hier ist 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, dass $out_trade_no die Bestellnummer ist, die ich vor der Zahlung festgelegt habe, und $attach der zusätzliche Parametersatz ist . .

Nachdem ich die Bestellnummer erhalten habe, habe ich die Logik nach erfolgreicher Zahlung direkt darunter geschrieben, z. B. das Ändern der Daten in der Datenbank usw.

Auf diese Weise ist die allgemeine Analyse der JsApi-Zahlung der WeChat-Zahlung abgeschlossen.

So implementieren Sie den WeChat-Zahlungsprozess (jsapi payment) in PHP

Dies wird durch die Integration des offiziellen SDK implementiert. Wenn Sie das SDK nicht verwenden, können Sie eine einfachere Methode verwenden, siehe: PHP implementiert WeChat-Zahlung (jsapi payment) und Rückerstattung (Zahlungs-SDK muss nicht integriert werden).

Weitere PHP-bezogene Kenntnisse finden Sie im PHP-Tutorial!

Das obige ist der detaillierte Inhalt vonSo implementieren Sie den WeChat-Zahlungsprozess (jsapi payment) in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!