In PHP implementierte Alipay-Zahlungsfunktion: In Kombination mit der Beispielformularanalyse verwendet PHP die Alipay-Schnittstelle, um die Zahlungsfunktion zu implementieren. Zuerst wird der Schnittstellencode organisiert, um die Stabilität des Vorgangs sicherzustellen Bei der Rückrufverarbeitung wird die Funktion durch Überprüfung der Parameter erreicht.
Problemdetails:
Dieser Artikel beschreibt die in PHP implementierte Zahlungsfunktion von Alipay.
Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:
Bei der Erstellung der Alipay-Zahlungsschnittstelle für die App werden die gesammelten Inhalte wie folgt organisiert:
Schnittstelle:
import('alipay.AopClient', EXTEND_PATH); import('alipay.request.AlipayTradeAppPayRequest', EXTEND_PATH); $aop = new \AopClient(); $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do"; $aop->appId = Config::get('alipay.app_id'); $aop->rsaPrivateKey = Config::get('alipay.rsa_private_key'); $aop->format = "json"; $aop->charset = "UTF-8"; $aop->signType = "RSA2"; $aop->alipayrsaPublicKey = Config::get('alipay.alipay_rsa_public_key'); //Config::get('alipay.rsa_public_key'); // $request = new \AlipayTradeAppPayRequest(); $bizcontent = json_encode([ 'body' => '红包支付', 'subject' => '用户红包支付', 'out_trade_no' => $orderSn, 'timeout_express' => '30m', 'total_amount' => $amount, 'product_code' => 'QUICK_MSECURITY_PAY' ]); $request->setNotifyUrl("https://" . $_SERVER['HTTP_HOST'] . "/api/callback/alipay"); $request->setBizContent($bizcontent);//这里和普通的接口调用不同,使用的是sdkExecute $response = $aop->sdkExecute($request); $return['aliresponse'] = $response;//htmlspecialchars($response);//htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题 $this->returnSuccess($return);
Rückrufverarbeitung:
public function alipay() { import('alipay.AopClient', EXTEND_PATH); $aop = new \AopClient(); $aop->alipayrsaPublicKey = Config::get('alipay.alipay_rsa_public_key');// file_get_contents($_SERVER['DOCUMENT_ROOT']."/key/alipay/alipay_public_key.txt"); $flag = $aop->rsaCheckV1($_POST, NULL, "RSA2"); if ($flag){ //验签通过后核实如下参数trade_status、out_trade_no、total_amount、seller_id if (isset($_POST['trade_status']) && ($_POST['trade_status'] == 'TRADE_SUCCESS' || $_POST['trade_status'] == 'TRADE_FINISHED') ) { // 业务处理 } else { $msg = var_export($_POST, true); $fileName = mt_rand(10,1000) .'00alisuccessAnother.log' ; file_put_contents($fileName, $msg); } echo "success"; } else { $msg = var_export($_POST, true); $fileName = mt_rand(10,1000) .'00alicheckSignFail.log'; file_put_contents($fileName, $msg); } }
Weitere Lernempfehlungen: Alipay Instant Payment Online-Zahlungspraxis Projektentwicklungs-Video-Tutorial
Anhang: Alipay-Zahlung und WeChat-Zahlung asynchrone Rückrufe werden immer aufgerufen
Ich habe entwickelt Alipay-Zahlung vor kurzem, und die Vorarbeiten wurden abgeschlossen. Es ist erledigt, aber wenn der asynchrone Rückruf den Wert annimmt, ruft der asynchrone Rückruf weiter auf, was dazu führt, dass meine Daten wiederholt in der Datenbank gespeichert werden Es fällt mir sofort ein, einen weiteren Wert in den asynchronen Rückruf einzufügen. Fragen Sie die Datenbank nach jedem Rückruf ab, um festzustellen, ob Daten vorhanden sind. Speichern Sie diese jedoch nicht erneut Denken Sie sorgfältig darüber nach, es ist falsch, die Symptome zu behandeln und nicht die Grundursache. Nein, da es ein Problem gibt, muss es eine Grundursache und eine richtige Lösung geben. Um die Grundlage zu finden, schauen Sie sich die Dokumentation an:
1. Alipay-Dokumentation , hier ist die Dokumentation für den asynchronen Alipay-Rückruf:
Haben Sie gesehen, dass das Programm ausgedruckt werden mussServer-Asynchron-Benachrichtigungsseite Funktionen
Es muss sichergestellt werden, dass die asynchrone Benachrichtigungsseite des Servers (notify_url) keine Zeichen enthält, z. B. Leerzeichen, HTML-Tags, vom Entwicklungssystem ausgelöste Ausnahmeaufforderungen usw.
Alipay verwendet POST zum Senden von Benachrichtigungsinformationen, also die Methoden zum Abrufen von Parametern auf dieser Seite, wie zum Beispiel: request.Form("out_trade_no"), $_POST['out_trade_no'];
Diese Methode wird nur aktiviert, wenn Alipay aktiv eine initiiert Benachrichtigung;
Nur wenn die Transaktion in der Transaktionsverwaltung vorhanden ist und sich der Transaktionsstatus ändert, initiiert Alipay über diese Methode eine Serverbenachrichtigung (wenn der Status der sofortigen Transaktion „Warten auf Käuferzahlung“ ist, ist die Standardeinstellung
sendet keine Benachrichtigung);
Interaktion zwischen Servern, im Gegensatz zu Seitensprung-Synchronisierungsbenachrichtigungen, die auf der Seite angezeigt werden können
Die erste Transaktionsstatusänderung (sofortige Zahlung zu diesem Zeitpunkt). Der Transaktionsstatus lautet Transaktion abgeschlossen.) Es wird nicht nur das synchrone Verarbeitungsergebnis zurückgegeben, sondern die asynchrone Benachrichtigungsseite des Servers erhält auch die Verarbeitungsergebnisbenachrichtigung von Alipay.
„Erfolg“ (ohne Anführungszeichen) muss nach dem ausgedruckt werden Programm wird ausgeführt. Wenn es sich bei den vom Händler an Alipay zurückgesendeten Zeichen nicht um die 7 Erfolgszeichen handelt, sendet der Alipay-Server die Benachrichtigung erneut, bis 24 Stunden und 22 Minuten überschritten sind.
Unter normalen Umständen werden 8 Benachrichtigungen innerhalb von 25 Stunden abgeschlossen (die Intervallhäufigkeit der Benachrichtigungen beträgt im Allgemeinen: 4 Minuten, 10 Minuten, 10 Minuten, 1 Stunde, 2 Stunden, 6 Stunden, 15 Stunden).
Nach Abschluss der Programmausführung wird die Seite angezeigt kann nicht ausgeführt werden. Wenn ein Seitensprung ausgeführt wird, erhält Alipay das Erfolgszeichen nicht und der Alipay-Server stellt fest, dass das Seitenprogramm abnormal ausgeführt wird, und sendet die Benachrichtigung über das Verarbeitungsergebnis erneut.
Cookies, Sitzungen usw. sind ungültig Diese Seite kann nicht abgerufen werden.
Das Debuggen und der Betrieb dieser Methode müssen auf dem Server erfolgen.
Die Funktion dieser Methode ist Hauptsächlich um den Verlust von Bestellungen zu verhindern, d wird ungültig. Das heißt, wenn Alipay dieselbe asynchrone Benachrichtigung
sendet (einschließlich der Tatsache, dass der Händler den Erfolg nicht erfolgreich ausgedruckt hat und Alipay dazu veranlasst hat, die Benachrichtigung mehrmals erneut zu senden), bleibt der asynchrone Benachrichtigungsparameter notify_id des Servers unverändert.
, bevor Alipay aufhört, Blut zu spucken? Als ich mir das Programm noch einmal ansah, stellte ich fest, dass ich nicht zurückkam success
, also rein Das Programm Wenn Sie fertig sind, geben Sie einfach ein success
zurück. Da ich PHP verwende, endet das Programm nach dem Ende. Verwenden Sie einfach den folgenden Satz. success
eg: echo "success";
2. WeChat-Dokument
支付完成后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答。
对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知
最终能成功。 (通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)
注意:同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。
推荐的做法是,当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回结果成功。
在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。
特别提醒:商户系统对于支付结果通知的内容一定要做签名验证,并校验返回的订单金额是否与商户侧的订单金额一致,防止数据泄漏导致出现“假通知”,造成资金损失。
技术人员可登进微信商户后台扫描加入接口报警群。
看到没,在此文档也是,在微信的异步通知后,也需要给微信服务器,返回一个信息,只不过,微信的所有数据格式都是xml的。所以我们在返回一个数据给微信即可。
echo "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
在进行返回的时候,格式没问题,可能在输出的时候,存在问题。使用下面方式即可:
echo exit('<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>');
就是这么简单,完美结局!
相关学习推荐:php视频教程
Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Alipay-Zahlungsfunktion in PHP (ausführliche Erklärung mit Bildern und Text). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!