SDK การชำระเงิน (V3)
ที่อยู่โปรเจกต์
https://github.com/yansongda/pay
การติดตั้ง
composer require yansongda/pay ~3.0
การใช้งาน
หมายเหตุ: เอกสารนี้ใช้สภาพแวดล้อม Sandbox ของ Alipay หากมีปัญหาโปรดแจ้งให้ทราบทันที!
ไฟล์การตั้งค่า
สมมติว่ามีไฟล์การตั้งค่าดังต่อไปนี้ config/payment.php
<?php
/**
* @desc ไฟล์การตั้งค่าการชำระเงิน
* @author Tinywan(ShaoBo Wan)
* @date 2022/03/11 20:15
*/
return [
'_force' => true, // หมายเหตุ: ต้องเป็น true
'alipay' => [
'default' => [
// จำเป็นต้องใช้ - app_id ที่จัดสรรจาก Alipay
'app_id' => '20160909004708941',
// จำเป็นต้องใช้ - กุญแจส่วนตัวของแอป เป็นสตริงหรือเส้นทาง
'app_secret_cert' => 'MIIEpAIBAAKCxxxxxxxxxxxxxxP4r3m4OUmD/+XDgCg==',
// จำเป็นต้องใช้ - เส้นทางของใบรับรองสาธารณะของแอป
'app_public_cert_path' => base_path().'/payment/appCertPublicKey_2016090900470841.crt',
// จำเป็นต้องใช้ - เส้นทางของใบรับรองสาธารณะของ Alipay
'alipay_public_cert_path' => base_path().'/payment/alipayCertPublicKey_RSA2.crt',
// จำเป็นต้องใช้ - เส้นทางของใบรับรองรากของ Alipay
'alipay_root_cert_path' => base_path().'/payment/alipayRootCert.crt',
// ตัวเลือก - ที่อยู่สำหรับการเรียกกลับแบบซิงค์
'return_url' => 'https://webman.tinywan.cn/payment/alipay-return',
// ตัวเลือก - ที่อยู่สำหรับการเรียกกลับแบบอะซิงค์
'notify_url' => 'https://webman.tinywan.cn/payment/alipay-notify',
// ตัวเลือก - หมายเลขบริการของผู้ให้บริการในโหมดการให้บริการเมื่อ mode เป็น Pay::MODE_SERVICE
'service_provider_id' => '',
// ตัวเลือก - โหมดปกติเป็นค่าเริ่มต้น. ค่าที่เลือกได้: MODE_NORMAL, MODE_SANDBOX, MODE_SERVICE
'mode' => \Yansongda\Pay\Pay::MODE_SANDBOX,
]
],
'wechat' => [
'default' => [
// จำเป็นต้องใช้ - หมายเลขร้านค้า หมายเลขร้านค้าในโหมดบริการ
'mch_id' => '',
// จำเป็นต้องใช้ - กุญแจลับของร้านค้า
'mch_secret_key' => '',
// จำเป็นต้องใช้ - กุญแจส่วนตัวของร้านค้า เป็นสตริงหรือเส้นทาง
'mch_secret_cert' => '',
// จำเป็นต้องใช้ - เส้นทางของใบรับรองสาธารณะของร้านค้า
'mch_public_cert_path' => '',
// จำเป็นต้องใช้
'notify_url' => 'https://yansongda.cn/wechat/notify',
// ตัวเลือก - app_id ของบัญชีสาธารณะ
'mp_app_id' => '2016082000291234',
// ตัวเลือก - app_id ของ mini program
'mini_app_id' => '',
// ตัวเลือก - app_id ของแอป
'app_id' => '',
// ตัวเลือก - app_id ของการรวมใบสั่ง
'combine_app_id' => '',
// ตัวเลือก - หมายเลขร้านค้าของการรวม
'combine_mch_id' => '',
// ตัวเลือก - app_id ของบัญชีสาธารณะย่อยในโหมดบริการ
'sub_mp_app_id' => '',
// ตัวเลือก - app_id ของแอปย่อยในโหมดบริการ
'sub_app_id' => '',
// ตัวเลือก - app_id ของ mini program ย่อยในโหมดบริการ
'sub_mini_app_id' => '',
// ตัวเลือก - หมายเลขร้านค้าในโหมดบริการ
'sub_mch_id' => '',
// ตัวเลือก - เส้นทางของใบรับรองสาธารณะ WeChat, ตัวเลือก, แนะนำให้กำหนดค่าพารามิเตอร์นี้ในโหมด php-fpm
'wechat_public_cert_path' => [
'45F59D4DABF31918AFCEC556D5D2C6E376675D57' => __DIR__.'/Cert/wechatPublicKey.crt',
],
// ตัวเลือก - โหมดปกติเป็นค่าเริ่มต้น. ค่าที่เลือกได้: MODE_NORMAL, MODE_SERVICE
'mode' => \Yansongda\Pay\Pay::MODE_SANDBOX,
]
],
'logger' => [
'enable' => false,
'file' => runtime_path().'/logs/alipay.log',
'level' => 'debug', // แนะนำให้ปรับระดับในสภาพแวดล้อมการผลิตเป็น info และ debug ในสภาพแวดล้อมการพัฒนา
'type' => 'single', // ตัวเลือก, อาจใช้ daily.
'max_file' => 30, // ตัวเลือก, ใช้เมื่อ type เป็น daily, ค่าเริ่มต้น 30 วัน
],
'http' => [ // ตัวเลือก
'timeout' => 5.0,
'connect_timeout' => 5.0,
// สำหรับตัวเลือกเพิ่มเติมโปรดดูที่ [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
]
];
หมายเหตุ: ไม่ได้กำหนดไดเรคทอรีใบรับรอง ตัวอย่างข้างต้นจะอยู่ในไดเรคทอรี
payment
ของกรอบงาน
├── payment
│ ├── alipayCertPublicKey_RSA2.crt
│ ├── alipayRootCert.crt
│ └── appCertPublicKey_2016090900470841.crt
การเริ่มต้น
เรียกใช้วิธี config
เพื่อเริ่มต้น
// ดึงไฟล์การตั้งค่า config/payment.php
$config = config('payment');
Pay::config($config);
หมายเหตุ: หากเป็นโหมด Sandbox ของ Alipay ต้องจำให้ได้ว่าเปิดไฟล์การตั้งค่า
'mode' => \Yansongda\Pay\Pay::MODE_SANDBOX,
ตัวเลือกนี้ตั้งค่าเริ่มต้นเป็นโหมดปกติ
การชำระเงิน (เว็บ)
use support\Request;
use Yansongda\Pay\Pay;
/**
* @param Request $request
* @return string
*/
public function payment(Request $request)
{
// 1. เริ่มต้นการตั้งค่า
Pay::config(config('payment'));
// 2. การชำระเงินทางเว็บ
$order = [
'out_trade_no' => time(),
'total_amount' => '8888.88',
'subject' => 'เว็บแมนการชำระเงิน',
'_method' => 'get' // ใช้วิธี get ในการเปลี่ยนเส้นทาง
];
return Pay::alipay()->web($order)->getBody()->getContents();
}
การเรียกกลับแบบอะซิงค์
use support\Request;
use Yansongda\Pay\Pay;
/**
* @desc: 『Alipay』การแจ้งเตือนแบบอะซิงค์
* @param Request $request
* @return Response
*/
public function alipayNotify(Request $request): Response
{
// 1. เริ่มต้นการตั้งค่า
Pay::config(config('payment'));
// 2. การจัดการการเรียกกลับของ Alipay
$result = Pay::alipay()->callback($request->post());
// ===================================================================================================
// กรุณาตรวจสอบ trade_status และตรรกะอื่น ๆ เฉพาะเมื่อสถานะแจ้งเตือนการทำธุรกรรมเป็น TRADE_SUCCESS หรือ TRADE_FINISHED เท่านั้น อลิเพย์จะถือว่าผู้ซื้อชำระเงินสำเร็จ
// 1. ผู้ค้าต้องตรวจสอบข้อมูลการแจ้งเตือนว่า out_trade_no เป็นหมายเลขใบสั่งซื้อที่สร้างในระบบของผู้ค้าหรือไม่
// 2. ตรวจสอบว่า total_amount เป็นจำนวนเงินที่แท้จริงของคำสั่งซื้อนั้น (หมายถึงจำนวนเงินที่สร้างขึ้นเมื่อสร้างใบสั่งซื้อของผู้ค้า)
// 3. ตรวจสอบ seller_id (หรือ seller_email) ว่าเป็นผู้ดำเนินการที่ตรงกับ out_trade_no นี้หรือไม่
// 4. ตรวจสอบว่า app_id เป็นของผู้ค้าเองหรือไม่
// 5. ตรรกะทางธุรกิจอื่น ๆ
// ===================================================================================================
// 5. การจัดการการเรียกกลับของ Alipay
return new Response(200, [], 'success');
}
หมายเหตุ: ไม่สามารถใช้ปลั๊กอินเอง
return Pay::alipay()->success();
เพื่อตอบสนองการเรียกกลับจาก Alipay หากคุณใช้ middleware จะเกิดปัญหาเกี่ยวกับ middleware ดังนั้นการตอบสนองต่อ Alipay ต้องใช้คลาสตอบสนองของ webmansupport\Response;
การเรียกกลับแบบซิงค์
use support\Request;
use Yansongda\Pay\Pay;
/**
* @desc: 『Alipay』การแจ้งเตือนแบบซิงค์
* @param Request $request
* @author Tinywan(ShaoBo Wan)
*/
public function alipayReturn(Request $request)
{
Log::info('『Alipay』การแจ้งเตือนแบบซิงค์'.json_encode($request->get()));
return 'success';
}
เนื้อหาเพิ่มเติม
เข้าไปที่เอกสารทางการ https://pay.yansongda.cn/docs/v3/