v3 版與v2 版在底層有很大的不同,基礎架構做了重新的設計,更容易擴展,使用起來更方便。
在開發了多次支付寶與微信支付後,很自然產生一種反感,惰性又來了,想在網上找相關的輪子,可是一直沒有找到一款自己覺得逞心如意的,要么使用起來太難理解,要嘛文件結構太雜亂,只有自己擼起袖子乾了。
歡迎Star,歡迎PR!
hyperf 擴充包請傳送至這裡
laravel 擴充包請傳送至這裡
yii 擴充包請傳送至這裡
多租戶支持
Swoole 支持
靈活的插件機制
豐富的事件系統
命名不那麼亂七八糟
隱藏開發者不需要關注的細節
根據支付寶、微信最新API 開發而成
高度抽象的類,免去各種拼json與xml的痛苦
文件結構清晰易理解,可以隨心所欲添加本項目中沒有的支付網關
方法使用更優雅,不必再去研究那些奇怪的方法名稱或類別名稱是做啥用的
內建自動取得微信公共憑證方法,再也不用再費勁去考慮第一次取得憑證的問題了
符合PSR2、PSR3、PSR4、PSR7、PSR11、PSR14、PSR18 等各項標準,你可以各種方便的與你的框架集成
https://pay.yansongda.cn/docs/v3/overview/planning
https://pay.yansongda.cn
yansongda/pay 100% 相容於支付寶/微信/銀聯所有功能(包括服務商功能),只需透過「插件機制」引入即可。
同時,SDK 直接支援內建了以下插件,詳情請查閱文件。
電腦支付
手機網站支付
APP 支付
刷卡支付
掃碼支付
帳戶轉帳
小程式支付
……
公眾號支付
小程式支付
H5 支付
掃碼支付
APP 支付
刷卡支付
……
小程式支付
……
手機網站支付
電腦網站支付
刷卡支付
掃碼支付
……
聚合掃碼支付(微信,支付寶,銀聯,e融)
……
composer require yansongda/pay:~3.7.0 -vvv
<?phpnamespace AppHttpControllers;use YansongdaPayPay;class AlipayController {protected $config = ['alipay' => ['default' => [// 必填-支付寶分配的app_id'app_id' => '2016082000295641',// 必填-應用私鑰或路徑'app_secret_cert ' => '89iZ2iC16H6/6a3YcP+hDZUjiNGQx9cuwi9eJyykvcwhD...',// 必填-應用公鑰憑證 路徑'app_public_cert_path' => '/Users/yansongda/pay/cert/app_public_cert_path' => '/Users/yansongda/pay/cert/app_public_cert_path' => '/必填-支付寶公鑰憑證路徑'alipay_public_cert_path' => '/Users/yansongda/pay/cert/alipayCertPublicKey_RSA2.crt',// 必填-支付寶根憑證路徑'alipay_root_cert_path' => '/Users/yansongda/payyansongda/pay/yansongda// cert/alipayRootCert.crt','return_url' => 'https://yansongda.cn/alipay/return','notify_url' => 'https://yansongda.cn/alipay/notify',// 選填-第三方應用授權token'app_auth_token' => '' ,// 選填-服務商模式下的服務商id,當mode 為Pay::MODE_SERVICE 時使用此參數'service_provider_id' => '',//選填-預設為正常模式。可選為: MODE_NORMAL, MODE_SANDBOX, MODE_SERVICE'mode' => Pay::MODE_NORMAL, ], ], 'logger' => [ // optional'enable' => false,'file' => './logs/alipay.log','level' => 'info', // 建議生產環境等級調整為info,開發環境為debug'type' => 'single', // optional, 可選daily.'max_file' => 30, // optional, 當type 為daily時有效,預設30 天],'http' => [ // optional'timeout' => 5.0,'connect_timeout' => 5.0,// 更多設定項請參考[Guzzle](https://guzzle-cn .readthedocs.io/zh_CN/latest/request-options.html)], ];public function web() { Pay::config($this->config); $result = Pay::alipay()->web(['out_trade_no' => ''.time(),'total_amount' => '0.01','subject' => 'yansongda 測試- 1', ]); return $result; }public function returnCallback() { Pay::config($this->config); $data = Pay::alipay()->callback(); // 是的,驗簽就這麼簡單! // 訂單號碼:$data->out_trade_no// 支付寶交易號碼:$data->trade_no// 訂單總金額:$data->total_amount}public function notifyCallback() { Pay::config($this->config); try{$data = Pay::alipay()->callback(); // 是的,驗簽就這麼簡單! // 請自行對 trade_status 進行判斷及其它邏輯進行判斷,在支付寶的業務通知中,只有交易通知狀態為 TRADE_SUCCESS 或 TRADE_FINISHED 時,支付寶才會認定為買家付款成功。 // 1.商家需要驗證該通知資料中的out_trade_no是否為商家系統中建立的訂單號碼;// 2、判斷total_amount是否確實為該訂單的實際金額(即商家訂單建立時的金額);// 3 、校驗通知中的seller_id(或seller_email)是否為out_trade_no這筆單據的對應的操作方(有的時候,一個商家可能有多個seller_id/seller_email);// 4、驗證app_id是否為該商家本身。 // 5、其它業務邏輯狀況} catch (Throwable $e) {dd($e); }return Pay::alipay()->success(); } }
<?phpnamespace AppHttpControllers;use YansongdaPayPay;class WechatController {protected $config = ['wechat' => ['default' => [// 必填-商家號碼'mch_id' => '',// 選填-v2商家私鑰'mch_secret_key_v2' => '', // 必填-v3商家密碼金'mch_secret_key' => '',// 必填-商家私鑰字串或路徑'mch_secret_cert' => '',// 必填-商家公鑰憑證路徑'mch_public_cert_path' => '',// 必填'notify_url' => 'https://yansongda.cn/wechat/ notify',// 選填-公眾號的app_id'mp_app_id' => '',// 選填-小程式的app_id'mini_app_id' => '',// 選填-app 的app_id'app_id' => '',// 選填-服務商模式下,子公眾號碼的app_id'sub_mp_app_id' => '',//選填-服務商模式下,子app 的app_id'sub_app_id' => '',//選填-服務商模式下,子小程式的app_id'sub_mini_app_id' => '',// 選填-服務商模式下,子商家id'sub_mch_id' => '',// 選填-微信平台公鑰憑證路徑, optional,強烈建議php-fpm 模式下配置此參數'wechat_public_cert_path' => ['45F59D4DABF31918AFCEC556D5D2C6E376675D57' => __DIR__.'/Cert/wechatpay_45F***D57.pem', ],// 選填-預設為正常模式。可選為: MODE_NORMAL, MODE_SERVICE'mode' => Pay::MODE_NORMAL, ] ],'logger' => [ // optional'enable' => false,'file' => './logs/wechat.log','level' => 'info', // 建議生產環境等級調整為info,開發環境為debug'type' => 'single', // optional, 可選daily.'max_file' => 30, // optional, 當type 為daily時有效,預設30 天],'http' => [ // optional'timeout' => 5.0,'connect_timeout' => 5.0,// 更多設定項請參考[Guzzle](https://guzzle-cn .readthedocs.io/zh_CN/latest/request-options.html)], ];public function index() { Pay::config($this->config); $order = ['out_trade_no' => time().'','description' => 'subject-測試','amount' => [ 'total' => 1, ],'payer' => [ 'openid' => 'onkVf1FjWS5SBxxxxxxxx', ], ];$pay = Pay::wechat()->mp($order);// $pay->appId// $pay->timeStamp// $pay->nonceStr// $pay->package// $ pay->signType}public function callback() { Pay::config($this->config); try{$data = Pay::wechat()->callback(); // 是的,驗簽就這麼簡單! } catch (Throwable $e) {dd($e); } return Pay::wechat()->success(); } }
<?phpnamespace AppHttpControllers;use YansongdaPayPay;class DouyinController {protected $config = ['douyin' => ['default' => [// 選填-商家號碼// 抖音開放平台--> 應用詳情--> 付款資訊--> 產品管理--> 商家號'mch_id' => '73744242495132490630',// 必填-付款Token,用於支付回調簽名// 抖音開放平台-->應用詳情--> 付款資訊--> 付款設定--> Token(令牌)'mch_secret_token' => 'douyin_mini_token',// 必填-支付SALT,用於支付簽名// 抖音開放平台-->應用詳情--> 付款資訊--> 付款設定--> SALT'mch_secret_salt' => 'oDxWDBr4U7FAAQ8hnGDm29i4A6pbTMDKme4WLLvA',// 必填-小程式 app_id// 抖音開放平台 --> 應用詳情 --> 付款資訊 --> 付款設定 --> 小程式appid'mini_app_id' => 'dtt26e --> 支付設定 --> 小程式appid'mini_app_id' => 'dtt26e8541選填-抖音開放平台服務商id'thirdparty_id' => '',// 選填-抖音支付回呼地址'notify_url' => 'https://yansongda.cn/douyin/notify', ], ],'logger' => [ // optional'enable' => false,'file' => './logs/alipay.log','level' => 'info', // 建議生產環境等級調整為info,開發環境為debug'type' => 'single', // optional, 可選daily.'max_file' => 30, // optional, 當type 為daily時有效,預設30 天],'http' => [ // optional'timeout' => 5.0,'connect_timeout' => 5.0,// 更多設定項請參考[Guzzle](https://guzzle-cn .readthedocs.io/zh_CN/latest/request-options.html)], ];public function pay() { Pay::config($this->config); $result = Pay::douyin()->mini(['out_order_no' => date('YmdHis').mt_rand(1000, 9999),'total_amount' => 1,'subject' => '閔嵩達- test - subject - 01','body' => '閔嵩達 - test - body - 01','valid_time' => 600,'expand_order_info' => json_encode(['original_delivery_fee' => 15,'actual_delivery_fee' => 10]) ]); return $result; }public function callback() { Pay::config($this->config); try{$data = Pay::douyin()->callback(); // 是的,驗簽就這麼簡單! } catch (Throwable $e) {dd($e) }return Pay::douyin()->success(); } }
<?phpnamespace AppHttpControllers;use YansongdaPayPay;class JsbController {protected $config = ['jsb' => ['default' => [// 服務代碼'svr_code' => '',// 必填-合作商ID'partner_id' => '',// 必填-公私鑰對編號'public_key_code' => '00',// 必填-商家私鑰(加密簽章)'mch_secret_cert_path' => '',//必填-商家公鑰憑證路徑(提供江蘇銀行進行驗證簽章用)'mch_public_cert_path' => '',// 必填-江蘇銀行的公鑰(用於解密江蘇銀行傳回的資料)'jsb_public_cert_path' => '',//付款通知地址'notify_url' => '', // 選填-預設為正常模式。可選為: MODE_NORMAL:正式環境, MODE_SANDBOX:測試環境'mode' => Pay::MODE_NORMAL, ] ],'logger' => [ // optional'enable' => false,'file' => './logs/epay.log','level' => 'info', // 建議生產環境等級調整為info,開發環境為debug'type' => 'single', // optional, 可選daily.'max_file' => 30, // optional, 當type 為daily時有效,預設30 天],'http' => [ // optional'timeout' => 5.0,'connect_timeout' => 5.0,// 更多設定項請參考[Guzzle](https://guzzle-cn .readthedocs.io/zh_CN/latest/request-options.html)], ];public function index() { Pay::config($this->config); $order = ['outTradeNo' => time().'','proInfo' => 'subject-測試','totalFee'=> 1, ];$pay = Pay::jsb()->scan($order); }public function notifyCallback() { Pay::config($this->config);try{$data = Pay::jsb()->callback(); // 是的,驗簽就這麼簡單! } catch (Throwable $e) {dd($e); } return Pay::jsb()->success(); } }
由於測試及使用環境的限制,本專案中只開發了「支付寶」、「微信支付」、「抖音支付」、「銀聯」、「江蘇銀行」的相關支付網關。
如果您有其它支付網關的需求,或者發現本專案中需要改進的程式碼,歡迎Fork 並提交PR!
MIT