เวอร์ชัน v3 แตกต่างจากเวอร์ชัน v2 อย่างมากที่ระดับล่างสุด โครงสร้างพื้นฐานได้รับการออกแบบใหม่เพื่อให้ง่ายต่อการขยายและใช้งานสะดวกยิ่งขึ้น
หลังจากพัฒนา Alipay และ WeChat Pay หลายครั้ง ฉันรู้สึกรังเกียจและเกียจคร้านกลับมาโดยธรรมชาติ ฉันต้องการค้นหาวงล้อที่เกี่ยวข้องทางออนไลน์ แต่ฉันไม่เคยพบวงล้อที่ฉันรู้สึกพอใจเลย หรือมันยากเกินไปที่จะเข้าใจ ที่จะใช้ โครงสร้างไฟล์จะยุ่งเกินไปและคุณต้องพับแขนเสื้อขึ้นและทำเอง
ยินดีต้อนรับสตาร์ ยินดีต้อนรับ PR!
กรุณาส่งแพ็คเกจส่วนขยาย Hyperf ที่นี่
กรุณาส่งแพ็คเกจส่วนขยาย laravel ที่นี่
กรุณาส่งแพ็คเกจขยาย yii ที่นี่
การสนับสนุนผู้เช่าหลายราย
ส่วนรองรับสวูล
กลไกปลั๊กอินที่ยืดหยุ่น
ระบบเหตุการณ์ที่หลากหลาย
การตั้งชื่อมีความสับสนน้อยลง
ซ่อนรายละเอียดที่นักพัฒนาไม่จำเป็นต้องใส่ใจ
พัฒนาโดยใช้ API ล่าสุดของ 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' => [// Required - app_id ที่กำหนดโดย Alipay 'app_id' => '2016082000295641', // Required - สตริงคีย์ส่วนตัวของแอปพลิเคชันหรือเส้นทาง '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' => ชำระเงิน::MODE_NORMAL, - ], 'logger' => [ // option'enable' => false,'file' => './logs/alipay.log','level' => 'info', // ขอแนะนำให้การผลิต ระดับสภาพแวดล้อมสามารถปรับเป็นข้อมูลได้ สภาพแวดล้อมการพัฒนาคือ debug 'type' => 'single', // ตัวเลือก, ตัวเลือกรายวัน'max_file' => 30, // ตัวเลือก, ใช้ได้เมื่อประเภทเป็นรายวัน, ค่าเริ่มต้น 30 วัน], 'http' = > [ // option'timeout' => 5.0,'connect_timeout' => 5.0, // สำหรับรายการการกำหนดค่าเพิ่มเติม โปรดดูที่ [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html )] , ];เว็บฟังก์ชันสาธารณะ() - จ่าย::config($this->config); $result = จ่าย::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} ฟังก์ชั่นสาธารณะ notifyCallback() - Pay::config($this->config); try{$data = Pay::alipay()->callback(); // ใช่ การตรวจสอบลายเซ็นนั้นง่ายมาก! // โปรดตัดสินใจเองเกี่ยวกับ trade_status และตรรกะอื่นๆ ในการแจ้งเตือนทางธุรกิจของ Alipay นั้น Alipay จะถือว่าการชำระเงินของผู้ซื้อสำเร็จก็ต่อเมื่อสถานะการแจ้งเตือนธุรกรรมเป็น TRADE_SUCCESS หรือ TRADE_FINISHED เท่านั้น // 1. ผู้ค้าจำเป็นต้องตรวจสอบว่า out_trade_no ในข้อมูลการแจ้งเตือนเป็นหมายเลขคำสั่งซื้อที่สร้างขึ้นในระบบผู้ค้าหรือไม่ // 2. พิจารณาว่ายอดรวมเป็นจำนวนเงินจริงของคำสั่งซื้อหรือไม่ (นั่นคือ จำนวนเงินเมื่อผู้ค้า สร้างคำสั่งซื้อแล้ว); // 3 ตรวจสอบ vendor_id (หรือ vendor_email) ในการแจ้งเตือน ไม่ว่าจะเป็นตัวดำเนินการที่สอดคล้องกันของเอกสาร out_trade_no (บางครั้งผู้ค้าอาจมี vendor_id/seller_email หลายรายการ) // 4. ตรวจสอบว่า app_id เป็นผู้ขายเองหรือไม่ // 5. สถานการณ์ตรรกะทางธุรกิจอื่น ๆ} catch (Throwable $e) {dd($e); } ส่งคืน Pay::alipay()->success(); - -
<?phpnamespace AppHttpControllers;ใช้ YansongdaPayPay;คลาส 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' => ชำระเงิน::MODE_NORMAL, - ],'logger' => [ // option'enable' => false,'file' => './logs/wechat.log','level' => 'info', // ขอแนะนำให้การผลิต ระดับสภาพแวดล้อมสามารถปรับเป็นข้อมูลได้ สภาพแวดล้อมการพัฒนาคือ debug 'type' => 'single', // ตัวเลือก, ตัวเลือกรายวัน'max_file' => 30, // ตัวเลือก, ใช้ได้เมื่อประเภทเป็นรายวัน, ค่าเริ่มต้น 30 วัน], 'http' = > [ // option'timeout' => 5.0,'connect_timeout' => 5.0, // สำหรับรายการการกำหนดค่าเพิ่มเติม โปรดดูที่ [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html )] , ];ดัชนีฟังก์ชั่นสาธารณะ() - ชำระเงิน::config($this->config); $order = ['out_trade_no' => time().'','description' => 'subject-test','amount' => [ 'total' => 1, ],'ผู้ชำระเงิน' => [ 'openid' => 'onkVf1FjWS5SBxxxxxxxx', - ];$pay = จ่าย::wechat()->mp($order);// $pay->appId// $pay->timeStamp// $pay->nonceStr// $pay->แพ็คเกจ// $ จ่าย -> signType} โทรกลับฟังก์ชั่นสาธารณะ () - Pay::config($this->config); try{$data = Pay::wechat()->callback(); // ใช่ การตรวจสอบลายเซ็นนั้นง่ายมาก! } catch (โยนได้ $e) {dd($e); } ผลตอบแทน จ่าย::wechat()->success(); - -
<?phpnamespace AppHttpControllers;ใช้ YansongdaPayPay;คลาส DouyinController {protected $config = ['douyin' => ['default' => [// หมายเลขผู้ขายเพิ่มเติม // แพลตฟอร์มเปิด Douyin --> รายละเอียดการสมัคร --> ข้อมูลการชำระเงิน --> การจัดการผลิตภัณฑ์ --> หมายเลขผู้ขาย 'mch_id' => '73744242495132490630', // จำเป็น - โทเค็นการชำระเงินใช้สำหรับลายเซ็นเรียกกลับการชำระเงิน // Douyin Open Platform -> รายละเอียดแอปพลิเคชัน --> ข้อมูลการชำระเงิน --> การตั้งค่าการชำระเงิน --> โทเค็น (โทเค็น) 'mch_secret_token' => 'douyin_mini_token', // จำเป็น - SALT การชำระเงินใช้สำหรับลายเซ็นการชำระเงิน // Douyin Open Platform --> รายละเอียดแอปพลิเคชัน --> ข้อมูลการชำระเงิน --> การตั้งค่าการชำระเงิน --> SALT'mch_secret_salt' => 'oDxWDBr4U7FAAQ8hnGDm29i4A6pbTMDKme4WLLvA',//จำเป็น - แอปมินิโปรแกรม_id// Douyin Open Platform --> รายละเอียดการสมัคร --> ข้อมูลการชำระเงิน --> การตั้งค่าการชำระเงิน --> แอปมินิโปรแกรม 'mini_app_id' => 'tt226e54d3bd581bf801',// ตัวเลือกเสริม - รหัสผู้ให้บริการแพลตฟอร์มเปิด Douyin 'thirdparty_id' => '', // ตัวเลือกเสริม - ที่อยู่ติดต่อกลับการชำระเงิน Douyin 'notify_url' => 'https://yansongda.cn/douyin/notify', - ],'logger' => [ // option'enable' => false,'file' => './logs/alipay.log','level' => 'info', // ขอแนะนำให้การผลิต ระดับสภาพแวดล้อมสามารถปรับเป็นข้อมูลได้ สภาพแวดล้อมการพัฒนาคือ debug 'type' => 'single', // ตัวเลือก, ตัวเลือกรายวัน'max_file' => 30, // ตัวเลือก, ใช้ได้เมื่อประเภทเป็นรายวัน, ค่าเริ่มต้น 30 วัน], 'http' = > [ // option'timeout' => 5.0,'connect_timeout' => 5.0, // สำหรับรายการการกำหนดค่าเพิ่มเติม โปรดดูที่ [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html )] , ];การจ่ายเงินฟังก์ชั่นสาธารณะ() - จ่าย::config($this->config); $result = จ่าย::douyin()->mini(['out_order_no' => date('YmdHis').mt_rand(1000, 9999),'total_amount' => 1,'subject' => 'Yan Songda- ทดสอบ - subject - 01','body' => 'Yan Songda - ทดสอบ - 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(); // ใช่ การตรวจสอบลายเซ็นนั้นง่ายมาก! } catch (โยนได้ $e) {dd($e) } ส่งคืน Pay::douyin()->success(); - -
<?phpnamespace AppHttpControllers;ใช้ YansongdaPayPay;คลาส JsbController {protected $config = ['jsb' => ['default' => [// รหัสบริการ 'svr_code' => '',// จำเป็น - รหัสพันธมิตร 'partner_id' => '',// จำเป็น - สาธารณะและ หมายเลขคู่คีย์ส่วนตัว 'public_key_code' => '00', // จำเป็น - รหัสส่วนตัวของผู้ขาย (ลายเซ็นที่เข้ารหัส) 'mch_secret_cert_path' => '',//เส้นทางใบรับรองคีย์สาธารณะที่จำเป็นสำหรับผู้ขาย (จัดทำโดย Bank of Jiangsu สำหรับการตรวจสอบลายเซ็น)'mch_public_cert_path' => '',//Required-Public key ของธนาคารแห่ง Jiangsu (ใช้เพื่อถอดรหัสข้อมูลที่ส่งคืนโดย Bank of Jiangsu) 'jsb_public_cert_path' => '', //ที่อยู่แจ้งเตือนการชำระเงิน 'notify_url' => '', // ตัวเลือก - ค่าเริ่มต้นคือโหมดปกติ ตัวเลือกเพิ่มเติมคือ: MODE_NORMAL: สภาพแวดล้อมอย่างเป็นทางการ, MODE_SANDBOX: สภาพแวดล้อมการทดสอบ 'mode' => ชำระเงิน::MODE_NORMAL, - ],'logger' => [ // option'enable' => false,'file' => './logs/epay.log','level' => 'info', // ขอแนะนำให้การผลิต ระดับสภาพแวดล้อมสามารถปรับเป็นข้อมูลได้ สภาพแวดล้อมการพัฒนาคือ debug 'type' => 'single', // ตัวเลือก, ตัวเลือกรายวัน'max_file' => 30, // ตัวเลือก, ใช้ได้เมื่อประเภทเป็นรายวัน, ค่าเริ่มต้น 30 วัน], 'http' = > [ // option'timeout' => 5.0,'connect_timeout' => 5.0, // สำหรับรายการการกำหนดค่าเพิ่มเติม โปรดดูที่ [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html )] , ];ดัชนีฟังก์ชั่นสาธารณะ() - ชำระเงิน::config($this->config); $order = ['outTradeNo' => time().'','proInfo' => 'subject-test','totalFee'=> 1, ];$pay = จ่าย::jsb()->scan($order); } ฟังก์ชั่นสาธารณะ notifyCallback() - Pay::config($this->config);try{$data = Pay::jsb()->callback(); // ใช่แล้ว การตรวจสอบลายเซ็นนั้นง่ายมาก! } catch (โยนได้ $e) {dd($e); } ผลตอบแทน จ่าย::jsb()->success(); - -
เนื่องจากข้อจำกัดของสภาพแวดล้อมการทดสอบและการใช้งาน จึงมีเพียงเกตเวย์การชำระเงินที่เกี่ยวข้องของ "Alipay", "WeChat Pay", "Douyin Pay", "UnionPay" และ "Jiangsu Bank" เท่านั้นที่ได้รับการพัฒนาในโครงการนี้
หากคุณมีความต้องการเกตเวย์การชำระเงินอื่นๆ หรือค้นหาโค้ดที่ต้องปรับปรุงในโปรเจ็กต์นี้ คุณสามารถไปที่ Fork และส่ง PR ได้!
เอ็มไอที