Ödeme SDK (V3)
Proje Adresi
https://github.com/yansongda/pay
Kurulum
composer require yansongda/pay ~3.0
Kullanım
Açıklama: Aşağıda Alipay sandbox ortamı kullanılarak doküman yazılmıştır, herhangi bir sorun olursa lütfen hızlıca geri bildirimde bulunun!
Yapılandırma Dosyası
Aşağıdaki yapılandırma dosyasının olduğunu varsayalım config/payment.php
<?php
/**
* @desc Ödeme yapılandırma dosyası
* @author Tinywan(ShaoBo Wan)
* @date 2022/03/11 20:15
*/
return [
'_force' => true, // Dikkat, bu kesinlikle true olmalıdır
'alipay' => [
'default' => [
// Zorunlu - Alipay tarafından verilen app_id
'app_id' => '20160909004708941',
// Zorunlu - Uygulama özel anahtarı dizesi veya yol
'app_secret_cert' => 'MIIEpAIBAAKCxxxxxxxxxxxxxxP4r3m4OUmD/+XDgCg==',
// Zorunlu - Uygulama genel anahtar sertifikası yolu
'app_public_cert_path' => base_path().'/payment/appCertPublicKey_2016090900470841.crt',
// Zorunlu - Alipay genel anahtar sertifikası yolu
'alipay_public_cert_path' => base_path().'/payment/alipayCertPublicKey_RSA2.crt',
// Zorunlu - Alipay kök sertifikası yolu
'alipay_root_cert_path' => base_path().'/payment/alipayRootCert.crt',
// İsteğe bağlı - Senkron geri çağırma adresi
'return_url' => 'https://webman.tinywan.cn/payment/alipay-return',
// İsteğe bağlı - Asenkron geri çağırma adresi
'notify_url' => 'https://webman.tinywan.cn/payment/alipay-notify',
// İsteğe bağlı - Hizmet sağlayıcı modu altında hizmet sağlayıcı kimliği, mode Pay::MODE_SERVICE olduğunda bu parametre kullanılır
'service_provider_id' => '',
// İsteğe bağlı - Varsayılan olarak normal moddur. Seçenekler: MODE_NORMAL, MODE_SANDBOX, MODE_SERVICE
'mode' => \Yansongda\Pay\Pay::MODE_SANDBOX,
]
],
'wechat' => [
'default' => [
// Zorunlu - Mağaza numarası, hizmet sağlayıcı modu altında hizmet sağlayıcı mağaza numarası
'mch_id' => '',
// Zorunlu - Mağaza gizli anahtarı
'mch_secret_key' => '',
// Zorunlu - Mağaza özel anahtarı dizesi veya yol
'mch_secret_cert' => '',
// Zorunlu - Mağaza genel anahtar sertifikası yolu
'mch_public_cert_path' => '',
// Zorunlu
'notify_url' => 'https://yansongda.cn/wechat/notify',
// İsteğe bağlı - Mini programın app_id'si
'mp_app_id' => '2016082000291234',
// İsteğe bağlı - Küçük uygulamanın app_id'si
'mini_app_id' => '',
// İsteğe bağlı - Uygulamanın app_id'si
'app_id' => '',
// İsteğe bağlı - Birleştirilmiş app_id
'combine_app_id' => '',
// İsteğe bağlı - Birleştirilmiş mağaza numarası
'combine_mch_id' => '',
// İsteğe bağlı - Hizmet sağlayıcı modu altında alt kamu hesabının app_id'si
'sub_mp_app_id' => '',
// İsteğe bağlı - Hizmet sağlayıcı modu altında alt uygulamanın app_id'si
'sub_app_id' => '',
// İsteğe bağlı - Hizmet sağlayıcı modu altında alt küçük uygulamanın app_id'si
'sub_mini_app_id' => '',
// İsteğe bağlı - Hizmet sağlayıcı modu altında alt mağaza kimliği
'sub_mch_id' => '',
// İsteğe bağlı - WeChat genel anahtar sertifikası yolu, isteğe bağlı, php-fpm modunda bu parametreyi yapılandırmanız şiddetle önerilir
'wechat_public_cert_path' => [
'45F59D4DABF31918AFCEC556D5D2C6E376675D57' => __DIR__.'/Cert/wechatPublicKey.crt',
],
// İsteğe bağlı - Varsayılan olarak normal moddur. Seçenekler: MODE_NORMAL, MODE_SERVICE
'mode' => \Yansongda\Pay\Pay::MODE_SANDBOX,
]
],
'logger' => [
'enable' => false,
'file' => runtime_path().'/logs/alipay.log',
'level' => 'debug', // Üretim ortamında seviye ayarını info, geliştirme ortamında debug olarak ayarlamanız önerilir
'type' => 'single', // isteğe bağlı, günlük olarak seçilebilir.
'max_file' => 30, // isteğe bağlı, type günlük olduğunda geçerlidir, varsayılan 30 gündür
],
'http' => [ // isteğe bağlı
'timeout' => 5.0,
'connect_timeout' => 5.0,
// Daha fazla yapılandırma seçeneği için [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html) belgesine bakınız
]
];
Dikkat: Sertifika dizinleri için herhangi bir düzenleme yoktur, yukarıdaki örnek çerçeve içindeki
payment
dizinine yerleştirilmiştir
├── payment
│ ├── alipayCertPublicKey_RSA2.crt
│ ├── alipayRootCert.crt
│ └── appCertPublicKey_2016090900470841.crt
Başlatma
config
metodunu kullanarak başlatma
// Yapılandırma dosyasını al config/payment.php
$config = config('payment');
Pay::config($config);
Dikkat: Eğer Alipay sandbox modu kullanılıyorsa, yapılandırma dosyasında
'mode' => \Yansongda\Pay\Pay::MODE_SANDBOX,
seçeneğinin açıldığından emin olun, bu seçenek varsayılan olarak normal moddur.
Ödeme (Web)
use support\Request;
use Yansongda\Pay\Pay;
/**
* @param Request $request
* @return string
*/
public function payment(Request $request)
{
// 1. Yapılandırmayı başlat
Pay::config(config('payment'));
// 2. Web ödemesi
$order = [
'out_trade_no' => time(),
'total_amount' => '8888.88',
'subject' => 'webman payment',
'_method' => 'get' // yönlendirme için get yöntemi kullanın
];
return Pay::alipay()->web($order)->getBody()->getContents();
}
Asenkron Geri Çağırma
use support\Request;
use Yansongda\Pay\Pay;
/**
* @desc: 『Alipay』 asenkron bildirim
* @param Request $request
* @return Response
*/
public function alipayNotify(Request $request): Response
{
// 1. Yapılandırmayı başlat
Pay::config(config('payment'));
// 2. Alipay geri çağırma işleme
$result = Pay::alipay()->callback($request->post());
// ===================================================================================================
// Lütfen trade_status durumunu ve diğer mantıkları kontrol edin, yalnızca işlem bildirim durumu TRADE_SUCCESS veya TRADE_FINISHED olduğunda Alipay alıcının başarılı bir şekilde ödeme yaptığını kabul eder.
// 1. Mağaza, bu bildirim verilerindeki out_trade_no'nun mağaza sisteminde oluşturulan sipariş numarası olup olmadığını doğrulamalıdır;
// 2. total_amount'ın gerçekten bu siparişin gerçek tutarı olup olmadığını kontrol edin (yani, mağaza siparişi oluştururkenki tutar);
// 3. Bildirimdeki seller_id (veya seller_email) değerinin out_trade_no ile ilgili işlemci olup olmadığını onaylayın;
// 4. app_id'nin bu mağazaya ait olup olmadığını doğrulayın.
// 5. Diğer iş mantığı durumları
// ===================================================================================================
// 5. Alipay geri çağırma işleme
return new Response(200, [], 'success');
}
Dikkat: Alipay geri çağrısını yanıtlarken eklentinin kendi
return Pay::alipay()->success();
yöntemini kullanmayın; bunları kullanıyorsanız ara katman sorunları ile karşılaşabilirsiniz. Bu yüzden Alipay'e yanıt vermek için webman'ın yanıt sınıfını kullanmalısınız:support\Response;
Senkron Geri Çağırma
use support\Request;
use Yansongda\Pay\Pay;
/**
* @desc: 『Alipay』 senkron bildirim
* @param Request $request
* @author Tinywan(ShaoBo Wan)
*/
public function alipayReturn(Request $request)
{
Log::info('『Alipay』 senkron bildirim'.json_encode($request->get()));
return 'success';
}
Daha Fazla İçerik
Resmi belgelere erişmek için https://pay.yansongda.cn/docs/v3/