2014-10-15 8 views
16

मेरे पास यह काम करने की कोशिश करने में कुछ समस्याएं हैं, मैंने सफलतापूर्वक चेकआउट एक्सप्रेस (या ऐसा लगता है) लागू किया है, लेकिन इस प्रणाली को example के बाद सदस्यता प्रणाली की आवश्यकता है।पेम/लैरवेल आवर्ती भुगतान लागू करें

अब, मेरी समस्या यह है कि लार्वेल में आप कुछ यादृच्छिक फाइल नहीं डाल सकते हैं, इसलिए मैं इसे सही तरीके से करने की कोशिश कर रहा हूं, दुख की बात है कि पुस्तकालय सहित कक्षाओं और विधियों का कोई दस्तावेज नहीं है।

मैंने नियंत्रकों के भीतर कुछ फ़ंक्शंस बनाए हैं (मुझे नहीं पता कि यह सही तरीका है) अब जिस समस्या का सामना कर रहा हूं, वह आवर्ती भुगतान की वांछित राशि लागू करने के लिए रीक्रूरिंगपेमेंट() बनाने की कोशिश कर रहा है, अंतिम है कदम मुझे लगता है।

आपकी मदद के लिए धन्यवाद।

  • एप्लिकेशन/नियंत्रक/PaypalController.php

    public function prepareExpressCheckout(){ 
        $storage = $this->getPayum()->getStorage('Payum\Core\Model\ArrayObject'); 
        $details = $storage->createModel(); 
        $details['PAYMENTREQUEST_0_CURRENCYCODE'] = 'USD'; 
        $details['PAYMENTREQUEST_0_AMT'] = 1.23; 
        $storage->updateModel($details); 
        $captureToken = $this->getTokenFactory()->createCaptureToken('paypal_es', $details, 'payment_done'); 
        $details['RETURNURL'] = $captureToken->getTargetUrl(); 
        $details['CANCELURL'] = $captureToken->getTargetUrl(); 
        $storage->updateModel($details); 
        return \Redirect::to($captureToken->getTargetUrl()); 
    } 
    
    public function prepareSubscribe(){ 
        $storage = $this->getPayum()->getStorage('Payum\Core\Model\ArrayObject'); 
        $details = $storage->createModel(); 
    
        $details['PAYMENTREQUEST_0_AMT'] = 0; 
        $details['L_BILLINGTYPE0'] = Api::BILLINGTYPE_RECURRING_PAYMENTS; 
        $details['L_BILLINGAGREEMENTDESCRIPTION0'] = "Suscripción por X meses"; 
        $details['NOSHIPPING'] = 1; 
    
        $storage->updateModel($details); 
        $captureToken = $this->getTokenFactory()->createCaptureToken('paypal_es', $details, 'payment_done'); 
        $storage->updateModel($details); 
    
        return \Redirect::to($captureToken->getTargetUrl()); 
    } 
    
    public function createRecurringPayment(){ 
        $payum_token = Input::get('payum_token'); 
        $request = \App::make('request'); 
        $request->attributes->set('payum_token', $payum_token); 
        $token = ($request); 
        //$this->invalidate($token); 
    
        $agreementStatus = new GetHumanStatus($token); 
        $payment->execute($agreementStatus); 
    
        if (!$agreementStatus->isSuccess()) { 
         header('HTTP/1.1 400 Bad Request', true, 400); 
         exit; 
        } 
    
        $agreementDetails = $agreementStatus->getModel(); 
    
        $storage = $this->getPayum()->getStorage('Payum\Core\Model\ArrayObject'); 
    
        $recurringPaymentDetails = $storage->createModel(); 
        $recurringPaymentDetails['TOKEN'] = $agreementDetails['TOKEN']; 
        $recurringPaymentDetails['DESC'] = 'Subscribe to weather forecast for a week. It is 0.05$ per day.'; 
        $recurringPaymentDetails['EMAIL'] = $agreementDetails['EMAIL']; 
        $recurringPaymentDetails['AMT'] = 0.05; 
        $recurringPaymentDetails['CURRENCYCODE'] = 'USD'; 
        $recurringPaymentDetails['BILLINGFREQUENCY'] = 7; 
        $recurringPaymentDetails['PROFILESTARTDATE'] = date(DATE_ATOM); 
        $recurringPaymentDetails['BILLINGPERIOD'] = Api::BILLINGPERIOD_DAY; 
    
        $payment->execute(new CreateRecurringPaymentProfile($recurringPaymentDetails)); 
        $payment->execute(new Sync($recurringPaymentDetails)); 
    
        $doneToken = $this->createToken('paypal_es', $recurringPaymentDetails, 'payment_done'); 
    
        return \Redirect::to($doneToken->getTargetUrl()); 
    } 
    
  • एप्लिकेशन/routes.php

    Route::get('/payment', array('as' => 'payment', 'uses' => '[email protected]')); 
        Route::get('/payment/done', array('as' => 'payment_done', 'uses' => '[email protected]')); 
        Route::get('/payment/paypal/express-checkout/prepare', array('as' => 'paypal_es_prepare', 'uses' => '[email protected]')); 
        Route::get('/payment/paypal/subscribe/prepare', array('as' => 'paypal_re_prepare', 'uses' => '[email protected]')); 
        Route::get('/payment/paypal/subscribe/create', array('as' => 'payment_create', 'uses' => '[email protected]')); 
    
+0

आप "द्वारा आप बस कुछ यादृच्छिक नहीं डाल सकते हैं क्या मतलब है फाइलें "आपको क्या त्रुटियां मिल रही हैं? – astroanu

+0

मेरा मतलब है कि लार्वेल में आपको विशिष्ट फ़ोल्डर (मॉडल, नियंत्रक इत्यादि) में फ़ाइलों को रखना होगा, मैं इस प्लगइन के साथ उस संरचना का पालन करने की कोशिश कर रहा था। – AndreX

+0

स्पष्ट रूप से पुनरावर्ती भुगतान के लिए कोई उदाहरण नहीं हैं। @ maksim-kotlyar मुझे लगता है कि विकास टीम पर है? – astroanu

उत्तर

1

अपने प्रोजेक्ट में मैं निम्नलिखित पुस्तकालय का इस्तेमाल किया और यह मेरे बहुत मदद की :

- बस एक फ़ाइल

  • लाइब्रेरी पीएचपी वर्ग के रूप में कार्यान्वित किया जाता है
  • यह आवर्ती भुगतान यह समर्थन करता है ExpressCheckout भुगतान
  • सभी उपलब्ध पेपैल एपीआई का समर्थन करता है

    • स्थापित करने के लिए आसान:

      यहाँ कुछ विशेषताएं हैं विधियों को संबंधित तरीकों में लपेटा जाता है

    • अच्छी तरह से प्रलेखित
  • 1

    मुझे समस्या मिली है। यह पैरामीटर के साथ है जो हम आवर्ती भुगतान फ़ंक्शन बनाने के लिए पास करते हैं। यहां अनुबंध और भुगतान निर्माण के लिए कार्य हैं। यह ठीक काम करना चाहिए।

    <?php 
    
    namespace App\Http\Controllers; 
    
    use Payum\Core\Request\GetHumanStatus; 
    use Payum\LaravelPackage\Controller\PayumController; 
    use Payum\Paypal\ExpressCheckout\Nvp\Api; 
    use Payum\Core\Request\Sync; 
    use Payum\Paypal\ExpressCheckout\Nvp\Request\Api\CreateRecurringPaymentProfile; 
    use Illuminate\Http\Request; 
    use App\Http\Requests; 
    use App\Http\Controllers\Controller; 
    
    class PayPalController extends PayumController { 
    
        public function prepareSubscribeAgreement() { 
    
         $storage = $this->getPayum()->getStorage('Payum\Core\Model\ArrayObject'); 
    
         $details = $storage->create(); 
         $details['PAYMENTREQUEST_0_AMT'] = 0; 
         $details['L_BILLINGTYPE0'] = Api::BILLINGTYPE_RECURRING_PAYMENTS; 
         $details['L_BILLINGAGREEMENTDESCRIPTION0'] = "Weather subscription"; 
         //$details['NOSHIPPING'] = 1; 
         $storage->update($details); 
    
         $captureToken = $this->getPayum()->getTokenFactory()->createCaptureToken('paypal_ec', $details, 'paypal_subscribe'); 
    
         return \Redirect::to($captureToken->getTargetUrl()); 
        } 
    
        public function createSubscribePayment(Request $request) { 
         $request->attributes->set('payum_token', $request->input('payum_token')); 
    
         $token = $this->getPayum()->getHttpRequestVerifier()->verify($request); 
         $gateway = $this->getPayum()->getGateway($token->getGatewayName()); 
    
         $agreementStatus = new GetHumanStatus($token); 
         $gateway->execute($agreementStatus); 
    
         if (!$agreementStatus->isCaptured()) { 
          header('HTTP/1.1 400 Bad Request', true, 400); 
          exit; 
         } 
    
         $agreement = $agreementStatus->getModel(); 
    
         $storage = $this->getPayum()->getStorage('Payum\Core\Model\ArrayObject'); 
    
         $recurringPayment = $storage->create(); 
         $recurringPayment['TOKEN'] = $agreement['TOKEN']; 
         $recurringPayment['PAYERID'] = $agreement['PAYERID']; 
         $recurringPayment['PROFILESTARTDATE'] = date(DATE_ATOM); 
         $recurringPayment['DESC'] = $agreement['L_BILLINGAGREEMENTDESCRIPTION0']; 
         $recurringPayment['BILLINGPERIOD'] = Api::BILLINGPERIOD_DAY; 
         $recurringPayment['BILLINGFREQUENCY'] = 7; 
         $recurringPayment['AMT'] = 0.05; 
         $recurringPayment['CURRENCYCODE'] = 'USD'; 
         $recurringPayment['COUNTRYCODE'] = 'US'; 
         $recurringPayment['MAXFAILEDPAYMENTS'] = 3; 
    
         $gateway->execute(new CreateRecurringPaymentProfile($recurringPayment)); 
         $gateway->execute(new Sync($recurringPayment)); 
    
         $captureToken = $this->getPayum()->getTokenFactory()->createCaptureToken('paypal_ec', $recurringPayment, 'payment_done'); 
    
         return \Redirect::to($captureToken->getTargetUrl()); 
        } 
    
        public function done(Request $request) { 
         /** @var Request $request */ 
         //$request = \App::make('request'); 
         $request->attributes->set('payum_token', $request->input('payum_token')); 
    
         $token = $this->getPayum()->getHttpRequestVerifier()->verify($request); 
         $gateway = $this->getPayum()->getGateway($token->getGatewayName()); 
    
         $gateway->execute($status = new GetHumanStatus($token)); 
    
         return \Response::json(array(
            'status' => $status->getValue(), 
            'details' => iterator_to_array($status->getFirstModel()) 
         )); 
        } 
    
    } 
    

    मार्गों:

    Route::get('paypal/agreement', '[email protected]'); 
        Route::get('paypal/subscribe', [ 
         'as' => 'paypal_subscribe', 
         'uses' => '[email protected]' 
        ]); 
        Route::get('paydone', [ 
         'as' => 'payment_done', 
         'uses' => '[email protected]' 
        ]); 
    

    सीधे शब्दों में खुला www.example.com/paypal/agreement और यह पेपैल पर ले जाना चाहिए

    +0

    एमेर का उपयोग करता है, आपका कोड साझा करने के लिए धन्यवाद। मुझे और कई अन्य लोगों को डॉक्यूमेनेशन की कमी के कारण कई मुद्दों का सामना करना पड़ रहा है। यदि आपने लार्वेल में इस पैकेज को सफलतापूर्वक एकीकृत किया है, तो मैं आपको एक गिट रेपो बनाने और एक कार्यरत पेपैल डेमो + आईपीएन रिज़ॉल्वर साझा करने के लिए सुझाव दूंगा। यह निश्चित रूप से मेरा दिन बना देगा, बहुत बहुत धन्यवाद :) –

    संबंधित मुद्दे