Zahlungs-SDK (V3)
Projektadresse
https://github.com/yansongda/pay
Installation
composer require yansongda/pay ^3.0.0
Verwendung
Hinweis: Die folgende Dokumentation basiert auf der Umgebung des Alipay-Sandbox. Wenn Sie Probleme haben, lassen Sie es uns bitte wissen!
Konfigurationsdatei
Angenommen, es gibt folgende Konfigurationsdatei config/payment.php
<?php
/**
* @desc Zahlungskonfigurationsdatei
* @author Tinywan(ShaoBo Wan)
* @date 11.03.2022 20:15
*/
return [
'alipay' => [
'default' => [
// Erforderlich - von Alipay zugewiesene app_id
'app_id' => '20160909004708941',
// Erforderlich - Anwendungs-Privatschlüssel, Zeichenkette oder Pfad
'app_secret_cert' => 'MIIEpAIBAAKCxxxxxxxxxxxxxxP4r3m4OUmD/+XDgCg==',
// Erforderlich - Anwendungsöffentliches Zertifikatpfad
'app_public_cert_path' => base_path().'/payment/appCertPublicKey_2016090900470841.crt',
// Erforderlich - Alipay öffentliches Zertifikatpfad
'alipay_public_cert_path' => base_path().'/payment/alipayCertPublicKey_RSA2.crt',
// Erforderlich - Alipay-Root-Zertifikatpfad
'alipay_root_cert_path' => base_path().'/payment/alipayRootCert.crt',
// Optional - Synchronisationsrückrufadresse
'return_url' => 'https://webman.tinywan.cn/payment/alipay-return',
// Optional - Asynchroner Rückrufadresse
'notify_url' => 'https://webman.tinywan.cn/payment/alipay-notify',
// Optional - Anbieter-ID im Serviceprovider-Modus, bei Verwendung dieses Parameters, wenn mode auf Pay::MODE_SERVICE gesetzt ist
'service_provider_id' => '',
// Optional - Standardmäßig Normalmodus. Kann sein: MODE_NORMAL, MODE_SANDBOX, MODE_SERVICE
'mode' => \Yansongda\Pay\Pay::MODE_SANDBOX,
]
],
'wechat' => [
'default' => [
// Erforderlich - Händlernummer, im Serviceprovider-Modus die Händler-ID des Diensteanbieters
'mch_id' => '',
// Erforderlich - Händlergeheimschlüssel
'mch_secret_key' => '',
// Erforderlich - Händler-Privatschlüssel, Zeichenkette oder Pfad
'mch_secret_cert' => '',
// Erforderlich - Händler öffentliches Zertifikatspfad
'mch_public_cert_path' => '',
// Erforderlich
'notify_url' => 'https://yansongda.cn/wechat/notify',
// Optional - app_id des offiziellen Kontos
'mp_app_id' => '2016082000291234',
// Optional - app_id der Mini-Programme
'mini_app_id' => '',
// Optional - app_id der App
'app_id' => '',
// Optional - kombinierte app_id
'combine_app_id' => '',
// Optional - kombinierter Händlernummer
'combine_mch_id' => '',
// Optional - Im Serviceprovider-Modus, app_id des Sub-Offiziellen-Kontos
'sub_mp_app_id' => '',
// Optional - Im Serviceprovider-Modus, app_id des Sub-App
'sub_app_id' => '',
// Optional - Im Serviceprovider-Modus, app_id des Sub-Mini-Programms
'sub_mini_app_id' => '',
// Optional - Im Serviceprovider-Modus, Sub-Händlernummer
'sub_mch_id' => '',
// Optional - WeChat öffentliches Zertifikatspfad, optional, dringend empfohlen, dass dieser Parameter im PHP-FPM-Modus konfiguriert wird
'wechat_public_cert_path' => [
'45F59D4DABF31918AFCEC556D5D2C6E376675D57' => __DIR__.'/Cert/wechatPublicKey.crt',
],
// Optional - Standardmäßig Normalmodus. Kann sein: MODE_NORMAL, MODE_SERVICE
'mode' => \Yansongda\Pay\Pay::MODE_SANDBOX,
]
],
'logger' => [
'enable' => false,
'file' => runtime_path().'/logs/alipay.log',
'level' => 'debug', // Empfohlene Einstellungen für die Produktionsumgebung: info, für die Entwicklungsumgebung: debug
'type' => 'single', // Optional, täglich wählbar.
'max_file' => 30, // Optional, wirksam, wenn type auf täglich gesetzt ist, standardmäßig 30 Tage
],
'http' => [ // optional
'timeout' => 5.0,
'connect_timeout' => 5.0,
// Weitere Konfigurationsoptionen finden Sie unter [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
],
'_force' => true,
];
Hinweis: Das Verzeichnis für Zertifikate ist nicht vorgeschrieben, das obige Beispiel befindet sich im Verzeichnis
payment
des Frameworks
├── payment
│ ├── alipayCertPublicKey_RSA2.crt
│ ├── alipayRootCert.crt
│ └── appCertPublicKey_2016090900470841.crt
Initialisierung
Verwenden Sie die config
-Methode, um direkt zu initialisieren:
// Holen Sie sich die Konfigurationsdatei config/payment.php
$config = Config::get('payment');
Pay::config($config);
Hinweis: Wenn sich das Alipay im Sandbox-Modus befindet, stellen Sie sicher, dass Sie die Konfigurationsdatei öffnen
'mode' => \Yansongda\Pay\Pay::MODE_SANDBOX,
, diese Option ist standardmäßig auf den Normalmodus gesetzt.
Zahlung (Web)
use support\Request;
use Webman\Config;
use Yansongda\Pay\Pay;
/**
* @param Request $request
* @return string
*/
public function payment(Request $request)
{
// 1. Holen Sie sich die Konfigurationsdatei config/payment.php
$config = Config::get('payment');
// 2. Konfiguration initialisieren
Pay::config($config);
// 3. Web-Zahlung
$order = [
'out_trade_no' => time(),
'total_amount' => '8888.88',
'subject' => 'webman Zahlung',
'_method' => 'get' // Verwendung der GET-Methode zur Umleitung
];
return Pay::alipay()->web($order)->getBody()->getContents();
}
Rückruf
Asynchroner Rückruf
use support\Request;
use Webman\Config;
use Yansongda\Pay\Pay;
/**
* @desc: 『Alipay』Asynchroner Rückruf
* @param Request $request
* @return Response
*/
public function alipayNotify(Request $request): Response
{
// 1. Holen Sie sich die Konfigurationsdatei config/payment.php
$config = Config::get('payment');
// 2. Konfiguration initialisieren
Pay::config($config);
// 3. Alipay-Rückrufverarbeitung
$result = Pay::alipay()->callback($request->post());
// ===================================================================================================
// Bitte überprüfen Sie selbst den trade_status und führen Sie weitere Logikprüfungen durch. Alipay erkennt eine erfolgreich abgeschlossene Zahlung erst, wenn der Transaktionsbenachrichtigungsstatus auf TRADE_SUCCESS oder TRADE_FINISHED gesetzt ist.
// 1. Der Händler muss prüfen, ob die out_trade_no in den Benachrichtigungsdaten die Bestellnummer ist, die im Händlersystem erstellt wurde;
// 2. Überprüfen Sie, ob total_amount tatsächlich der tatsächliche Betrag der Bestellung ist (d. h. der beim Händler erstellte Betrag);
// 3. Überprüfen Sie, ob seller_id (oder seller_email) in der Benachrichtigung für die betreffende Transaktion die zugehörige Partei ist;
// 4. Überprüfen Sie, ob app_id dem Händler selbst gehört.
// 5. weitere geschäftliche Logik
// ===================================================================================================
// 5. Alipay-Rückrufverarbeitung
return new Response(200, [], 'Erfolg');
}
Hinweis: Die Antwort auf den Alipay-Rückruf kann nicht mit
return Pay::alipay()->success();
des Plugins erfolgen, da dies zu Middleware-Problemen führen würde. Daher sollten Sie für die Alipay-Antwort die Response-Klasse von Webman verwendensupport\Response;
Synchroner Rückruf
use support\Request;
use Yansongda\Pay\Pay;
/**
* @desc: 『Alipay』Synchroner Rückruf
* @param Request $request
* @author Tinywan(ShaoBo Wan)
*/
public function alipayReturn(Request $request)
{
Log::info('『Alipay』Synchroner Rückruf'.json_encode($request->get()));
return 'Erfolg';
}
Vollständiger Beispielcode
https://github.com/Tinywan/webman-admin/blob/main/app/controller/Test.php
Weitere Informationen
Besuchen Sie die offizielle Dokumentation unter https://pay.yansongda.cn/docs/v3/