পেমেন্ট 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/