Versi v3 sangat berbeda dengan versi v2 di tingkat bawah. Infrastruktur telah didesain ulang agar lebih mudah diperluas dan lebih nyaman digunakan.
Setelah mengembangkan Alipay dan WeChat Pay berkali-kali, tentu saja rasa jijik dan malas muncul kembali. Saya ingin mencari roda terkait secara online, tetapi saya tidak pernah menemukan roda yang saya rasa puas, atau terlalu sulit untuk dipahami. untuk digunakan. Entah struktur filenya terlalu berantakan, dan Anda harus menyingsingkan lengan baju dan melakukannya sendiri.
Selamat datang Bintang, selamat datang PR!
Silakan kirim paket ekstensi hyperf di sini
Silakan kirim paket ekstensi laravel di sini
Silakan kirim paket ekspansi yii ke sini
Dukungan multi-penyewa
Dukungan swoole
Mekanisme plug-in yang fleksibel
Sistem acara yang kaya
Penamaan tidak terlalu membingungkan
Sembunyikan detail yang tidak perlu diperhatikan oleh pengembang
Dikembangkan berdasarkan API terbaru Alipay dan WeChat
Kelas yang sangat abstrak, menghilangkan kesulitan mengeja json dan xml
Struktur file jelas dan mudah dipahami. Anda dapat menambahkan gateway pembayaran yang tidak termasuk dalam proyek ini sesuka Anda.
Metode lebih elegan untuk digunakan, dan Anda tidak perlu lagi mempelajari untuk apa nama metode atau nama kelas yang aneh itu.
Terdapat metode bawaan untuk mendapatkan sertifikat publik WeChat secara otomatis, sehingga Anda tidak perlu lagi khawatir untuk mendapatkan sertifikat untuk pertama kali.
Mematuhi PSR2, PSR3, PSR4, PSR7, PSR11, PSR14, PSR18 dan standar lainnya, Anda dapat dengan mudah berintegrasi dengan kerangka kerja Anda
https://pay.yansongda.cn/docs/v3/overview/planning
https://pay.yansongda.cn
yansongda/pay 100% kompatibel dengan semua fungsi Alipay/WeChat/UnionPay (termasuk fungsi penyedia layanan) dan dapat diperkenalkan melalui "mekanisme plug-in".
Pada saat yang sama, SDK secara langsung mendukung plugin bawaan berikut. Silakan lihat dokumentasi untuk detailnya.
Pembayaran komputer
Pembayaran situs web seluler
pembayaran aplikasi
Bayar dengan kartu
Pindai kode untuk membayar
Transfer akun
Pembayaran program mini
...
Pembayaran akun resmi
Pembayaran program mini
pembayaran H5
Pindai kode untuk membayar
pembayaran aplikasi
Bayar dengan kartu
...
Pembayaran program mini
...
Pembayaran situs web seluler
Pembayaran situs web komputer
Bayar dengan kartu
Pindai kode untuk membayar
...
Pembayaran kode pindaian terintegrasi (WeChat, Alipay, UnionPay, e-finance)
...
komposer memerlukan yansongda/bayar:~3.7.0 -vvv
<?phpnamespace AppHttpControllers;gunakan YansongdaPayPay;kelas AlipayController {protected $config = ['alipay' => ['default' => [// Diperlukan - app_id ditetapkan oleh Alipay 'app_id' => '2016082000295641', // Diperlukan - string kunci pribadi aplikasi atau jalur 'app_secret_cert' => '89iZ2iC16H6/6a3YcP+hDZUjiNGQx9cuwi9eJyykvcwhD...',// Diperlukan - jalur sertifikat kunci publik aplikasi 'app_public_cert_path' => '/Users/yansongda/pay/cert/appCertPublicKey_2016082000295641.crt',// Diperlukan - jalur sertifikat kunci publik Alipay 'alipay_public_cert_path' => '/Users/yansongda/pay/cert/alipayCertPublicKey_RSA2.crt',// Diperlukan - jalur sertifikat akar Alipay 'alipay_root_cert_path' => '/Users/yansongda/pay/ cert/ alipayRootCert.crt','return_url' => 'https://yansongda.cn/alipay/return','notify_url' => 'https://yansongda.cn/alipay/notify',// Opsional - token otorisasi aplikasi pihak ketiga 'app_auth_token' => '' ,// Opsional - id penyedia layanan dalam mode penyedia layanan, gunakan parameter ini 'service_provider_id' => ketika modenya adalah Bayar::MODE_SERVICE '',// Opsional - default ke mode normal. Opsi opsionalnya adalah: MODE_NORMAL, MODE_SANDBOX, MODE_SERVICE'mode' => Bayar::MODE_NORMAL, ], ], 'logger' => [ // opsional'enable' => false,'file' => './logs/alipay.log','level' => 'info', // Direkomendasikan agar produksi tingkat lingkungan disesuaikan dengan info, lingkungan pengembangan adalah debug 'type' => 'single', // opsional, opsional setiap hari.'max_file' => 30, // opsional, valid jika tipenya harian, default 30 hari], 'http' = > [ // opsional'timeout' => 5.0,'connect_timeout' => 5.0, // Untuk item konfigurasi lebih lanjut, silakan merujuk ke [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html )] , ];fungsi publik web() { Bayar::config($ini->config); $hasil = Bayar::alipay()->web(['out_trade_no' => ''.time(),'total_amount' => '0,01','subyek' => 'tes yansongda-1', ]); mengembalikan $hasil; }fungsi publik returnCallback() { Pay::config($this->config); $data = Pay::alipay()->callback(); // Ya, verifikasi tanda tangan sesederhana itu! // Nomor pesanan: $data->out_trade_no// Nomor transaksi Alipay: $data->trade_no// Total jumlah pesanan: $data->total_amount} fungsi publik notifyCallback() { Pay::config($this->config); try{$data = Pay::alipay()->callback(); // Ya, verifikasi tanda tangan sesederhana itu! // Silakan buat penilaian Anda sendiri berdasarkan trade_status dan logika lainnya. Dalam notifikasi bisnis Alipay, Alipay akan menganggap pembayaran pembeli berhasil hanya jika status notifikasi transaksi adalah TRADE_SUCCESS atau TRADE_FINISHED. // 1. Merchant perlu memverifikasi apakah out_trade_no dalam data notifikasi adalah nomor pesanan yang dibuat di sistem merchant; // 2. Menentukan apakah total_amount memang merupakan jumlah pesanan sebenarnya (yaitu, jumlah saat merchant pesanan telah dibuat); // 3 , Verifikasi seller_id (atau seller_email) di notifikasi Apakah itu operator yang sesuai dari dokumen out_trade_no (terkadang, pedagang mungkin memiliki beberapa seller_id/seller_email); // 5. Situasi logika bisnis lainnya} catch (Throwable $e) {dd($e); }pengembalian Bayar::alipay()->sukses(); } }
<?phpnamespace AppHttpControllers;gunakan YansongdaPayPay;kelas WechatController {dilindungi $config = ['wechat' => ['default' => [// Diperlukan - nomor pedagang 'mch_id' => '', // Opsional - kunci pribadi pedagang v2 'mch_secret_key_v2' => '', // Diperlukan - kunci rahasia pedagang v3 'mch_secret_key' => '', // Diperlukan - Kunci pribadi pedagang String atau jalur 'mch_secret_cert' => '',// Diperlukan - jalur sertifikat kunci publik pedagang 'mch_public_cert_path' => '',// Diperlukan 'notify_url' => 'https://yansongda.cn/wechat/ notify', // Opsional - app_id dari akun resmi 'mp_app_id' => '',// Opsional - app_id dari program mini app_id'mini_app_id' => '',// Opsional - app_id dari aplikasi 'app_id' => '',// Opsional - app_id dari akun sub-resmi dalam mode penyedia layanan 'sub_mp_app_id' => '', // Opsional - Dalam mode penyedia layanan, app_id dari sub-aplikasi 'sub_app_id' => '', // Opsional - Dalam mode penyedia layanan, app_id dari sub-aplikasi app_id'sub_mini_app_id' => '',// Opsional - Dalam mode penyedia layanan, sub-pedagang id'sub_mch_id' => '',// Opsional - Jalur sertifikat kunci publik platform WeChat, opsional, mode php-fpm sangat disarankan Konfigurasikan parameter ini di bawah 'wechat_public_cert_path' => ['45F59D4DABF31918AFCEC556D5D2C6E376675D57' => __DIR__.'/Cert/wechatpay_45F***D57.pem', ], // Opsional - default ke mode normal. Opsi opsionalnya adalah: MODE_NORMAL, MODE_SERVICE'mode' => Bayar::MODE_NORMAL, ] ],'logger' => [ // opsional'enable' => false,'file' => './logs/wechat.log','level' => 'info', // Direkomendasikan agar produksi tingkat lingkungan disesuaikan dengan info, lingkungan pengembangan adalah debug 'type' => 'single', // opsional, opsional setiap hari.'max_file' => 30, // opsional, valid jika tipenya harian, default 30 hari], 'http' = > [ // opsional'timeout' => 5.0,'connect_timeout' => 5.0, // Untuk item konfigurasi lebih lanjut, silakan merujuk ke [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html )] , ];indeks fungsi publik() { Bayar::config($ini->config); $order = ['out_trade_no' => waktu().'','deskripsi' => 'ujian mata pelajaran','jumlah' => [ 'total' => 1, ],'pembayar' => [ 'openid' => 'onkVf1FjWS5SBxxxxxxx', ], ];$bayar = Bayar::wechat()->mp($order);// $pay->appId// $pay->timeStamp// $pay->nonceStr// $pay->paket// $ bayar->signType}panggilan balik fungsi publik() { Pay::config($this->config); try{$data = Pay::wechat()->callback(); // Ya, verifikasi tanda tangan sesederhana itu! } catch ($e yang dapat dilempar) {dd($e); } kembali Bayar::wechat()->sukses(); } }
<?phpnamespace AppHttpControllers;gunakan YansongdaPayPay;kelas DouyinController {dilindungi $config = ['douyin' => ['default' => [// Nomor pedagang opsional // Platform Terbuka Douyin --> Detail aplikasi --> Informasi pembayaran --> Manajemen produk --> No. Pedagang. 'mch_id' => '73744242495132490630', // Diperlukan - Token Pembayaran, digunakan untuk tanda tangan panggilan balik pembayaran // Platform Terbuka Douyin --> Detail aplikasi --> Informasi pembayaran --> Pengaturan pembayaran --> Token (token) 'mch_secret_token' => 'douyin_mini_token', // Wajib - SALT Pembayaran, digunakan untuk tanda tangan pembayaran // Platform Terbuka Douyin --> Detail aplikasi --> Informasi pembayaran --> Pengaturan pembayaran --> SALT'mch_secret_salt' => 'oDxWDBr4U7FAAQ8hnGDm29i4A6pbTMDKme4WLLvA',//Diperlukan - Program Mini app_id// Platform Terbuka Douyin --> Detail aplikasi --> Informasi pembayaran --> Pengaturan pembayaran --> Aplikasi mini 'mini_app_id' => 'tt226e54d3bd581bf801',// Opsional - ID penyedia layanan platform terbuka Douyin 'thirdparty_id' => '', // Opsional - Alamat panggilan balik pembayaran Douyin 'notify_url' => 'https://yansongda.cn/douyin/notify', ], ],'logger' => [ // opsional'enable' => false,'file' => './logs/alipay.log','level' => 'info', // Direkomendasikan agar produksi tingkat lingkungan disesuaikan dengan info, lingkungan pengembangan adalah debug 'type' => 'single', // opsional, opsional setiap hari.'max_file' => 30, // opsional, valid jika tipenya harian, default 30 hari], 'http' = > [ // opsional'timeout' => 5.0,'connect_timeout' => 5.0, // Untuk item konfigurasi lebih lanjut, silakan merujuk ke [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html )] , ];fungsi publik membayar() { Bayar::config($ini->config); $hasil = Bayar::douyin()->mini(['out_order_no' => tanggal('YmdHis').mt_rand(1000, 9999),'total_amount' => 1,'subyek' => 'Yan Songda- tes - subjek - 01','body' => 'Yan Songda - tes - isi - 01','valid_time' => 600,'expand_order_info' => json_encode(['original_delivery_fee' => 15,'actual_delivery_fee' => 10]) ]); mengembalikan $hasil; }panggilan balik fungsi publik() { Pay::config($this->config); try{$data = Pay::douyin()->callback(); // Ya, verifikasi tanda tangan sesederhana itu! } catch (Dapat dibuang $e) {dd($e) }pengembalian Bayar::douyin()->sukses(); } }
<?phpnamespace AppHttpControllers;gunakan YansongdaPayPay;kelas JsbController {protected $config = ['jsb' => ['default' => [// Kode layanan 'svr_code' => '',// Wajib - ID Mitra 'partner_id' => '',// Wajib -Publik dan nomor pasangan kunci pribadi 'public_key_code' => '00', // Diperlukan - Kunci pribadi pedagang (tanda tangan terenkripsi) 'mch_secret_cert_path' => '',//Jalur sertifikat kunci publik Pedagang yang Diperlukan (disediakan oleh Bank Jiangsu untuk verifikasi tanda tangan)'mch_public_cert_path' => '',//Diperlukan-Kunci publik Bank Jiangsu (digunakan untuk mendekripsi data yang dikembalikan oleh Bank Jiangsu) 'jsb_public_cert_path ' => '', //Alamat pemberitahuan pembayaran 'notify_url' => '', // Opsional - defaultnya adalah mode normal. Opsi opsionalnya adalah: MODE_NORMAL: lingkungan resmi, MODE_SANDBOX: lingkungan pengujian 'mode' => Bayar::MODE_NORMAL, ] ],'logger' => [ // opsional'enable' => false,'file' => './logs/epay.log','level' => 'info', // Direkomendasikan agar produksi tingkat lingkungan disesuaikan dengan info, lingkungan pengembangan adalah debug 'type' => 'single', // opsional, opsional setiap hari.'max_file' => 30, // opsional, valid jika tipenya harian, default 30 hari], 'http' = > [ // opsional'timeout' => 5.0,'connect_timeout' => 5.0, // Untuk item konfigurasi lebih lanjut, silakan merujuk ke [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html )] , ];indeks fungsi publik() { Bayar::config($ini->config); $order = ['outTradeNo' => time().'','proInfo' => 'ujian mata pelajaran','totalFee'=> 1, ];$bayar = Bayar::jsb()->scan($pesanan); }fungsi publik notifyCallback() { Pay::config($this->config);try{$data = Pay::jsb()->callback(); // Ya, verifikasi tanda tangan sesederhana itu! } catch ($e yang dapat dilempar) {dd($e); } kembali Bayar::jsb()->sukses(); } }
Karena keterbatasan lingkungan pengujian dan penggunaan, hanya gateway pembayaran yang relevan seperti "Alipay", "WeChat Pay", "Douyin Pay", "UnionPay" dan "Jiangsu Bank" yang dikembangkan dalam proyek ini.
Jika Anda memerlukan gateway pembayaran lain, atau menemukan kode yang perlu diperbaiki dalam proyek ini, silakan kunjungi Fork dan kirimkan PR!
MIT