Ö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/