Die v3-Version unterscheidet sich auf der untersten Ebene stark von der v2-Version. Die Infrastruktur wurde neu gestaltet, um die Erweiterung einfacher und komfortabler zu machen.
Nachdem ich Alipay und WeChat Pay viele Male entwickelt hatte, entwickelte ich natürlich ein Gefühl des Ekels und der Faulheit. Ich wollte im Internet nach verwandten Rädern suchen, fand aber nie eines, das ich zufriedenstellend fand, oder es war zu schwer zu verstehen. Entweder ist die Dateistruktur zu chaotisch und Sie müssen die Ärmel hochkrempeln und es selbst erledigen.
Willkommen Star, willkommen PR!
Bitte senden Sie hier das Hyperf-Erweiterungspaket
Bitte senden Sie das Laravel-Erweiterungspaket hier
Bitte senden Sie das yii-Erweiterungspaket hierher
Multi-Tenant-Unterstützung
Swoole-Unterstützung
Flexibler Steckmechanismus
Umfangreiches Ereignissystem
Die Benennung ist weniger verwirrend
Verstecken Sie Details, auf die Entwickler nicht achten müssen
Entwickelt basierend auf den neuesten APIs von Alipay und WeChat
Hochabstrakte Klassen, die die mühsame Schreibweise von JSON und XML überflüssig machen
Die Dateistruktur ist klar und leicht verständlich. Sie können nach Belieben Zahlungsgateways hinzufügen, die nicht in diesem Projekt enthalten sind.
Methoden werden eleganter verwendet und es besteht keine Notwendigkeit, den Zweck dieser seltsamen Methodennamen oder Klassennamen zu untersuchen.
Es gibt eine integrierte Methode zum automatischen Abrufen des öffentlichen WeChat-Zertifikats, sodass Sie sich nicht mehr um den Erhalt des Zertifikats zum ersten Mal kümmern müssen.
Durch die Einhaltung von PSR2, PSR3, PSR4, PSR7, PSR11, PSR14, PSR18 und anderen Standards können Sie problemlos in Ihr Framework integrieren
https://pay.yansongda.cn/docs/v3/overview/planning
https://pay.yansongda.cn
yansongda/pay ist zu 100 % mit allen Funktionen von Alipay/WeChat/UnionPay (einschließlich Dienstanbieterfunktionen) kompatibel und kann über den „Plug-in-Mechanismus“ eingeführt werden.
Gleichzeitig unterstützt das SDK direkt die folgenden integrierten Plug-Ins. Weitere Informationen finden Sie in der Dokumentation.
Computerzahlung
Mobile Website-Zahlung
APP-Zahlung
Bezahlen Sie mit Karte
Zum Bezahlen den Code scannen
Kontoübertragung
Mini-Programmzahlung
...
Offizielle Kontozahlung
Mini-Programmzahlung
H5-Zahlung
Zum Bezahlen den Code scannen
APP-Zahlung
Bezahlen Sie mit Karte
...
Mini-Programmzahlung
...
Mobile Website-Zahlung
Zahlung für Computer-Websites
Bezahlen Sie mit Karte
Zum Bezahlen den Code scannen
...
Integrierte Scancode-Zahlung (WeChat, Alipay, UnionPay, E-Finance)
...
Komponist benötigt yansongda/pay:~3.7.0 -vvv
<?phpnamespace AppHttpControllers;verwenden Sie YansongdaPayPay;Klasse AlipayController {protected $config = ['alipay' => ['default' => [// Erforderlich - von Alipay zugewiesene app_id 'app_id' => '2016082000295641', / Erforderlich - Zeichenfolge oder Pfad des privaten Schlüssels der Anwendung 'app_secret_cert' => '89iZ2iC16H6/6a3YcP+hDZUjiNGQx9cuwi9eJyykvcwhD...',// Erforderlich – Pfad des öffentlichen Schlüsselzertifikats der Anwendung 'app_public_cert_path' => '/Users/yansongda/pay/cert/appCertPublicKey_2016082000295641.crt',// Erforderlich – Alipay-Public-Key-Zertifikatpfad „alipay_public_cert_path“ => „/Users/yansongda/pay/cert/alipayCertPublicKey_RSA2.crt“,// Erforderlich – Alipay-Stammzertifikatpfad „alipay_root_cert_path“ => „/Users/yansongda/pay/cert/ alipayRootCert.crt','return_url' => 'https://yansongda.cn/alipay/return','notify_url' => 'https://yansongda.cn/alipay/notify',// Optional – Autorisierungstoken für Drittanbieteranwendungen 'app_auth_token' => '' ,// Optional – Dienstanbieter-ID im Dienstanbietermodus. Verwenden Sie diesen Parameter „service_provider_id“ =>, wenn der Modus Pay::MODE_SERVICE ist '',// Optional – standardmäßig im Normalmodus. Optionale Optionen sind: MODE_NORMAL, MODE_SANDBOX, MODE_SERVICE'mode' => Pay::MODE_NORMAL, ], ], 'logger' => [ // optional'enable' => false,'file' => './logs/alipay.log','level' => 'info', // Es wird empfohlen, die Produktion durchzuführen Umgebungsebene wird an Info angepasst, die Entwicklungsumgebung ist debug 'type' => 'single', // optional, optional daily.'max_file' => 30, // optional, gültig, wenn Typ täglich ist, Standard 30 Tage], 'http' = > [ // optional'timeout' => 5.0,'connect_timeout' => 5.0, // Weitere Konfigurationselemente finden Sie unter [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html )] , ];öffentliche Funktion web() { Pay::config($this->config); $result = Pay::alipay()->web(['out_trade_no' => ''.time(),'total_amount' => '0.01','subject' => 'yansongda test-1', ]); return $result; }öffentliche Funktion returnCallback() { Pay::config($this->config); $data = Pay::alipay()->callback(); // Ja, so einfach ist die Signaturüberprüfung! // Bestellnummer: $data->out_trade_no// Alipay-Transaktionsnummer: $data->trade_no// Gesamtbestellmenge: $data->total_amount} öffentliche Funktion notifyCallback() { Pay::config($this->config); try{$data = Pay::alipay()->callback(); // Ja, so einfach ist die Signaturüberprüfung! // Bitte beurteilen Sie selbst den Handelsstatus und andere Logik. In der Geschäftsbenachrichtigung von Alipay betrachtet Alipay die Zahlung des Käufers nur dann als erfolgreich, wenn der Transaktionsbenachrichtigungsstatus TRADE_SUCCESS oder TRADE_FINISHED ist. // 1. Der Händler muss überprüfen, ob out_trade_no in den Benachrichtigungsdaten die im Händlersystem erstellte Bestellnummer ist // 2. Bestimmen Sie, ob es sich bei total_amount tatsächlich um den tatsächlichen Betrag der Bestellung handelt (d. h. um den Betrag, den der Händler erhalten hat). Bestellung wurde erstellt); // 3 , Überprüfen Sie die Seller_ID (oder Seller_Email) in der Benachrichtigung Ob es sich um den entsprechenden Operator des out_trade_no-Dokuments handelt (manchmal kann ein Händler mehrere seller_id/seller_email haben); // 4. Überprüfen Sie, ob es sich bei der app_id um den Händler selbst handelt. // 5. Andere Geschäftslogiksituationen} Catch (Throwable $e) {dd($e); }return Pay::alipay()->success(); } }
<?phpnamespace AppHttpControllers;verwende YansongdaPayPay;Klasse WechatController {protected $config = ['wechat' => ['default' => [// Erforderlich - Händlernummer 'mch_id' => '', // Optional - privater Schlüssel des v2-Händlers 'mch_secret_key_v2' => '', // Erforderlich – geheimer v3-Händlerschlüssel „mch_secret_key“ => '', // Erforderlich – privater Händlerschlüssel Zeichenfolge oder Pfad 'mch_secret_cert' => '',// Erforderlich – Pfad zum Zertifikat des öffentlichen Schlüssels des Händlers 'mch_public_cert_path' => '',// Erforderlich 'notify_url' => 'https://yansongda.cn/wechat/ notify', // Optional – die app_id des offiziellen Kontos „mp_app_id“ => '',// Optional – die app_id des Miniprogramms app_id'mini_app_id' => '',// Optional - die app_id der App 'app_id' => '',// Optional - die app_id des unteroffiziellen Kontos im Dienstanbietermodus 'sub_mp_app_id' => '', // Optional – Im Dienstanbietermodus die app_id der Unter-App „sub_app_id“ => '', // Optional – Im Dienstanbietermodus die app_id der Unter-App app_id'sub_mini_app_id' => '',// Optional – Im Dienstanbietermodus, Unterhändler-ID'sub_mch_id' => '',// Optional – Pfad des öffentlichen Schlüsselzertifikats der WeChat-Plattform, optional, PHP-FPM-Modus wird dringend empfohlen Konfigurieren Sie diesen Parameter unter „wechat_public_cert_path“ => ['45F59D4DABF31918AFCEC556D5D2C6E376675D57' => __DIR__.'/Cert/wechatpay_45F***D57.pem', ], // Optional – standardmäßig im Normalmodus. Optionale Optionen sind: MODE_NORMAL, MODE_SERVICE'mode' => Pay::MODE_NORMAL, ] ],'logger' => [ // optional'enable' => false,'file' => './logs/wechat.log','level' => 'info', // Es wird empfohlen, die Produktion durchzuführen Umgebungsebene wird an Info angepasst, die Entwicklungsumgebung ist debug 'type' => 'single', // optional, optional daily.'max_file' => 30, // optional, gültig, wenn Typ täglich ist, Standard 30 Tage], 'http' = > [ // optional'timeout' => 5.0,'connect_timeout' => 5.0, // Weitere Konfigurationselemente finden Sie unter [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html )] , ];öffentlicher Funktionsindex() { Pay::config($this->config); $order = ['out_trade_no' => time().'','description' => 'subject-test','amount' => [ 'total' => 1, ],'payer' => [ 'openid' => 'onkVf1FjWS5SBxxxxxxxx', ], ];$pay = Pay::wechat()->mp($order);// $pay->appId// $pay->timeStamp// $pay->nonceStr// $pay->package// $ pay->signType}public function callback() { Pay::config($this->config); try{$data = Pay::wechat()->callback(); // Ja, so einfach ist die Signaturüberprüfung! } Catch (Throwable $e) {dd($e); } return Pay::wechat()->success(); } }
<?phpnamespace AppHttpControllers;verwenden Sie YansongdaPayPay;Klasse DouyinController {protected $config = ['douyin' => ['default' => [// Optional-Händlernummer // Douyin Open Platform --> Anwendungsdetails --> Zahlungsinformationen --> Produktverwaltung --> Händlernr. 'mch_id' => '73744242495132490630', // Erforderlich – Zahlungstoken, wird für die Rückrufsignatur der Zahlung verwendet // Douyin Open Platform –> Anwendungsdetails --> Zahlungsinformationen --> Zahlungseinstellungen --> Token (Token) 'mch_secret_token' => 'douyin_mini_token', // Erforderlich - Zahlungs-SALT, verwendet für die Zahlungssignatur // Douyin Open Platform --> Anwendungsdetails --> Zahlungsinformationen -> Zahlungseinstellungen -> SALT'mch_secret_salt' => 'oDxWDBr4U7FAAQ8hnGDm29i4A6pbTMDKme4WLLvA',//Erforderlich – Miniprogramm app_id// Douyin Open Platform –> Anwendungsdetails –> Zahlungsinformationen –> Zahlungseinstellungen –> Miniprogramm-App-ID „mini_app_id“ => „tt226e54d3bd581bf801“,// Optional – Douyin Open Platform Service Provider-ID „thirdparty_id“ => '', // Optional – Douyin-Zahlungsrückrufadresse „notify_url“ => „https://yansongda.cn/douyin/notify“, ], ],'logger' => [ // optional'enable' => false,'file' => './logs/alipay.log','level' => 'info', // Es wird empfohlen, die Produktion durchzuführen Umgebungsebene wird an Info angepasst, die Entwicklungsumgebung ist debug 'type' => 'single', // optional, optional daily.'max_file' => 30, // optional, gültig, wenn Typ täglich ist, Standard 30 Tage], 'http' = > [ // optional'timeout' => 5.0,'connect_timeout' => 5.0, // Weitere Konfigurationselemente finden Sie unter [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html )] , ];öffentliche Funktion pay() { Pay::config($this->config); $result = Pay::douyin()->mini(['out_order_no' => date('YmdHis').mt_rand(1000, 9999),'total_amount' => 1,'subject' => 'Yan Songda- test - subject - 01','body' => 'Yan Songda - test - body - 01','valid_time' => 600,'expand_order_info' => json_encode(['original_delivery_fee' => 15,'actual_delivery_fee' => 10]) ]); return $result; }public function callback() { Pay::config($this->config); try{$data = Pay::douyin()->callback(); // Ja, so einfach ist die Signaturüberprüfung! } Catch (Throwable $e) {dd($e) }return Pay::douyin()->success(); } }
<?phpnamespace AppHttpControllers;verwende YansongdaPayPay;Klasse JsbController {protected $config = ['jsb' => ['default' => [// Servicecode 'svr_code' => '',// Erforderlich - Partner-ID 'partner_id' => '',// Erforderlich -Öffentlich und private Schlüsselpaarnummer 'public_key_code' => '00', // Erforderlich – privater Händlerschlüssel (verschlüsselte Signatur) 'mch_secret_cert_path' => '',//Erforderlich-Public-Key-Zertifikatspfad des Händlers (bereitgestellt von der Bank of Jiangsu zur Signaturüberprüfung)'mch_public_cert_path' => '',//Erforderlich-Öffentlicher Schlüssel der Bank of Jiangsu (wird zum Entschlüsseln der von der Bank of Jiangsu zurückgegebenen Daten verwendet). Jiangsu) 'jsb_public_cert_path' => '', // Zahlungsbenachrichtigungsadresse 'notify_url' => '', // Optional – der Standard ist der normale Modus. Optionale Optionen sind: MODE_NORMAL: offizielle Umgebung, MODE_SANDBOX: Testumgebung 'mode' => Pay::MODE_NORMAL, ] ],'logger' => [ // optional'enable' => false,'file' => './logs/epay.log','level' => 'info', // Es wird empfohlen, dass die Produktion Umgebungsebene wird an Info angepasst, die Entwicklungsumgebung ist debug 'type' => 'single', // optional, optional daily.'max_file' => 30, // optional, gültig, wenn Typ täglich ist, Standard 30 Tage], 'http' = > [ // optional'timeout' => 5.0,'connect_timeout' => 5.0, // Weitere Konfigurationselemente finden Sie unter [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html )] , ];öffentlicher Funktionsindex() { Pay::config($this->config); $order = ['outTradeNo' => time().'','proInfo' => 'subject-test','totalFee'=> 1, ];$pay = Pay::jsb()->scan($order); }öffentliche Funktion notifyCallback() { Pay::config($this->config);try{$data = Pay::jsb()->callback(); // Ja, so einfach ist die Signaturüberprüfung! } Catch (Throwable $e) {dd($e); } return Pay::jsb()->success(); } }
Aufgrund der Einschränkungen der Test- und Nutzungsumgebung wurden in diesem Projekt nur die relevanten Zahlungsgateways „Alipay“, „WeChat Pay“, „Douyin Pay“, „UnionPay“ und „Jiangsu Bank“ entwickelt.
Wenn Sie Bedarf an anderen Zahlungsgateways haben oder Code finden, der in diesem Projekt verbessert werden muss, können Sie Fork gerne nutzen und eine PR einreichen!
MIT