v3 バージョンは、最下位レベルの v2 バージョンとは大きく異なり、拡張が容易になり、より使いやすくなるようにインフラストラクチャが再設計されています。
Alipay や WeChat Pay を何度も開発していると、自然と嫌悪感と怠惰な感情が芽生え、関連するホイールをインターネットで探したくなりましたが、満足のいくホイールが見つからなかったり、難しすぎて使用できませんでした。ファイル構造が乱雑すぎるため、腕まくりして自分でやらなければなりません。
ようこそスター、ようこそ PR!
ここに hyperf 拡張パッケージを送信してください
ここにlaravel拡張パッケージを送信してください
ここに yii 拡張パッケージを送信してください
マルチテナントのサポート
スウールサポート
柔軟なプラグイン機構
豊富なイベントシステム
ネーミングが混乱しにくい
開発者が注意する必要のない詳細を非表示にする
AlipayとWeChatの最新APIをベースに開発
高度に抽象化されたクラスにより、json や xml のスペルの煩わしさが解消されます。
ファイル構造は明確で理解しやすいです。このプロジェクトに含まれていない支払いゲートウェイを自由に追加できます。
メソッドはよりエレガントに使用され、奇妙なメソッド名やクラス名の目的を学ぶ必要はありません。
WeChat パブリック証明書を自動的に取得するメソッドが組み込まれているため、初めて証明書を取得する際に心配する必要はありません。
PSR2、PSR3、PSR4、PSR7、PSR11、PSR14、PSR18 およびその他の規格に準拠しており、フレームワークと簡単に統合できます。
https://pay.yansongda.cn/docs/v3/overview/planning
https://pay.yansongda.cn
yansongda/payはAlipay/WeChat/UnionPayの全機能(サービスプロバイダー機能を含む)と100%互換性があり、「プラグイン機構」により導入可能です。
同時に、SDK は次の組み込みプラグインを直接サポートしています。詳細についてはドキュメントを参照してください。
パソコン決済
モバイルウェブサイトでの支払い
アプリ決済
カードで支払う
コードをスキャンして支払う
口座振替
ミニプログラムのお支払い
...
公式アカウント決済
ミニプログラムのお支払い
H5支払い
コードをスキャンして支払う
アプリ決済
カードで支払う
...
ミニプログラムのお支払い
...
モバイルウェブサイトでの支払い
パソコンウェブサイトでのお支払い
カードで支払う
コードをスキャンして支払う
...
統合されたスキャンコード支払い (WeChat、Alipay、UnionPay、e-finance)
...
作曲家には yansongda/pay が必要です:~3.7.0 -vvv
<?phpnamespace AppHttpControllers;YansongdaPayPayを使用;class AlipayController {protected $config = ['alipay' => ['default' => [// 必須 - Alipay によって割り当てられた app_id 'app_id' => '2016082000295641', // 必須 - アプリケーションの秘密キー文字列またはパス 'app_secret_cert ' => '89iZ2iC16H6/6a3YcP+hDZUjiNGQx9cuwi9eJyykvcwhD...',// 必須 - アプリケーション公開キー証明書パス 'app_public_cert_path' => '/Users/yansongda/pay/cert/appCertPublicKey_2016082000295641.crt',//必須 - Alipay 公開キー証明書パス 'alipay_public_cert_path' => '/Users/yansongda/pay/cert/alipayCertPublicKey_RSA2.crt',// 必須 - 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',// オプション - サードパーティのアプリケーション認証トークン 'app_auth_token' => '' ,// オプション - サービス プロバイダー モードのサービス プロバイダー ID。モードが 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', // 本番環境では環境レベルは情報に調整されます。開発環境はデバッグです 'type' => 'single', // オプション、オプションの daily.'max_file' => 30, // オプション、タイプが毎日の場合に有効、デフォルトは 30 日], 'http' = > [ // Optional'timeout' => 5.0,'connect_timeout' => 5.0, // その他の設定項目については、[Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html) を参照してください。 )]、 ];パブリック関数 web() { Pay::config($this->config); $result = Pay::alipay()->web(['out_trade_no' => ''.time(),'total_amount' => '0.01','subject' => 'ヤンソンダ テスト-1', ]); $result を返します。 }パブリック関数 returnCallback() { Pay::config($this->config); $data = Pay::alipay()->callback(); // はい、署名の検証はとても簡単です。 // 注文番号: $data->out_trade_no// Alipay 取引番号: $data->trade_no// 合計注文金額: $data->total_amount} public function NoticeCallback() { Pay::config($this->config); try{$data = Pay::alipay()->callback(); // はい、署名の検証はとても簡単です。 // trade_status およびその他のロジックについては、ご自身で判断してください。 Alipay のビジネス通知では、取引通知ステータスが TRADE_SUCCESS または TRADE_FINISHED の場合にのみ、Alipay は購入者の支払いが成功したとみなします。 // 1. 販売者は、通知データの out_trade_no が販売者システムで作成された注文番号であるかどうかを確認する必要があります。 // 2. total_amount が実際の注文金額 (つまり、販売者が注文した金額) であるかどうかを判断します。注文が作成されました); // 3、通知内のseller_id (またはseller_email)を確認します。 out_trade_no ドキュメントの対応する演算子であるかどうか (販売者が複数の sell_id/seller_email を持つ場合があります) // 4. app_id が販売者自体であるかどうかを確認します。 // 5. その他のビジネス ロジックの状況} catch (Throwable $e) {dd($e); Pay::alipay()->success() を返します。 } }
<?phpnamespace AppHttpControllers;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 app_id'mini_app_id' => '',// オプション - アプリの app_id 'app_id' => '',// オプション - サービス プロバイダー モードの準公式アカウントの app_id 'sub_mp_app_id' => '', // オプション - サービス プロバイダー モードでは、サブアプリの app_id 'sub_app_id' => '', // オプション - サービス プロバイダー モードでは、サブアプリの app_id app_id'sub_mini_app_id' => '',// オプション - サービス プロバイダー モードでは、サブマーチャント id'sub_mch_id' => '',// オプション - WeChat プラットフォーム公開キー証明書パス、オプション、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', // 本番環境では環境レベルは情報に調整されます。開発環境はデバッグです 'type' => 'single', // オプション、オプションの daily.'max_file' => 30, // オプション、タイプが毎日の場合に有効、デフォルトは 30 日], 'http' = > [ // Optional'timeout' => 5.0,'connect_timeout' => 5.0, // その他の設定項目については、[Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html) を参照してください。 )]、 ];パブリック関数インデックス() { Pay::config($this->config); $order = ['out_trade_no' => time().'','description' => 'subject-test','amount' => [ 'total' => 1、 ],'支払者' => [ 'openid' => 'onkVf1FjWS5SBxxxxxxxx', ]、 ];$pay = Pay::wechat()->mp($order);// $pay->appId// $pay->timeStamp// $pay->nonceStr// $pay->package// $ pay->signType}パブリック関数コールバック() { Pay::config($this->config); try{$data = Pay::wechat()->callback(); // はい、署名の検証はとても簡単です。 catch (Throwable $e) {dd($e); Pay::wechat()->success() を返します。 } }
<?phpnamespace AppHttpControllers;YansongdaPayPayを使用;class DouyinController {protected $config = ['douyin' => ['default' => [// オプションの加盟店番号 // Douyin オープン プラットフォーム --> アプリケーションの詳細 --> 支払い情報 --> 商品管理 --> 加盟店番号'mch_id' => '73744242495132490630', // 必須 - 支払いコールバック署名に使用される支払いトークン // Douyin オープン プラットフォーム --> アプリケーションの詳細--> 支払い情報 --> 支払い設定 --> トークン (トークン) 'mch_secret_token' => 'douyin_mini_token', // 必須 - 支払い署名に使用される支払い SALT // Douyin オープン プラットフォーム --> アプリケーションの詳細 -->支払い情報 --> 支払い設定 --> SALT'mch_secret_salt' => 'oDxWDBr4U7FAAQ8hnGDm29i4A6pbTMDKme4WLLvA',//必須 - ミニプログラム app_id// Douyin オープンプラットフォーム --> アプリケーションの詳細 --> 支払い情報 --> 支払い設定 --> ミニプログラム appid 'mini_app_id' => 'tt226e54d3bd581bf801',//オプション - Douyin オープン プラットフォーム サービス プロバイダー ID 'thirdparty_id' => '', // オプション - Douyin 支払いコールバック アドレス 'notify_url' => 'https://yansongda.cn/douyin/notify', ]、 ],'logger' => [ //Optional'enable' => false,'file' => './logs/alipay.log','level' => 'info', // 本番環境では環境レベルは情報に調整されます。開発環境はデバッグです 'type' => 'single', // オプション、オプションの daily.'max_file' => 30, // オプション、タイプが毎日の場合に有効、デフォルトは 30 日], 'http' = > [ // Optional'timeout' => 5.0,'connect_timeout' => 5.0, // その他の設定項目については、[Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html) を参照してください。 )]、 ];パブリック関数 pay() { Pay::config($this->config); $result = Pay::douyin()->mini(['out_order_no' => date('YmdHis').mt_rand(1000, 9999),'total_amount' => 1,'件名' => 'ヤン・ソンダ-テスト-件名-01','本文' => 'ヤン・ソンダ - テスト - 本文 - 01','valid_time' => 600,'expand_order_info' => json_encode(['original_delivery_fee' => 15,'actual_delivery_fee' => 10]) ]); $result を返します。 }パブリック関数コールバック() { Pay::config($this->config); try{$data = Pay::douyin()->callback(); // はい、署名の検証はとても簡単です。 } catch (スロー可能な $e) {dd($e) Pay::douyin()->success() を返します。 } }
<?phpnamespace AppHttpControllers;YansongdaPayPayを使用;class JsbController {protected $config = ['jsb' => ['default' => [// サービス コード 'svr_code' => '',// 必須 - パートナー ID 'partner_id' => '',// 必須 -Public and秘密鍵ペア番号 'public_key_code' => '00', // 必須 - マーチャント秘密鍵 (暗号化された署名) 'mch_secret_cert_path' => '',//必須-マーチャント公開キー証明書パス (署名検証のために江蘇銀行によって提供される)'mch_public_cert_path' => '',//必須-江蘇銀行の公開キー(銀行によって返されたデータを復号化するために使用される) Jiangsu) 'jsb_public_cert_path' => '', //支払い通知アドレス 'notify_url' => '', // オプション - デフォルトは通常モードです。オプションのオプションは次のとおりです: MODE_NORMAL: 公式環境、MODE_SANDBOX: テスト環境 'mode' => Pay::MODE_NORMAL、 】 ],'logger' => [ //Optional'enable' => false,'file' => './logs/epay.log','level' => 'info', // 本番環境では環境レベルは情報に調整されます。開発環境はデバッグです 'type' => 'single', // オプション、オプションの daily.'max_file' => 30, // オプション、タイプが毎日の場合に有効、デフォルトは 30 日], 'http' = > [ // Optional'timeout' => 5.0,'connect_timeout' => 5.0, // その他の設定項目については、[Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html) を参照してください。 )]、 ];パブリック関数インデックス() { Pay::config($this->config); $order = ['outTradeNo' => time().'','proInfo' => 'subject-test','totalFee'=> 1, ];$pay = Pay::jsb()->scan($order); }パブリック関数notifyCallback() { Pay::config($this->config);try{$data = Pay::jsb()->callback(); // はい、署名の検証はとても簡単です。 catch (Throwable $e) {dd($e); Pay::jsb()->success() を返します。 } }
テストおよび使用環境の制限により、このプロジェクトでは、「Alipay」、「WeChat Pay」、「Douyin Pay」、「UnionPay」、および「Jiangsu Bank」の関連する決済ゲートウェイのみが開発されました。
他の支払いゲートウェイが必要な場合、またはこのプロジェクトで改善が必要なコードを見つけた場合は、フォークして PR を送信してください。
マサチューセッツ工科大学