পেমেন্ট SDK(V3)
প্রকল্প ঠিকানা
https://github.com/yansongda/pay
ইনস্টলেশন
composer require yansongda/pay ~3.0
ব্যবহার
ব্যাখ্যা: নিম্নলিখিতটি আলিপে শানবক্স পরিবেশে ডকুমেন্টেশন প্রণয়ন করা হয়েছে, যদি কোনো প্রশ্ন থাকে, দয়া করে দ্রুত প্রতিক্রিয়া জানান!
কনফিগারেশন ফাইল
ধরা যাক, নিম্নলিখিত কনফিগারেশন ফাইল config/payment.php
<?php
/**
* @desc পেমেন্ট কনফিগারেশন ফাইল
* @author Tinywan(ShaoBo Wan)
* @date 2022/03/11 20:15
*/
return [
'_force' => true, // লক্ষ্য করুন, এটি অবশ্যই true হতে হবে
'alipay' => [
'default' => [
// আবশ্যক- আলিপে থেকে অ্যাপ্লিকেশন দ্বারা বরাদ্দকৃত app_id
'app_id' => '20160909004708941',
// আবশ্যক- অ্যাপ্লিকেশন গোপন চাবি স্ট্রিং বা পথ
'app_secret_cert' => 'MIIEpAIBAAKCxxxxxxxxxxxxxxP4r3m4OUmD/+XDgCg==',
// আবশ্যক- অ্যাপ্লিকেশন এর পাবলিক চাবি শংসাপত্র পথ
'app_public_cert_path' => base_path().'/payment/appCertPublicKey_2016090900470841.crt',
// আবশ্যক- আলিপে এর পাবলিক চাবি শংসাপত্র পথ
'alipay_public_cert_path' => base_path().'/payment/alipayCertPublicKey_RSA2.crt',
// আবশ্যক- আলিপে এর মূল শংসাপত্র পথ
'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',
// বিকল্প- সার্ভিস প্রদানকারী মোডে সার্ভিস প্রদানকারী আইডি, যখন মোডটি 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_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
'sub_mini_app_id' => '',
// বিকল্প- সার্ভিস প্রদানকারী মোডে, সাব মার্চেন্ট আইডি
'sub_mch_id' => '',
// বিকল্প- ওয়েচ্যাট পাবলিক চাবি শংসাপত্রের পথ, অপশনাল, 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, // অপশনাল, যখন টাইপ 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);
লক্ষ্য করুন: যদি এটি আলিপে শানবক্স মোড হয়, নিশ্চিতভাবে মনে রাখবেন কনফিগারেশন ফাইল
'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' => 'webman payment',
'_method' => 'get' // get পদ্ধতি ব্যবহার করে স্থানান্তর
];
return Pay::alipay()->web($order)->getBody()->getContents();
}
অশংক রিটার্ন
use support\Request;
use Yansongda\Pay\Pay;
/**
* @desc:『আলিপে』অশংক বিজ্ঞপ্তি
* @param Request $request
* @return Response
*/
public function alipayNotify(Request $request): Response
{
// 1. কনফিগারেশন প্রাথমিকভাবে নির্ধারণ করুন
Pay::config(config('payment'));
// 2. আলিপে রিটার্ন প্রক্রিয়া
$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. আলিপে রিটার্ন প্রক্রিয়া
return new Response(200, [], 'success');
}
লক্ষ্য করুন: আলিপে রিটার্নে
return Pay::alipay()->success();
রিস্পন্স ব্যবহার করা নিষেধ, যদি আপনি মিডলওয়্যার ব্যবহার করেন তবে মিডলওয়্যার সঞ্চালনে সমস্যা হতে পারে। সুতরাং আলিপেতে রিস্পন্স করতে WEBMAN এর রেসপন্স ক্লাসsupport\Response;
ব্যবহার করতে হবে।
সিঙ্ক রিটার্ন
use support\Request;
use Yansongda\Pay\Pay;
/**
* @desc: 『আলিপে』সিঙ্ক বিজ্ঞপ্তি
* @param Request $request
* @author Tinywan(ShaoBo Wan)
*/
public function alipayReturn(Request $request)
{
Log::info('『আলিপে』সিঙ্ক বিজ্ঞপ্তি'.json_encode($request->get()));
return 'success';
}
আরও তথ্য
সরকারি ডকুমেন্টেশনে যান https://pay.yansongda.cn/docs/v3/