Apropos WeChat Pay, ich glaube, jeder ist damit vertraut, aber wenn wir dieses Programm abschließen wollen, wie sollten unsere Programmierer es schreiben und einrichten? Mach dir keine Sorgen, heute hat der Herausgeber des neuen Technologiekanals des Bugs ein Beispiel für ein Beispiel. Gehen wir zum folgenden Artikel, um mehr zu erfahren!
Einführung: Distributor, wie kann man Bargeld aus dem Wechat -Geschäft abheben?
Zahlen Sie direkt mit Wechat.
Die Implementierung ist wie folgt:
WeChat -Zahlungskonfiguration
/*WeChat Payment*/ 'PAY_WEIXIN' => array( 'appid' => 'XXXX', 'appsecret' => 'XXXXXX, 'mchid' => '1283301801', //Merchant number 'key' => 'zhudianbaodiandozhudianbao0527', //Merchant payment key 'apiclient_cert' => 'Conf/cert/apiclient_cert.pem', // Händlerzertifikat apiclient_cert.pem 'apiclient_key' => 'conf/cert/apiclient_key.pem', // Händler -Zertifikat apiclient_key.pem)
Arraytoxml
/*** Array an xml*/Funktion ArrayToxMl ($ arr) {$ xml = "<xml>"; foreach ($ arr als $ key => $ val) {if (is_numeric ($ val)) {$ xml. = "<". $ key. ">". $ val. "</". $ key. ">"; } else $ xml. = "<". $ key. "> <! [cdata [". } $ xml. = "</xml>"; $ xml;} zurückgebenVerwenden Sie das Zertifikat, um das XML in der entsprechenden Schnittstellen -URL in Post zu senden
/*** Funktion: Verwenden Sie ein Zertifikat, um XML an die entsprechende Schnittstellen -URL zu senden // Zeitüberschreitungszeit curl_setopt ($ ch, curlopt_timeout, $ second? $ Second: $ this-> timeout); // Setzen Sie den Proxy hier, wenn es eins gibt // curl_setopt ($ ch, curlopt_proxy, '8.8.8.8'); // curl_setopt ($ ch, curlopt_proxyport, 8080); curl_setopt ($ ch, curlopt_url, $ url); curl_setopt ($ ch, curlopt_sl_verifypeer, false); curl_setopt ($ ch, curlopt_sl_verifyHost, false); // Header curl_setopt ($ ch, curlopt_header, false) festlegen; // Setzen Sie das Ergebnis als Zeichenfolge und Ausgabe auf den Bildschirm curl_setopt ($ ch, curlopt_returntransfer, true); // Setzen Sie das Zertifikat // Verwenden Sie das Zertifikat: Zertifikat und Schlüssel Es gehört zu zwei .pem -Dateien // Das Standardformat ist PEM. curl_setopt ($ ch, curlopt_sslcert, $ cert); // Das Standardformat ist PEM, Sie können curl_setopt ($ ch, curlopt_sslkeytype, 'pem') kommentieren; curl_setopt ($ ch, curlopt_sslkey, $ key); // Die Post -Submission -Methode curl_setopt ($ ch, curlopt_post, true); curl_setopt ($ ch, curlopt_postfields, $ xml); $ data = curl_exec ($ ch); // Ergebnis zurückgeben, wenn ($ data) {curl_close ($ ch); $ this-> xmltoArray ($ data) zurückgeben; } else {$ errungen = curl_errno ($ ch); echo "Curl -Fehler, Fehlercode: $ error". "<br>"; curl_close ($ ch); false zurückgeben; }}Unternehmen zahlen Einzelpersonen
// Das Unternehmen zahlt die individuelle öffentliche Funktion Paytouser ($ Params, $ key, $ apcent_cert, $ apiclient_key) {$ url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'; // Erkennungsbedarf Parameter if ($ params ["partner_trade_no"] == null) {// exit ("Anwendungsschnittstelle, die erforderlichen Parameter partner_trade_no!". "<br>"); } elseif ($ params ["openID"] == null) {exit ("Anwendungsschnittstelle, die erforderlichen Parameter OpenID!". "<br>"); } elseif ($ params ["check_name"] == null) {// no_check: Kein namentliches Verwertungsverifizierung Force_Check: Starke Überprüfung des richtigen Namens (Benutzer ohne korrekte Namen der Authentifizierung werden nicht verifiziert, und der Transfer kann nicht übertragen werden. Schnittstelle, der erforderliche Parameter check_name fehlt! "." <br> "); } elseif (($ params ["check_name"] == 'force_check' oder $ params ["check_name"] == 'option_check') && ($ params ["re_user_name"] == null)) {// Der richtige Name des Zahlungsbenutzers. Exit ("Rückerstattungsschnittstelle, der erforderliche Parameter re_user_name fehlt!". "<br>"); } elseif ($ params ["pension"] == null) {exit ("Rückerstattungsschnittstelle, der erforderliche Parameterbetrag fehlt!". "<br>"); } elseif ($ params ["desc"] == null) {exit ("Anwendungsschnittstelle, der erforderliche Parameter desc!". "<br>"); } $ params ["mch_appid"] = $ this-> appid; // öffentliche Konto-ID $ Params ["mchid"] = $ this-> mchid; // Händlernummer $ $ Params ["nonce_str"] = $ this-> createNoncestern (); // Random String $ params ['spbill_creede'] ? '192.127.1.1': $ _server ['remote_addr']; // ip $ params ["sign"] = $ this-> GetSign ($ params, $ key); // Signatur $ xml = $ this-> arrayToxml ($ params); Rückgabe $ this-> postxmlsslcurl ($ xml, $ url, false, $ apcent_cert, $ apiclient_key);}Geschäftszahlung
private function _EnterPrisepay ($ number, $ member_id, $ betragen, $ desc) {// OpenID $ wxuser_id = m ('member')-> wobei ('id' => $ member_id)-> getfield ('wxuser_id'); $ openID = m ('wxuser')-> wobei (array ('id' => $ wxuser_id))-> getfield ('openID'); $ pay = c ('pay_weixin'); import ('@. action.wxDevelop'); $ Enterprise = new WXEnterprise ($ pay ['Appid'], $ pay ['AppSecret'], $ pay ['mchid']); $ params = array ('partner_trade_no' => $ nummer, 'openID' => $ openID, 'check_name' => 'no_check', 'Betrag' => $ betragen, // Total 'Desc' => $ Desc,); $ result = $ Enterprise-> paytouser ($ params, $ pay ['key'], $ pay ['apiclient_cert'], $ pay ['apiclient_key']); $ $ result;}Prozessverteilerabhebungen
Private Funktion _Handle ($ truename, $ preis) {// Behandlungsabnahme $ $ resentId = Datum ("ymdhis"). Strval (Rand (1000, 9999)); $ data = array ('abheben' => $ abheben, 'store_id' => $ this-> store_id, 'member_id' => $ this-> member_id, 'tuename' => $ truename, 'price' => $ price, 'addtime' => time ()); // Keine Prüfung if ($ price> = c ('abheben_incheck_value')) {$ data ['Bedarf_Check'] = 0; $ data ['Status'] = 1; if ($ this-> abhebungModel-> add ($ data)) {$ result = $ this-> _ Enterprisepay ($ abgeholt, $ this-> member_id, $ preis * 100, 'Distribution ('. $ truename. ') abheben'); // Nach einem Fehler in der Zahlungsinformationen muss es überprüft werden, wenn ($ result ['return_code']! $ this-> ordnen ('Erfolg', 2); } else {// WeChat-Transaktionsnummer $ this-> abhebelmodel-> wob // Provision Flow erhöhen, um zu fixieren $ data = array ('store_id' => $ this-> store_id, 'user_type' => 2, 'user_id' => $ this-> cop_id, 'Trade_type' => 2, 'Trade_no' => $ abhebung, 'preis' = $ price ',' Status '=> 1, add. => Zeit ()); M ('Twitter_log')-> add ($ data); // Reduzieren Sie die entsprechenden Provisionen m ('member')-> wobei (Array ('id' => $ this-> member_id)-> setInc ('Geld',-$ preis); $ this-> ordnen ('Erfolg', 1); // Provisionsmeldungen senden Nachrichten importieren ('@. Action.tmplmsg'); $ tmplmsg = new tmplmsg (); $ tmplmsg-> send (tmplmsg :: price_change, $ this-> member_id, array ('token' => $ this-> token, 'intro' => 'Distribution Commission Abhebungstransfer', 'preis' => $ preis, 'business' => business); }} else {$ this-> error ('Cash-Abhebungsinformationsfehler!'); }} // Überprüfung ist erforderlich, sonst {$ this-> resentModel-> add ($ data); $ this-> ordnen ('Erfolg', 2); }}Bietet die Funktion von Unternehmen, die Benutzer zu zahlen, Unternehmen bei der Zahlung der API -Schnittstelle zu unterstützen oder die Zahlung über die Webfunktion WeChat Payment Merchant Platform zu betreiben.
Freundliche Tipps:
◆ Zahlen Sie an denselben realen Benutz
◆ Zahlung an denselben nicht realen Benutzer mit einer einzigen Transaktion und einem einzigen täglichen Limit von 2000/2000
◆ Das Gesamtzahlungslimit für einen Händler am selben Tag beträgt 100 W
◆ Es werden nur Anhänger unterstützt, die an die Händlernummer gebunden wurden.
◆ Für die Zielnutzer der Zahlung können Benutzer, die durch WeChat Pay authentifiziert wurden, die Funktion zur Überprüfung ihrer echten Namen liefern. Benutzer, die sich nicht mit echten Namen authentifiziert haben, können nicht überprüfen. Unternehmen können den Überprüfungstyp basierend auf der Sicherheitsniveau ihres eigenen Geschäfts auswählen.
◆ Der Zahlungsbetrag muss weniger als oder gleich dem für den Händler verfügbaren Betrag sein.
◆ Für bezahlte Aufzeichnungen können Unternehmen die entsprechenden Daten über Enterprise -Zahlungsabfrage anzeigen.
Ankunft
Die Zahlungsfonds geben die Änderung des Zielbenutzers (WeChat-i-Wallet-Change) ein. WeChat Pay wird über eine Änderung des Kontos informiert, und die Änderungeneinnahmen und die Ausgabendaten werden angezeigt.
Freundliche Tipps:
Für die historische Client -Version des Änderungskontos werden die Mittel das Red Envelope -Konto des Benutzers eingeben, und WeChat Pay benachrichtigt Benutzer ohne Nachrichten, und Unternehmen können sich dafür entscheiden, Benutzer selbst zu erreichen.
Schnittstellenlink: https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers
Ist ein Zertifikat erforderlich
Für eine Anfrage ist ein Zwei-Wege-Zertifikat erforderlich.
Datenbeispiel:
<xml> <mch_appid> wxe062425f740c30d8 </mch_appid> <mchid> 10000098 </mchid> <nonce_str> 3pg2j4iltkch16cq2502si8znmt M67Vs </nonce_str> <partner_trade_no> 100000982014120919616 </partner_trade_no> <openID> oho4gt7wvpxit1a9gjfamymiz Y1s </openID> <check_name> option_check </check_name> <re_user_name> zhang sAN </re_user_name> <betrag> 100 </poly> <desc> Happy Urlaub! </desc> <spbill_create_ip> 10.2.3.10 </spbill_create_ip> <Nign> c97bdbacf37622775366f38b629f45e3 </sign> </xml>
Erfolgreiches Beispiel:
<xml> <return_code> <! [CDATA [Erfolg]]> </return_code> <return_msg> <! [CDATA []]> </return_msg> <mch_appid> <! [CDATA [WXEC38B8FF840 BD989]]> </mch_appid> <mchid> <! [CDATA [10013274]]> </mchid> <Device_Info> <! [CDATA []]> </erager_info> <nonce_str> <! [CDATA [lxudzmnr jpcxzxlx0q]]> </nonce_str> <result_code> <! [CDATA [Erfolg]]> </result_code> <partner_trade_no> <! [CDATA [100135742015051915265824 41]]> </partner_trade_no> <payment_no> <! [CDATA [1000018301201505190181489473]]> </payment_no> <payment_time> <! [CDATA [2015-05-19 15:26:59]]> </payment_time> </xml>
Fehlerbeispiel:
<xml> <return_code> <! [cdata [fail]]> </return_code> <return_msg> <! [CDATA [System ist beschäftigt, bitte versuchen Sie es erneut später.]]> </return_msg> <result_code> <! [cdata [fail]]> </result_code> <err_code> <! [cdata [systemError]> </err_code> <Err_code_des> <! [CDATA [System ist beschäftigt, bitte versuchen
For more information about PHP related content, please check out the topics of this site: "Summary of PHP WeChat Development Skills", "Summary of PHP encoding and transcoding operation techniques", "Summary of PHP network programming techniques", "Introduction to PHP basic syntax tutorial", "Summary of php string usage", "Introduction to PHP database operation tutorial" and "Summary of common php database Betriebstechniken "
Ich hoffe, dass die detaillierte Erklärung der Methode zur Implementierung der in diesem Artikel beschriebenen WeChat Enterprise -Konto -Zahlung für alle hilfreich sein wird, um PHP -Programme zu lernen. Ich hoffe, jeder wird weiterhin den falschen neuen Technologiekanal unterstützen!