Zahlungs-SDK (V3)
Projektadresse
https://github.com/yansongda/pay
Installation
composer require yansongda/pay ~3.0
Benutzung
Hinweis: Die folgende Dokumentation ist auf die Sandbox-Umgebung von Alipay ausgerichtet. Bei Fragen bitte umgehend Feedback geben!
Konfigurationsdatei
Angenommen, es gibt folgende Konfigurationsdatei config/payment.php
<?php
/**
* @desc Zahlungs-Konfigurationsdatei
* @author Tinywan(ShaoBo Wan)
* @date 2022/03/11 20:15
*/
return [
'_force' => true, // Hinweis, dies muss true sein
'alipay' => [
'default' => [
// Pflichtfeld - vom Alipay zugewiesene app_id
'app_id' => '20160909004708941',
// Pflichtfeld - private Anwendungsschlüssel, String oder Pfad
'app_secret_cert' => 'MIIEpAIBAAKCxxxxxxxxxxxxxxP4r3m4OUmD/+XDgCg==',
// Pflichtfeld - Pfad zum öffentlichen Anwendungszertifikat
'app_public_cert_path' => base_path().'/payment/appCertPublicKey_2016090900470841.crt',
// Pflichtfeld - Pfad zum öffentlichen Alipay-Zertifikat
'alipay_public_cert_path' => base_path().'/payment/alipayCertPublicKey_RSA2.crt',
// Pflichtfeld - Pfad zum Alipay-Wurzelzertifikat
'alipay_root_cert_path' => base_path().'/payment/alipayRootCert.crt',
// Optional - Synchrone Rückrufadresse
'return_url' => 'https://webman.tinywan.cn/payment/alipay-return',
// Optional - Asynchrone Rückrufadresse
'notify_url' => 'https://webman.tinywan.cn/payment/alipay-notify',
// Optional - Anbieter-ID im Anbieter-Modus, wenn mode auf Pay::MODE_SERVICE gesetzt ist
'service_provider_id' => '',
// Optional - Standardmäßig im Normalmodus. Optionen: MODE_NORMAL, MODE_SANDBOX, MODE_SERVICE
'mode' => \Yansongda\Pay\Pay::MODE_SANDBOX,
]
],
'wechat' => [
'default' => [
// Pflichtfeld - Händler-ID, im Anbieter-Modus die Händler-ID des Anbieters
'mch_id' => '',
// Pflichtfeld - Händlergeheimschlüssel
'mch_secret_key' => '',
// Pflichtfeld - privater Händler-Schlüssel, String oder Pfad
'mch_secret_cert' => '',
// Pflichtfeld - Pfad zum öffentlichen Händlerzertifikat
'mch_public_cert_path' => '',
// Pflichtfeld
'notify_url' => 'https://yansongda.cn/wechat/notify',
// Optional - app_id des öffentlichen Kontos
'mp_app_id' => '2016082000291234',
// Optional - app_id der Mini-App
'mini_app_id' => '',
// Optional - app_id der App
'app_id' => '',
// Optional - app_id des kombinierten Apps
'combine_app_id' => '',
// Optional - kombinierten Händler-ID
'combine_mch_id' => '',
// Optional - app_id des Unterkontos im Anbieter-Modus
'sub_mp_app_id' => '',
// Optional - app_id der Unter-App im Anbieter-Modus
'sub_app_id' => '',
// Optional - app_id der Unter-Mini-App im Anbieter-Modus
'sub_mini_app_id' => '',
// Optional - Händler-ID des Unteranbieters im Anbieter-Modus
'sub_mch_id' => '',
// Optional - Pfad zum öffentlichen WeChat-Zertifikat, optional, wird dringend empfohlen, diesen Parameter im php-fpm-Modus zu konfigurieren
'wechat_public_cert_path' => [
'45F59D4DABF31918AFCEC556D5D2C6E376675D57' => __DIR__.'/Cert/wechatPublicKey.crt',
],
// Optional - Standardmäßig im Normalmodus. Optionen: MODE_NORMAL, MODE_SERVICE
'mode' => \Yansongda\Pay\Pay::MODE_SANDBOX,
]
],
'logger' => [
'enable' => false,
'file' => runtime_path().'/logs/alipay.log',
'level' => 'debug', // In Produktionsumgebungen wird empfohlen, den Level auf info zu ändern, in Entwicklungsumgebungen auf debug
'type' => 'single', // optional, auch daily möglich.
'max_file' => 30, // optional, gilt nur, wenn type auf daily gesetzt ist, standardmäßig 30 Tage
],
'http' => [ // optional
'timeout' => 5.0,
'connect_timeout' => 5.0,
// Weitere Konfigurationsoptionen finden Sie in [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
]
];
Hinweis: Der Zertifikatspfad ist nicht festgelegt, das obige Beispiel ist im
payment
-Verzeichnis des Frameworks abgelegt.
├── payment
│ ├── alipayCertPublicKey_RSA2.crt
│ ├── alipayRootCert.crt
│ └── appCertPublicKey_2016090900470841.crt
Initialisierung
Direkter Aufruf der Methode config
zur Initialisierung
// Konfigurationsdatei config/payment.php abrufen
$config = config('payment');
Pay::config($config);
Hinweis: Wenn Sie den Alipay-Sandbox-Modus verwenden, denken Sie daran, die Konfigurationsdatei
'mode' => \Yansongda\Pay\Pay::MODE_SANDBOX,
zu aktivieren. Diese Option ist standardmäßig im Normalmodus.
Zahlung (Webseite)
use support\Request;
use Yansongda\Pay\Pay;
/**
* @param Request $request
* @return string
*/
public function payment(Request $request)
{
// 1. Konfiguration initialisieren
Pay::config(config('payment'));
// 2. Webzahlung
$order = [
'out_trade_no' => time(),
'total_amount' => '8888.88',
'subject' => 'webman payment',
'_method' => 'get' // Mit der get-Methode umleiten
];
return Pay::alipay()->web($order)->getBody()->getContents();
}
Asynchroner Rückruf
use support\Request;
use Yansongda\Pay\Pay;
/**
* @desc: „Alipay“ asynchrone Benachrichtigung
* @param Request $request
* @return Response
*/
public function alipayNotify(Request $request): Response
{
// 1. Konfiguration initialisieren
Pay::config(config('payment'));
// 2. Behandlung des Alipay-Rückrufs
$result = Pay::alipay()->callback($request->post());
// ===================================================================================================
// Bitte überprüfen Sie selbst den trade_status und andere Logik, nur wenn der Handelsbenachrichtigungsstatus TRADE_SUCCESS oder TRADE_FINISHED ist, wird Alipay dies als erfolgreiche Zahlung des Käufers anerkennen.
// 1. Der Händler muss überprüfen, ob die out_trade_no der im Händler-System erstellten Bestellnummer entspricht;
// 2. Prüfen, ob der total_amount tatsächlich der tatsächlichen Bestellung entspricht (d.h. dem Betrag, der bei der Erstellung der Händlerbestellung angegeben wurde);
// 3. Überprüfen, ob der seller_id (oder seller_email) in der Benachrichtigung dem entsprechenden Betreiber der out_trade_no entspricht;
// 4. Überprüfen, ob die app_id die des Händlers ist.
// 5. Andere geschäftliche Logik
// ===================================================================================================
// 5. Behandlung des Alipay-Rückrufs
return new Response(200, [], 'success');
}
Hinweis: Verwenden Sie nicht die Rückgabe von
return Pay::alipay()->success();
zur Antwort auf den Alipay-Rückruf. Wenn Sie Middleware verwenden, treten möglicherweise Probleme mit der Middleware auf. Daher müssen Sie die Webman-Antwortklassesupport\Response;
zur Beantwortung an Alipay verwenden.
Synchroner Rückruf
use support\Request;
use Yansongda\Pay\Pay;
/**
* @desc: „Alipay“ synchrone Benachrichtigung
* @param Request $request
* @author Tinywan(ShaoBo Wan)
*/
public function alipayReturn(Request $request)
{
Log::info('„Alipay“ synchrone Benachrichtigung'.json_encode($request->get()));
return 'success';
}
Weitere Inhalte
Besuchen Sie die offizielle Dokumentation https://pay.yansongda.cn/docs/v3/