يختلف الإصدار v3 تمامًا عن الإصدار v2 في المستوى السفلي. تمت إعادة تصميم البنية التحتية لتسهيل التوسعة وأكثر ملاءمة للاستخدام.
بعد تطوير Alipay وWeChat Pay عدة مرات، شعرت بطبيعة الحال بعودة الشعور بالاشمئزاز والكسل، وأردت البحث عن العجلات ذات الصلة عبر الإنترنت، لكنني لم أجد أبدًا واحدة أشعر بالرضا عنها، أو كان من الصعب جدًا فهمها. للاستخدام. إما أن بنية الملف فوضوية للغاية، وعليك أن تشمر عن سواعدك وتفعل ذلك بنفسك.
مرحبًا ستار، مرحبًا بالعلاقات العامة!
الرجاء إرسال حزمة ملحق Hyperf هنا
الرجاء إرسال حزمة ملحق Laravel هنا
الرجاء إرسال حزمة التوسعة yii هنا
دعم متعدد المستأجرين
دعم سوول
آلية توصيل مرنة
نظام الأحداث الغنية
التسمية أقل إرباكًا
إخفاء التفاصيل التي لا يحتاج المطورون إلى الاهتمام بها
تم تطويره استنادًا إلى أحدث واجهات برمجة التطبيقات الخاصة بـ Alipay وWeChat
فصول تجريدية للغاية، مما يزيل عناء التهجئة بتنسيق json وxml
بنية الملف واضحة وسهلة الفهم. يمكنك إضافة بوابات الدفع غير المضمنة في هذا المشروع كما تريد.
تعد الطرق أكثر أناقة في الاستخدام، ولم تعد بحاجة إلى دراسة الغرض من أسماء الطرق أو أسماء الفئات الغريبة.
هناك طريقة مدمجة للحصول على شهادة WeChat العامة تلقائيًا، لذلك لم يعد هناك ما يدعو للقلق بشأن الحصول على الشهادة لأول مرة.
الامتثال لمعايير PSR2 وPSR3 وPSR4 وPSR7 وPSR11 وPSR14 وPSR18 وغيرها، يمكنك التكامل بسهولة مع إطار العمل الخاص بك
https://pay.yansongda.cn/docs/v3/overview/planning
https://pay.yansongda.cn
yansongda/pay متوافق بنسبة 100% مع جميع وظائف Alipay/WeChat/UnionPay (بما في ذلك وظائف مزود الخدمة) ويمكن تقديمه من خلال "آلية المكونات الإضافية".
وفي الوقت نفسه، يدعم SDK المكونات الإضافية المضمنة التالية مباشرةً. يرجى الرجوع إلى الوثائق للحصول على التفاصيل.
الدفع بالكمبيوتر
الدفع عبر موقع الهاتف المحمول
دفع التطبيق
الدفع عن طريق البطاقة
مسح الرمز للدفع
نقل الحساب
دفع البرنامج المصغر
...
الدفع بالحساب الرسمي
دفع البرنامج المصغر
الدفع H5
مسح الرمز للدفع
دفع التطبيق
الدفع عن طريق البطاقة
...
دفع البرنامج المصغر
...
الدفع عبر موقع الهاتف المحمول
الدفع لموقع الكمبيوتر
الدفع عن طريق البطاقة
مسح الرمز للدفع
...
الدفع المتكامل برمز المسح (WeChat، Alipay، UnionPay، e-finance)
...
يتطلب الملحن yansongda/pay:~3.7.0 -vvv
<?phpnamespace AppHttpControllers;استخدام YansongdaPayPay;فئة AlipayController {protected $config = ['alipay' => ['default' => [// مطلوب - معرف التطبيق المعين بواسطة Alipay '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' => '' ,// اختياري - معرف مزود الخدمة في وضع مزود الخدمة، استخدم هذه المعلمة 'service_provider_id' => عندما يكون الوضع Pay::MODE_SERVICE '',// اختياري - الوضع الافتراضي هو الوضع العادي. الخيارات الاختيارية هي: MODE_NORMAL، MODE_SANDBOX، MODE_SERVICE'mode' => Pay::MODE_NORMAL، ]، ], 'logger' => [ // اختياري'enable' => false,'file' => './logs/alipay.log','level' => 'info'، // يوصى بالإنتاج يمكن تعديل مستوى البيئة حسب المعلومات، ويتم تصحيح أخطاء بيئة التطوير 'type' => 'single'، // اختياري، اختياري يوميًا.'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); $result = Pay::alipay()->web(['out_trade_no' => ''.time(),'total_amount' => '0.01','subject' => "اختبار يانسونغدا-1"، ]); إرجاع نتيجة $; }الوظيفة العامة returnCallback() { Pay::config($this->config); $data = Pay::alipay()->callback(); // نعم، التحقق من التوقيع بهذه البساطة! // رقم الطلب: $data->out_trade_no// رقم معاملة Alipay: $data->trade_no// إجمالي مبلغ الطلب: $data->total_amount} public function notifyCallback() { Pay::config($this->config); Try{$data = Pay::alipay()->callback(); // نعم، التحقق من التوقيع بهذه البساطة! // يرجى إصدار حكمك الخاص على trade_status والمنطق الآخر. في إشعار الأعمال الخاص بـ Alipay، سيعتبر Alipay دفع المشتري ناجحًا فقط عندما تكون حالة إشعار المعاملة هي TRADE_SUCCESS أو TRADE_FINISHED. // 1. يحتاج التاجر إلى التحقق مما إذا كان out_trade_no في بيانات الإشعار هو رقم الطلب الذي تم إنشاؤه في نظام التاجر؛ // 2. تحديد ما إذا كان المبلغ الإجمالي هو بالفعل المبلغ الفعلي للطلب (أي المبلغ عندما يقوم التاجر تم إنشاء الطلب)؛ // 3، تحقق من معرف البائع (أو البريد الإلكتروني الخاص بالبائع) في الإشعار ما إذا كان هو المشغل المقابل لمستند out_trade_no (في بعض الأحيان، قد يكون لدى التاجر عدة معرفات للبائع/seller_email)؛ // 4. تحقق مما إذا كان app_id هو التاجر نفسه. // 5. مواقف منطق الأعمال الأخرى} Catch (Throwable $e) {dd($e); }إرجاع الدفع::alipay()->success(); } }
<?phpnamespace AppHttpControllers;استخدم YansongdaPayPay;class WechatController {protected $config = ['wechat' => ['default' => [// مطلوب - رقم التاجر 'mch_id' => '', // اختياري - مفتاح التاجر الخاص v2 'mch_secret_key_v2' => '', // مطلوب - مفتاح التاجر السري الإصدار 3 'mch_secret_key' => ''، // مطلوب - مفتاح التاجر الخاص السلسلة أو المسار 'mch_secret_cert' => '',// مطلوب - مسار شهادة المفتاح العام للتاجر 'mch_public_cert_path' => '',// مطلوب 'notify_url' => 'https://yansongda.cn/wechat/ notify', // اختياري - معرف التطبيق للحساب الرسمي 'mp_app_id' => ''،// اختياري - معرف التطبيق للبرنامج الصغير app_id'mini_app_id' => '',// اختياري - معرف التطبيق الخاص بالتطبيق 'app_id' => '',// اختياري - معرف التطبيق الخاص بالحساب الفرعي الرسمي في وضع مزود الخدمة 'sub_mp_app_id' => '', // اختياري - في وضع مزود الخدمة، معرف التطبيق للتطبيق الفرعي 'sub_app_id' => ''، // اختياري - في وضع مزود الخدمة، معرف التطبيق للتطبيق الفرعي app_id'sub_mini_app_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' => [ // اختياري'enable' => false,'file' => './logs/wechat.log','level' => 'info'، // يوصى بالإنتاج يمكن تعديل مستوى البيئة حسب المعلومات، ويتم تصحيح أخطاء بيئة التطوير 'type' => 'single'، // اختياري، اختياري يوميًا.'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' => 'onkVf1FjWS5SBxxxxxxxxx', ]، ];$pay = Pay::wechat()->mp($order);// $pay->appId// $pay->timeStamp// $pay->nonceStr// $pay->package// $ الدفع->signType} رد اتصال الوظيفة العامة () { Pay::config($this->config); Try{$data = Pay::wechat()->callback(); // نعم، التحقق من التوقيع بهذه البساطة! } قبض على (قابل للرمي $e) {dd($e); } return Pay::wechat()->success(); } }
<?phpnamespace AppHttpControllers;استخدام YansongdaPayPay;فئة DouyinController {protected $config = ['douyin' => ['default' => [// رقم التاجر الاختياري // منصة Douyin المفتوحة --> تفاصيل التطبيق --> معلومات الدفع --> إدارة المنتج --> رقم التاجر. 'mch_id' => '73744242495132490630', // مطلوب - رمز الدفع، يُستخدم لتوقيع رد الاتصال بالدفع // منصة Douyin المفتوحة --> تفاصيل التطبيق --> معلومات الدفع --> إعدادات الدفع --> الرمز المميز (الرمز المميز) 'mch_secret_token' => 'douyin_mini_token'، // مطلوب - SALT للدفع، يستخدم لتوقيع الدفع // Douyin Open Platform --> تفاصيل التطبيق --> معلومات الدفع --> إعدادات الدفع --> SALT'mch_secret_salt' => 'oDxWDBr4U7FAAQ8hnGDm29i4A6pbTMDKme4WLLvA',// مطلوب - برنامج صغير app_id// Douyin Open Platform --> تفاصيل التطبيق --> معلومات الدفع --> إعدادات الدفع --> معرف برنامج صغير 'mini_app_id' => 'tt226e54d3bd581bf801',// اختياري - معرف مزود خدمة النظام الأساسي المفتوح Douyin 'thirdparty_id' => ''، // اختياري - عنوان رد اتصال الدفع Douyin 'notify_url' => 'https://yansongda.cn/douyin/notify'، ]، ],'logger' => [ // اختياري'enable' => false,'file' => './logs/alipay.log','level' => 'info'، // يوصى بالإنتاج يمكن تعديل مستوى البيئة حسب المعلومات، ويتم تصحيح أخطاء بيئة التطوير 'type' => 'single'، // اختياري، اختياري يوميًا.'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); $result = Pay::douyin()->mini(['out_order_no' => date('YmdHis').mt_rand(1000, 9999),'total_amount' => 1,'subject' => 'يان سونغدا- اختبار - موضوع - 01','body' => 'يان سونغدا - اختبار - الجسم - 01','valid_time' => 600,'expand_order_info' => json_encode(['original_delivery_fee' => 15,'actual_delivery_fee' => 10]) ]); إرجاع نتيجة $; } رد اتصال الوظيفة العامة () { Pay::config($this->config); Try{$data = Pay::douyin()->callback(); // نعم، التحقق من التوقيع بهذه البساطة! } قبض (قابل للرمي $e) {dd($e) }إرجاع الدفع::douyin()->success(); } }
<?phpnamespace AppHttpControllers;استخدم YansongdaPayPay;class JsbController {protected $config = ['jsb' => ['default' => [// رمز الخدمة 'svr_code' => '',// مطلوب - معرف الشريك 'partner_id' => ''،// مطلوب - عام و رقم زوج المفاتيح الخاص 'public_key_code' => '00'، // مطلوب - المفتاح الخاص للتاجر (توقيع مشفر) 'mch_secret_cert_path' => '',// مطلوب مسار شهادة المفتاح العام للتاجر (مقدم من بنك Jiangsu للتحقق من التوقيع)'mch_public_cert_path' => '',// مطلوب المفتاح العام لبنك Jiangsu (المستخدم لفك تشفير البيانات التي أعادها بنك Jiangsu) 'jsb_public_cert_path ' => '', // عنوان إشعار الدفع 'notify_url' => '', // اختياري - الوضع الافتراضي هو الوضع العادي. الخيارات الاختيارية هي: MODE_NORMAL: البيئة الرسمية، MODE_SANDBOX: بيئة الاختبار 'mode' => Pay::MODE_NORMAL، ] ],'logger' => [ // اختياري'enable' => false,'file' => './logs/epay.log','level' => 'info'، // يوصى بالإنتاج يمكن تعديل مستوى البيئة حسب المعلومات، ويتم تصحيح أخطاء بيئة التطوير 'type' => 'single'، // اختياري، اختياري يوميًا.'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(); // نعم، التحقق من التوقيع بهذه البساطة! } قبض على (قابل للرمي $e) {dd($e); } return Pay::jsb()->success(); } }
نظرًا للقيود المفروضة على بيئة الاختبار والاستخدام، تم تطوير بوابات الدفع ذات الصلة مثل "Alipay" و"WeChat Pay" و"Douyin Pay" و"UnionPay" و"Jiangsu Bank" فقط في هذا المشروع.
إذا كانت لديك احتياجات لبوابات دفع أخرى، أو وجدت كودًا يحتاج إلى تحسين في هذا المشروع، فنحن نرحب بك في Fork وإرسال العلاقات العامة!
معهد ماساتشوستس للتكنولوجيا