Ping++ SDK को CodeIgniter Framework के साथ एकीकृत करना | मूल, AI द्वारा अनुवादित
नीचे एक पूर्ण, कदम-दर-कदम उदाहरण दिया गया है कि कैसे Pingpp (Ping++) एक भुगतान प्रोसेसिंग SDK को PHP अनुप्रयोग में CodeIgniter फ्रेमवर्क का उपयोग करके एकीकृत किया जा सकता है, जो दिए गए BaseController
वर्ग पर आधारित है। यह मार्गदर्शिका मानता है कि आपके पास एक बुनियादी CodeIgniter सेटअप है और भुगतान प्रोसेसिंग के लिए Pingpp को एकीकृत करने पर ध्यान केंद्रित करता है, जैसे कि उपयोगकर्ताओं को Alipay PC Direct के माध्यम से भुगतान करने की अनुमति देना (हालांकि आप इसे अन्य चैनलों के लिए अनुकूलित कर सकते हैं)।
पूर्वापेक्षाएँ
- Pingpp खाता: Ping++ पर साइन अप करें और अपना API Key और App ID प्राप्त करें। आपके पास विकास के लिए एक परीक्षण की (sk_test_…) और उत्पादन के लिए एक लाइव की (sk_live_…) होगी।
- Pingpp PHP SDK: Composer के माध्यम से Pingpp PHP SDK को इंस्टॉल करें:
composer require pingplusplus/pingpp-php
सुनिश्चित करें कि SDK आपके CodeIgniter अनुप्रयोग में ऑटोलोड किया गया है (उदाहरण के लिए, इसे
application/libraries
में रखें या Composer ऑटोलोडिंग को कॉन्फ़िगर करें)। - CodeIgniter सेटअप: आपके पास उपयोगकर्ताओं और चार्जों के लिए एक कार्यरत CodeIgniter अनुप्रयोग, एक कंट्रोलर और डेटाबेस मॉडल होना चाहिए।
कदम-दर-कदम एकीकरण
1. कंट्रोलर सेटअप
एक कंट्रोलर (उदाहरण के लिए, PaymentController.php
) बनाएं जो BaseController
जैसा एक आधार कंट्रोलर को विस्तारित करता है। कंट्रोलर में कंट्रक्टर में Pingpp API की कोनफ़िगर करें, जो आपके वातावरण (विकास या उत्पादन) पर आधारित है।
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
require_once APPPATH . '/libraries/REST_Controller.php';
require_once APPPATH . '/vendor/autoload.php'; // Composer autoload मानते हुए
class PaymentController extends REST_Controller {
public $userDao;
public $chargeDao;
public function __construct() {
parent::__construct();
// Pingpp API key को वातावरण के आधार पर सेट करें
$isLocalDebug = ENVIRONMENT === 'development'; // CodeIgniter वातावरण
if ($isLocalDebug) {
\Pingpp\Pingpp::setApiKey('sk_test_your_test_key_here'); // अपने परीक्षण की के साथ बदलें
} else {
\Pingpp\Pingpp::setApiKey('sk_live_your_live_key_here'); // अपने लाइव की के साथ बदलें
}
// मॉडल लोड करें
$this->load->model('UserDao');
$this->userDao = new UserDao();
$this->load->model('ChargeDao');
$this->chargeDao = new ChargeDao();
}
}
'sk_test_your_test_key_here'
और'sk_live_your_live_key_here'
को अपने वास्तविक Pingpp API कीजों के साथ बदलें।- सुनिश्चित करें कि
UserDao
औरChargeDao
उपयोगकर्ता प्रमाणन और चार्ज स्टोरेज (देखें कदम 2) को संभालने के लिए लागू किए गए हैं।
2. सहायक मॉडल बनाएं
आपको उपयोगकर्ता सत्रों को प्रबंधित करने और चार्ज विवरण को स्टोर करने के लिए मॉडल की आवश्यकता होगी।
UserDao.php (संक्षिप्त उदाहरण):
<?php
class UserDao extends CI_Model {
public function findUserBySessionToken($token) {
$query = $this->db->get_where('users', ['session_token' => $token]);
return $query->row(); // उपयोगकर्ता वस्तु या null लौटाता है
}
}
ChargeDao.php (संक्षिप्त उदाहरण):
<?php
class ChargeDao extends CI_Model {
public function add($orderNo, $amount, $userId, $ipAddress) {
$data = [
'order_no' => $orderNo,
'amount' => $amount,
'user_id' => $userId,
'client_ip' => $ipAddress,
'status' => 'pending',
'created_at' => date('Y-m-d H:i:s')
];
$this->db->insert('charges', $data);
}
}
उपयुक्त फील्डों के साथ users
और charges
के लिए संबद्ध डेटाबेस टेबल बनाएं।
3. चार्ज बनाना विधि लागू करें
एक Pingpp चार्ज बनाएं और इसे क्लाइंट को लौटाएं। इस उदाहरण में Alipay PC Direct को भुगतान चैनल के रूप में उपयोग किया गया है।
public function createChargeThenResponse($amount, $subject, $body, $metaData, $user) {
// एक अनूठा ऑर्डर नंबर जनरेट करें
$orderNo = $this->generateOrderNo();
// वातावरण के आधार पर App ID सेट करें
$isLocalDebug = ENVIRONMENT === 'development';
$appId = $isLocalDebug ? 'app_your_test_app_id' : 'app_your_live_app_id';
// क्लाइंट IP पते को प्राप्त करें
$ipAddress = $this->input->ip_address();
if ($ipAddress === '::1') { // स्थानीय डिबग केस को संभालें
$ipAddress = '127.0.0.1';
}
// चार्ज बनाएं
try {
$charge = \Pingpp\Charge::create([
'order_no' => $orderNo,
'app' => ['id' => $appId],
'channel' => 'alipay_pc_direct', // अन्य चैनलों (उदाहरण के लिए, 'wx' WeChat के लिए) के लिए इसे बदलें
'amount' => $amount, // सेंट में (उदाहरण के लिए, 1000 = 10 CNY)
'client_ip' => $ipAddress,
'currency' => 'cny',
'subject' => $subject,
'body' => $body,
'metadata' => $metaData,
'extra' => [
'success_url' => 'http://yourdomain.com/payment/success' // अपने सफलता URL के साथ बदलें
]
]);
// डेटाबेस में चार्ज विवरण स्टोर करें
$this->chargeDao->add($orderNo, $amount, $user->id, $ipAddress);
// चार्ज वस्तु को JSON के रूप में लौटाएं
$this->output
->set_status_header(200)
->set_content_type('application/json', 'utf-8')
->set_output(json_encode($charge));
} catch (\Pingpp\Error\Base $e) {
log_message('error', 'Pingpp Charge Failed: ' . $e->getMessage());
$this->response(['error' => 'भुगतान निर्माण विफल'], 500);
}
}
private function generateOrderNo() {
return uniqid(); // सरल अनूठा ID; आवश्यकता के अनुसार एक अधिक मजबूत जनरेटर के साथ बदलें
}
'app_your_test_app_id'
और'app_your_live_app_id'
को अपने Pingpp App IDs के साथ बदलें।'success_url'
को अपने अनुप्रयोग के सफलता पेज URL के साथ अनुकूलित करें।
4. एक चेकआउट विधि बनाएं
एक सार्वजनिक विधि जो उपयोगकर्ता चेकआउट को संभालने के लिए चार्ज बनाना विधि को कॉल करता है।
public function checkout_post() {
// जांच करें कि उपयोगकर्ता लॉग इन है
$user = $this->getSessionUser();
if (!$user) {
$this->response(['error' => 'उपयोगकर्ता लॉग इन नहीं है'], 401);
return;
}
// उदाहरण ऑर्डर विवरण
$amount = 1000; // 10 CNY (उदाहरण; एक वास्तविक अनुप्रयोग में डायनामिक रूप से गणना करें)
$subject = 'ऑर्डर भुगतान';
$body = 'ऑर्डर #123 के लिए भुगतान';
$metaData = ['order_id' => '123']; // ऑर्डर-विशिष्ट डेटा जोड़ें
// चार्ज बनाएं और जवाब दें
$this->createChargeThenResponse($amount, $subject, $body, $metaData, $user);
}
private function getSessionUser() {
$token = $this->input->get_request_header('Authorization', TRUE); // अपने प्रमाणन विधि के आधार पर अनुकूलित करें
if ($token) {
return $this->userDao->findUserBySessionToken($token);
}
return null;
}
5. क्लाइंट-साइड प्रतिक्रिया संभालें
createChargeThenResponse
विधि एक JSON charge
वस्तु लौटाती है। alipay_pc_direct
के लिए, इसमें एक credential
फील्ड होता है जिसमें एक भुगतान URL होता है। इसे क्लाइंट-साइड (उदाहरण के लिए, JavaScript के साथ) संभालें।
उदाहरण (फ्रंटएंड JavaScript):
fetch('/payment/checkout', {
method: 'POST',
headers: { 'Authorization': 'your-session-token' }
})
.then(response => response.json())
.then(charge => {
if (charge.credential && charge.credential.alipay_pc_direct) {
window.location.href = charge.credential.alipay_pc_direct; // Alipay पर रीडायरेक्ट करें
} else {
console.error('भुगतान त्रुटि:', charge);
}
})
.catch(error => console.error('त्रुटि:', error));
6. सफलता पेज
भुगतान के बाद एक सफलता पेज (उदाहरण के लिए, payment/success
) बनाएं ताकि एक पुष्टि प्रदर्शित की जा सके। यहाँ ऑर्डर स्थिति को मैन्युअल रूप से अपडेट करें यदि आवश्यक है, हालांकि वेबहुक्स के लिए विश्वसनीयता के लिए सिफारिश की जाती है (देखें कदम 7)।
public function success_get() {
// आवश्यकतानुसार भुगतान स्थिति की पुष्टि करें
$this->load->view('payment_success'); // एक दृश्य लोड करें
}
7. (वैकल्पिक) वेबहुक्स संभालें
Pingpp भुगतान स्थिति अपडेटों को असिंक्रोनस रूप से वेबहुक्स के माध्यम से भेजता है। इन सूचनाओं को प्राप्त करने के लिए एक एंडपॉइंट सेट अप करें और अपने डेटाबेस को अपडेट करें।
public function webhook_post() {
$rawData = file_get_contents('php://input');
$event = json_decode($rawData, true);
if ($event['type'] === 'charge.succeeded') {
$charge = $event['data']['object'];
$orderNo = $charge['order_no'];
$this->chargeDao->updateStatus($orderNo, 'paid');
}
$this->response(['status' => 'ok'], 200);
}
ChargeDao
में एकupdateStatus
विधि जोड़ें ताकि चार्ज स्थिति को अपडेट किया जा सके।- अपने वेबहुक URL को Pingpp डैशबोर्ड में कॉन्फ़िगर करें (उदाहरण के लिए,
http://yourdomain.com/payment/webhook
)।
पूर्ण उदाहरण उपयोग
- उपयोगकर्ता क्रिया: एक उपयोगकर्ता लॉग इन करता है और एक POST अनुरोध के माध्यम से
/payment/checkout
पर चेकआउट प्रारंभ करता है। - सर्वर प्रतिक्रिया: सर्वर एक चार्ज बनाता है और भुगतान विवरणों के साथ एक JSON वस्तु लौटाता है।
- क्लाइंट संभालना: फ्रंटएंड उपयोगकर्ता को Alipay भुगतान पेज पर रीडायरेक्ट करता है।
- भुगतान समाप्ति: भुगतान के बाद, उपयोगकर्ता को सफलता URL पर रीडायरेक्ट किया जाता है।
- वेबहुक अपडेट: Pingpp आपके वेबहुक एंडपॉइंट को सूचित करता है, और आप चार्ज स्थिति को अपडेट करते हैं।
अतिरिक्त टिप्पणियाँ
- भुगतान चैनल:
'alipay_pc_direct'
को अन्य चैनलों (उदाहरण के लिए,'wx'
WeChat के लिए) के लिए बदलें जैसा कि आवश्यक है। चैनल-विशिष्टextra
पैरामीटर के लिए Pingpp दस्तावेज़ देखें। - त्रुटि संभालना: उत्पादन के लिए त्रुटि संभालना को बढ़ाएं (उदाहरण के लिए, पुन: प्रयास तर्क, विस्तृत त्रुटि संदेश)।
- सुरक्षा: उपयोगकर्ता इनपुट (
$amount
आदि) को सत्यापित करें और अपने API एंडपॉइंट को सुरक्षित करें।
यह उदाहरण आपके CodeIgniter अनुप्रयोग में Pingpp को एकीकृत करने के लिए एक मजबूत आधार प्रदान करता है, जो विभिन्न उपयोग के मामलों जैसे ई-कॉमर्स या दान के लिए अनुकूलित किया जा सकता है।