{"id":27945,"date":"2021-05-15T11:59:00","date_gmt":"2021-05-15T08:59:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=27945"},"modified":"2021-10-17T04:56:43","modified_gmt":"2021-10-17T01:56:43","slug":"paykun-payment-gateway-integration-i-laravel","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/sv\/paykun-payment-gateway-integration-i-laravel\/","title":{"rendered":"PayKun Payment Gateway-integration i Laravel"},"content":{"rendered":"<p>Driver du en webbutik i Indien? D\u00e5 letar du f\u00f6rmodligen efter en betalningsgateway genom vilken din kund kan betala online.<\/p>\n<p><a href=\"https:\/\/paykun.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PayKun<\/a> \u00e4r en indisk betalningsport som accepterar betalning online med kreditkort, n\u00e4tbank, pl\u00e5nbok och UPI. De tillhandah\u00e5ller tv\u00e5 typer av planer f\u00f6r handlare &#8211; standarder och f\u00f6retag. Du kan kolla in deras plan p\u00e5 <a href=\"https:\/\/paykun.com\/pricing\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">prissidan<\/a>. I den h\u00e4r artikeln studerar vi hur man integrerar PayKun betalningsgateway i Laravel.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20607-60820dd485eb9.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20607-60820dd485eb9.jpg\" alt=\"PayKun Payment Gateway-integration i Laravel\" ><\/a><\/p>\n<h3>Komma ig\u00e5ng<\/h3>\n<p>F\u00f6r att komma ig\u00e5ng med PayKun-integrationen i Laravel m\u00e5ste du f\u00f6rst skapa ett konto p\u00e5 <a href=\"https:\/\/dashboard.paykun.com\/register\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PayKun<\/a>. N\u00e4r du skapar konto genererar du API-nycklar fr\u00e5n <strong>Inst\u00e4llningar-&gt; S\u00e4kerhet-&gt; API-nyckel<\/strong>.<\/p>\n<p>Vi rekommenderar att du f\u00f6rst f\u00f6rs\u00f6ker integrera med sandl\u00e5dan och om allt fungerar som f\u00f6rv\u00e4ntat g\u00e5r du till produktion. Du kan skapa sandbox API-nycklar f\u00f6r en sandbox-milj\u00f6 p\u00e5 samma s\u00e4tt som produktion. F\u00f6r att komma in i sandl\u00e5dans instrumentpanel, klicka p\u00e5 ikonen uppe till h\u00f6ger och sedan p\u00e5 &quot;Testl\u00e4ge&quot;.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20607-60820dd4e751e.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20607-60820dd4e751e.png\" alt=\"PayKun Payment Gateway-integration i Laravel\" ><\/a><\/p>\n<p>H\u00e4mta sedan ditt s\u00e4ljar-id fr\u00e5n <strong>Mina konton-&gt; Profil<\/strong>.<\/p>\n<h3>Grundl\u00e4ggande installation i Laravel f\u00f6r att acceptera betalning med PayKun<\/h3>\n<p>F\u00f6r att kunna hantera betalning med PayKun kr\u00e4vs s\u00e4ljar-id och API-nycklar. S\u00e5 l\u00e4gg till dessa v\u00e4rden i <code>.env<\/code>filen.<\/p>\n<pre><code>PAYKUN_ACCESS_TOKEN=PASTE_ACCESS_TOKEN_HERE\nPAYKUN_KEY_SECRET=PASTE_API_KEY_SECRET_HERE\nPAYKUN_MERCHANT_ID=PASTE_MERCHANT_ID_HERE<\/code><\/pre>\n<p>N\u00e4r dina anv\u00e4ndare g\u00f6r en betalning m\u00e5ste du lagra deras transaktionsinformation i databasen f\u00f6r senare anv\u00e4ndning. S\u00e5, l\u00e5t oss skapa migration med kommandot:<\/p>\n<pre><code>php artisan make:migration create_payments_table<\/code><\/pre>\n<p>\u00d6ppna den h\u00e4r migreringsfilen och l\u00e4gg till koden nedan i uppmetoden.<\/p>\n<pre><code>&lt;?php\n...\n...\n\u00a0\npublic function up()\n{\n\u00a0\u00a0\u00a0\u00a0Schema::create('payments', function (Blueprint $table) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;bigIncrements('id');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('payment_id');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('payer_email');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('payer_mobile');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;float('amount', 10, 2);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('payment_status');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;timestamps();\n\u00a0\u00a0\u00a0\u00a0});\n}<\/code><\/pre>\n<p>K\u00f6r denna migrering med kommando:<\/p>\n<pre><code>php artisan migrate<\/code><\/pre>\n<p>Denna migrering skapar en &quot;betalningstabell&quot; i din databas. Eftersom vi beh\u00f6ver lagra transaktioner i denna tabell, skapa en modell &#8217;Betalning&#8217; motsvarar &#8217;betalningstabellen.<\/p>\n<pre><code>php artisan make:model Payment<\/code><\/pre>\n<p>Vi \u00e4r alla inst\u00e4llda p\u00e5 grundl\u00e4ggande installation och kan forts\u00e4tta integrera PayKun-biblioteket i v\u00e5rt Laravel-projekt.<\/p>\n<h3>PayKun Payment Gateway-integration i Laravel<\/h3>\n<p>PayKun har tillhandah\u00e5llit SDK: er f\u00f6r PHP, .NET, Java, Python, etc. Vi ska anv\u00e4nda deras <a href=\"https:\/\/github.com\/paykun-code\/paykun-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">GitHub-bibliotek<\/a> skapat f\u00f6r PHP-applikationer.<\/p>\n<p>Installera PayKun-biblioteket i ditt Laravel-projekt med f\u00f6ljande komposit\u00f6rskommando:<\/p>\n<pre><code>composer require paykun\/checkout<\/code><\/pre>\n<p>Om du l\u00e4ser p\u00e5 deras GitHub-sida kan du l\u00e4gga till s\u00e5 m\u00e5nga f\u00e4lt som kund-, fakturerings- och leveransinformation. Men f\u00f6r handledningens skull tar vi bara m\u00e4ngdsf\u00e4ltet. Anv\u00e4ndarna kan ut\u00f6ka formul\u00e4ret enligt deras krav.<\/p>\n<p><strong>payment.blade.php<\/strong><\/p>\n<pre><code>&lt;form action=\"{{ url('charge') }}\" method=\"post\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;input type=\"text\" name=\"amount\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0{{ csrf_field() }}\n\u00a0\u00a0\u00a0\u00a0&lt;input type=\"submit\" name=\"submit\" value=\"Pay Now\"&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Vi skickade \u00e5tg\u00e4rds-URL: en till rutten &quot;avgift&quot;. Du kommer att beh\u00f6va n\u00e5gra rutter som framg\u00e5ngs-URL, misslyckad URL, avgift etc. L\u00e5t oss definiera det enligt f\u00f6ljande.<\/p>\n<p><strong>rutter \/ web.php<\/strong><\/p>\n<pre><code>Route::get('payment', 'PaymentController@index');\nRoute::post('charge', 'PaymentController@charge');\nRoute::get('paymentsuccess', 'PaymentController@payment_success');\nRoute::get('paymenterror', 'PaymentController@payment_error');<\/code><\/pre>\n<p>N\u00e4sta sak som beh\u00f6ver g\u00f6ras \u00e4r att skapa en kontrollerfil som samlar in beloppet, skickar en anv\u00e4ndare till PayKun-webbplatsen f\u00f6r att hantera betalningen och sedan slutligen infoga transaktionsuppgifterna i databasen.<\/p>\n<pre><code>php artisan make:controller PaymentController<\/code><\/pre>\n<p>L\u00e4gg till koden nedan i den h\u00e4r kontrollfilen som hanterar alla betalningsrelaterade saker.<\/p>\n<p><strong>PaymentController.php<\/strong><\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllers;\n\u00a0\nuse IlluminateHttpRequest;\nuse PaykunCheckoutPayment;\nuse AppPayment as PaymentModel;\n\u00a0\nclass PaymentController extends Controller\n{\n\u00a0\u00a0\u00a0\u00a0public $gateway;\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function __construct()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;gateway = new Payment(env('PAYKUN_MERCHANT_ID'), env('PAYKUN_ACCESS_TOKEN'), env('PAYKUN_KEY_SECRET'), false); \/\/ here we pass last parameter as false to enable sandbox mode.\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function index()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return view('payment');\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function charge(Request $request)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($request-&gt;input('submit'))\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0try {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;gateway-&gt;setCustomFields(array('udf_1' =&gt; 'test')); \/\/remove or comment this line when go live\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;gateway-&gt;initOrder('ORD'.uniqid(), 'My Product Name', $request-&gt;input('amount'), url('paymentsuccess'), url('paymenterror'));\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Add Customer\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;gateway-&gt;addCustomer('', '', '');\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Add Shipping address\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;gateway-&gt;addShippingAddress('', '', '', '', '');\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Add Billing Address\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;gateway-&gt;addBillingAddress('', '', '', '', '');\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $this-&gt;gateway-&gt;submit();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $e-&gt;getMessage();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function payment_success(Request $request)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($request-&gt;input('payment-id'))\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$transactionData = $this-&gt;gateway-&gt;getTransactionInfo($request-&gt;input('payment-id'));\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($transactionData['status'])\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$arr_transaction = $transactionData['data']['transaction'];\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Check if payment_id already exists in the database\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$isPaymentExist = PaymentModel::where('payment_id', $arr_transaction['payment_id'])-&gt;first();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if(!$isPaymentExist)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment = new PaymentModel;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment-&gt;payment_id = $arr_transaction['payment_id'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment-&gt;payer_email = $arr_transaction['customer']['email_id'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment-&gt;payer_mobile = $arr_transaction['customer']['mobile_no'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment-&gt;amount = $arr_transaction['order']['gross_amount'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment-&gt;payment_status = $arr_transaction['status'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment-&gt;save();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"Payment is successful. Your transaction id is: \". $arr_transaction['payment_id'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function payment_error(Request $request)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"Something went wrong. Try again later.\";\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Om du tittar p\u00e5 konstruktorkoden skickade vi den sista parametern som &#8217;falsk&#8217; (booleskt v\u00e4rde). N\u00e4r du g\u00e5r live beh\u00f6ver du inte skicka den h\u00e4r parametern. Ta ocks\u00e5 bort eller kommentera nedanst\u00e5ende rad i produktionsl\u00e4get i metoden &quot;laddning&quot;.<\/p>\n<pre><code>$this-&gt;gateway-&gt;setCustomFields(array('udf_1' =&gt; 'test'));<\/code><\/pre>\n<p>N\u00e4r du testar betalning med sandl\u00e5da m\u00e5ste du ange dummy kreditkortsnummer som du f\u00e5r <a href=\"https:\/\/devzone.paylane.com\/integration-testing\/test-card-numbers\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">h\u00e4r<\/a>.<\/p>\n<p>Det \u00e4r allt! Vi hoppas att du f\u00f6rst\u00e5r PayKun-betalningsgateway-integrationen i Laravel. Vi vill h\u00f6ra dina tankar i kommentarsektionen nedan.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I den h\u00e4r artikeln studerar vi PayKun-betalningsgatewayintegration i Laravel. PayKun \u00e4r en indisk betalningsport som accepterar betalning med kreditkort, UPI,<\/p>\n","protected":false},"author":1,"featured_media":20608,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[211,503],"tags":[850],"class_list":["post-27945","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-elementor-10","category-laravel2-10","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/27945","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/comments?post=27945"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/27945\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media\/20608"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media?parent=27945"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/categories?post=27945"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/tags?post=27945"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}