
What is the Paytm Payment Gateway?
Paytm is one of India’s most widely used digital payment platforms, offering a payment gateway that allows businesses to accept online payments through credit cards, debit cards, net banking, UPI, and Paytm Wallet. By integrating the Paytm Payment Gateway into your Ruby on Rails application, you can provide users with a seamless and secure checkout experience. Paytm handles the payment processing, tokenization, and transaction verification, while your Rails app manages the order flow and callback handling. In this guide, we will walk through the complete integration process, from setting up your developer account to building clean service objects for payment initiation and verification.
Terms you need to know before proceeding further

MID: This is a unique identifier provided to every merchant by Paytm. MID is part of your account credentials and is different in the staging and production environments. Your staging MID is available here and production MID will be available once your activation is complete.
Merchant Key: This is a unique secret key used for secure encryption of every request. This needs to be kept on the server-side and should not be shared with anyone.
CHANNEL_ID:This parameter is used to control the theme of the payment page. Based on the channel passed, Paytm will render the layout suitable for that specific platform For websites, the value is WEB For Mobile websites/App, the value is WAP
WEBSITE: For staging environment: WEBSTAGING,
For production environment: Will be available here once your activation is completeli>INDUSTRY_TYPE_ID:For staging environment: “Retail”,For production environment: Will be available here once your activation is complete.
CALLBACK_URL:On completion of the transaction, the Paytm payment gateway will send the response on this URL. Sample URL is – https://merchant.com/callback/
Payment_url:when start payment it’s redirecting to payment gateway. In that, we can not go back or not refresh the page.
These are the steps to integrate Paytm as a payment gateway in your rails app
Step 1:Need to create developer account from here: create account
Step 2:After successful account creation, Grab below credentials from Paytm and place it inside secrets.yml or credentials.yml
Test Merchant ID = ”
Test Merchant Key = ”
Website = WEBSTAGING
Industry Type = Retail
Channel ID (For Website) = WEB
Channel ID (For Mobile Apps) = WAP
transaction_url: https://securegw-stage.paytm.in/theia/processTransaction
Step 3:We need to process and verify the payment. Create one controller named paytm_controller.rb
<span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">PaytmController</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span> ApplicationController <span class="token keyword keyword-include" style="box-sizing: border-box; color: rgb(0, 119, 170);">include</span> PaytmHelper skip_before_action <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:verify_authenticity_token</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">start_payment</span></span> start_payment <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Paytm<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">StartPaymentService</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>params<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> request<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> start_payment<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>call <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> start_payment<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>checksum <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmParam</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> start_payment<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>paytmParam <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">verify_payment</span></span> paytm_verify <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Paytm<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">VerifyPaymentService</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>params<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@cart</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> paytm_verify<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>call <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytm_verify<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>paytmparams <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@is_valid_checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytm_verify<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>is_valid_checksum <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@is_valid_checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">true</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"STATUS"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"TXN_SUCCESS"</span></span> respond_to <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>format<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> format<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>html <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-else" style="box-sizing: border-box; color: rgb(0, 119, 170);">else</span> respond_to <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>format<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> format<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>html <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span
<span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">PaytmController</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span> ApplicationController <span class="token keyword keyword-include" style="box-sizing: border-box; color: rgb(0, 119, 170);">include</span> PaytmHelper skip_before_action <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:verify_authenticity_token</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">start_payment</span></span> start_payment <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Paytm<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">StartPaymentService</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>params<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> request<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> start_payment<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>call <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> start_payment<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>checksum <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmParam</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> start_payment<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>paytmParam <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">verify_payment</span></span> paytm_verify <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Paytm<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">VerifyPaymentService</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>params<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@cart</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> paytm_verify<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>call <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytm_verify<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>paytmparams <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@is_valid_checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytm_verify<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>is_valid_checksum <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@is_valid_checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">true</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"STATUS"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"TXN_SUCCESS"</span></span> respond_to <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>format<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> format<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>html <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-else" style="box-sizing: border-box; color: rgb(0, 119, 170);">else</span> respond_to <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>format<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> format<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>html <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span
<span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">PaytmController</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span> ApplicationController <span class="token keyword keyword-include" style="box-sizing: border-box; color: rgb(0, 119, 170);">include</span> PaytmHelper skip_before_action <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:verify_authenticity_token</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">start_payment</span></span> start_payment <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Paytm<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">StartPaymentService</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>params<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> request<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> start_payment<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>call <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> start_payment<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>checksum <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmParam</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> start_payment<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>paytmParam <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">verify_payment</span></span> paytm_verify <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Paytm<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">VerifyPaymentService</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>params<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@cart</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> paytm_verify<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>call <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytm_verify<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>paytmparams <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@is_valid_checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytm_verify<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>is_valid_checksum <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@is_valid_checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">true</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"STATUS"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"TXN_SUCCESS"</span></span> respond_to <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>format<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> format<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>html <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-else" style="box-sizing: border-box; color: rgb(0, 119, 170);">else</span> respond_to <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>format<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> format<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>html <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span
Step 4:Add service in your app. We make services for controller code refactoraccount
start_payment_service.rb
<span class="token keyword keyword-include" style="box-sizing: border-box; color: rgb(0, 119, 170);">include</span> PaytmHelper <span class="token keyword keyword-module" style="box-sizing: border-box; color: rgb(0, 119, 170);">module</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">Paytm</span> <span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">StartPaymentService</span> attr <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:request</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:paytmParam</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:checksum</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">initialize</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>attribute<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> request<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@request</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> request <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">call</span></span> get_param_list <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-private" style="box-sizing: border-box; color: rgb(0, 119, 170);">private</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">get_param_list</span></span> paytmParam <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">Hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"MID"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Rails<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>application<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>credentials<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:merchant_ID</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"ORDER_ID"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"</span><span class="token interpolation" style="box-sizing: border-box;"><span class="token delimiter punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">#{</span><span class="token content" style="box-sizing: border-box;"><span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Time</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>now<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_i<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s</span><span class="token delimiter punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">}</span></span><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"</span></span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"CUST_ID"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"</span><span class="token interpolation" style="box-sizing: border-box;"><span class="token delimiter punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">#{</span><span class="token content" style="box-sizing: border-box;"><span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Time</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>now<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_i<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s</span><span class="token delimiter punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">}</span></span><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"</span></span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"INDUSTRY_TYPE_ID"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Rails<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>application<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>credentials<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:industry_type</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"CHANNEL_ID"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Rails<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>application<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>credentials<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:channel_web_ID</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"TXN_AMOUNT"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">1</span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"WEBSITE"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Rails<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>application<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>credentials<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:website</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"CALLBACK_URL"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"</span><span class="token interpolation" style="box-sizing: border-box;"><span class="token delimiter punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">#{</span><span class="token content" style="box-sizing: border-box;">request<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>protocol <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> request<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>host_with_port</span><span class="token delimiter punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">}</span></span><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">/confirm_payment"</span></span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmParam</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span>paytmParam <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@checksum</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span>generate_checksum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span
<span class="token keyword keyword-include" style="box-sizing: border-box; color: rgb(0, 119, 170);">include</span> PaytmHelper <span class="token keyword keyword-module" style="box-sizing: border-box; color: rgb(0, 119, 170);">module</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">Paytm</span> <span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">StartPaymentService</span> attr <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:request</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:paytmParam</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:checksum</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">initialize</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>attribute<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> request<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@request</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> request <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">call</span></span> get_param_list <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-private" style="box-sizing: border-box; color: rgb(0, 119, 170);">private</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">get_param_list</span></span> paytmParam <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">Hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"MID"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Rails<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>application<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>credentials<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:merchant_ID</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"ORDER_ID"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"</span><span class="token interpolation" style="box-sizing: border-box;"><span class="token delimiter punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">#{</span><span class="token content" style="box-sizing: border-box;"><span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Time</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>now<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_i<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s</span><span class="token delimiter punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">}</span></span><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"</span></span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"CUST_ID"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"</span><span class="token interpolation" style="box-sizing: border-box;"><span class="token delimiter punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">#{</span><span class="token content" style="box-sizing: border-box;"><span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Time</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>now<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_i<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s</span><span class="token delimiter punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">}</span></span><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"</span></span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"INDUSTRY_TYPE_ID"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Rails<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>application<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>credentials<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:industry_type</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"CHANNEL_ID"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Rails<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>application<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>credentials<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:channel_web_ID</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"TXN_AMOUNT"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">1</span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"WEBSITE"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Rails<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>application<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>credentials<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:website</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"CALLBACK_URL"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"</span><span class="token interpolation" style="box-sizing: border-box;"><span class="token delimiter punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">#{</span><span class="token content" style="box-sizing: border-box;">request<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>protocol <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> request<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>host_with_port</span><span class="token delimiter punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">}</span></span><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">/confirm_payment"</span></span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmParam</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span>paytmParam <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@checksum</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span>generate_checksum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span
<span class="token keyword keyword-include" style="box-sizing: border-box; color: rgb(0, 119, 170);">include</span> PaytmHelper <span class="token keyword keyword-module" style="box-sizing: border-box; color: rgb(0, 119, 170);">module</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">Paytm</span> <span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">StartPaymentService</span> attr <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:request</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:paytmParam</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:checksum</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">initialize</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>attribute<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> request<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@request</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> request <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">call</span></span> get_param_list <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-private" style="box-sizing: border-box; color: rgb(0, 119, 170);">private</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">get_param_list</span></span> paytmParam <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">Hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"MID"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Rails<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>application<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>credentials<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:merchant_ID</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"ORDER_ID"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"</span><span class="token interpolation" style="box-sizing: border-box;"><span class="token delimiter punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">#{</span><span class="token content" style="box-sizing: border-box;"><span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Time</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>now<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_i<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s</span><span class="token delimiter punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">}</span></span><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"</span></span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"CUST_ID"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"</span><span class="token interpolation" style="box-sizing: border-box;"><span class="token delimiter punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">#{</span><span class="token content" style="box-sizing: border-box;"><span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Time</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>now<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_i<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s</span><span class="token delimiter punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">}</span></span><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"</span></span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"INDUSTRY_TYPE_ID"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Rails<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>application<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>credentials<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:industry_type</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"CHANNEL_ID"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Rails<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>application<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>credentials<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:channel_web_ID</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"TXN_AMOUNT"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">1</span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"WEBSITE"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Rails<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>application<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>credentials<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:website</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> paytmParam<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"CALLBACK_URL"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"</span><span class="token interpolation" style="box-sizing: border-box;"><span class="token delimiter punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">#{</span><span class="token content" style="box-sizing: border-box;">request<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>protocol <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> request<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>host_with_port</span><span class="token delimiter punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">}</span></span><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">/confirm_payment"</span></span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmParam</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span>paytmParam <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@checksum</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span>generate_checksum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span
verify_payment_service.rb
<span class="token keyword keyword-include" style="box-sizing: border-box; color: rgb(0, 119, 170);">include</span> PaytmHelper <span class="token keyword keyword-module" style="box-sizing: border-box; color: rgb(0, 119, 170);">module</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">Paytm</span> <span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">VerifyPaymentService</span> attr_reader <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:keys</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:paytmparams</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:is_valid_checksum</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">initialize</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>attribute<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> cart<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@attribute</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> attribute <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@keys</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> attribute<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">call</span></span> paytm_params <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-private" style="box-sizing: border-box; color: rgb(0, 119, 170);">private</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">paytm_params</span></span> paytmparams <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">Hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@keys</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@attribute</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@checksum_hash</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"CHECKSUMHASH"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>delete<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"CHECKSUMHASH"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>delete<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"controller"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>delete<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"action"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@is_valid_checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> verify_checksum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span
<span class="token keyword keyword-include" style="box-sizing: border-box; color: rgb(0, 119, 170);">include</span> PaytmHelper <span class="token keyword keyword-module" style="box-sizing: border-box; color: rgb(0, 119, 170);">module</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">Paytm</span> <span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">VerifyPaymentService</span> attr_reader <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:keys</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:paytmparams</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:is_valid_checksum</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">initialize</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>attribute<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> cart<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@attribute</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> attribute <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@keys</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> attribute<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">call</span></span> paytm_params <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-private" style="box-sizing: border-box; color: rgb(0, 119, 170);">private</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">paytm_params</span></span> paytmparams <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">Hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@keys</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@attribute</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@checksum_hash</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"CHECKSUMHASH"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>delete<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"CHECKSUMHASH"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>delete<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"controller"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>delete<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"action"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@is_valid_checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> verify_checksum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span
<span class="token keyword keyword-include" style="box-sizing: border-box; color: rgb(0, 119, 170);">include</span> PaytmHelper <span class="token keyword keyword-module" style="box-sizing: border-box; color: rgb(0, 119, 170);">module</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">Paytm</span> <span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">VerifyPaymentService</span> attr_reader <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:keys</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:paytmparams</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:is_valid_checksum</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">initialize</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>attribute<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> cart<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@attribute</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> attribute <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@keys</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> attribute<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">call</span></span> paytm_params <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-private" style="box-sizing: border-box; color: rgb(0, 119, 170);">private</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">paytm_params</span></span> paytmparams <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">Hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@keys</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@attribute</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@checksum_hash</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"CHECKSUMHASH"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>delete<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"CHECKSUMHASH"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>delete<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"controller"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>delete<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"action"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@is_valid_checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> verify_checksum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span
Step 5:Add routes in routes.rb file
match <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'/paytm_payment'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'paytm#start_payment'</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">via</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">:</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:post</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:as</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:paytm_payment</span> match <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'/confirm_payment'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'paytm#verify_payment'</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">via</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">:</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:post</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span
match <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'/paytm_payment'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'paytm#start_payment'</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">via</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">:</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:post</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:as</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:paytm_payment</span> match <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'/confirm_payment'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'paytm#verify_payment'</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">via</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">:</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:post</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span
match <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'/paytm_payment'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'paytm#start_payment'</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">via</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">:</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:post</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:as</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:paytm_payment</span> match <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'/confirm_payment'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'paytm#verify_payment'</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">via</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">:</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:post</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span
Step 6:Reduce logic from view file, create one helper named paytm_helper.rb
<span class="token keyword keyword-module" style="box-sizing: border-box; color: rgb(0, 119, 170);">module</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">PaytmHelper</span> <span class="token keyword keyword-require" style="box-sizing: border-box; color: rgb(0, 119, 170);">require</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'paytm/encryption_new_pg.rb'</span></span> <span class="token keyword keyword-include" style="box-sizing: border-box; color: rgb(0, 119, 170);">include</span> EncryptionNewPG <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">generate_checksum</span></span> new_pg_checksum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmParam</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> Rails<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>application<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>credentials<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:merchant_key</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">verify_checksum</span></span> new_pg_verify_checksum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@checksum_hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> Rails<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>application<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>credentials<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:merchant_key</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span
<span class="token keyword keyword-module" style="box-sizing: border-box; color: rgb(0, 119, 170);">module</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">PaytmHelper</span> <span class="token keyword keyword-require" style="box-sizing: border-box; color: rgb(0, 119, 170);">require</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'paytm/encryption_new_pg.rb'</span></span> <span class="token keyword keyword-include" style="box-sizing: border-box; color: rgb(0, 119, 170);">include</span> EncryptionNewPG <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">generate_checksum</span></span> new_pg_checksum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmParam</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> Rails<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>application<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>credentials<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:merchant_key</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">verify_checksum</span></span> new_pg_verify_checksum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@checksum_hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> Rails<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>application<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>credentials<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:merchant_key</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span
<span class="token keyword keyword-module" style="box-sizing: border-box; color: rgb(0, 119, 170);">module</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">PaytmHelper</span> <span class="token keyword keyword-require" style="box-sizing: border-box; color: rgb(0, 119, 170);">require</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'paytm/encryption_new_pg.rb'</span></span> <span class="token keyword keyword-include" style="box-sizing: border-box; color: rgb(0, 119, 170);">include</span> EncryptionNewPG <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">generate_checksum</span></span> new_pg_checksum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmParam</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> Rails<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>application<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>credentials<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:merchant_key</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">verify_checksum</span></span> new_pg_verify_checksum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@checksum_hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> Rails<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>application<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>credentials<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:merchant_key</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span
Step 7:We will add encyption_new_pg.rb file for encrypt data in module named encryption_new_pg.rb inside helpers/paytm folder
<span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">######################################## Encryption module #########################################</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">############################ AES 128-bit encryption with SHA256 Hash ###############################</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">####################################### New PG Encryption ##########################################</span> <span class="token keyword keyword-module" style="box-sizing: border-box; color: rgb(0, 119, 170);">module</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">EncryptionNewPG</span> <span class="token keyword keyword-require" style="box-sizing: border-box; color: rgb(0, 119, 170);">require</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'openssl'</span></span> <span class="token keyword keyword-require" style="box-sizing: border-box; color: rgb(0, 119, 170);">require</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'base64'</span></span> <span class="token keyword keyword-require" style="box-sizing: border-box; color: rgb(0, 119, 170);">require</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'digest'</span></span> <span class="token keyword keyword-require" style="box-sizing: border-box; color: rgb(0, 119, 170);">require</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'securerandom'</span></span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns dictionary of encrypted data ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a dictionary with data and key to encrypt with ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### can accept multiple key value pairs in the dictionary ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_encrypt</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">||</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>has_key<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:key</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> encrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>delete<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:key</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">###aes = OpenSSL::Cipher::Cipher.new("aes-128-cbc")</span> aes <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> OpenSSL<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span>Cipher<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">AES</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'128-CBC'</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-begin" style="box-sizing: border-box; color: rgb(0, 119, 170);">begin</span> keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>encrypt aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> key aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>iv <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'@@@@&&&&####$$$$'</span></span> encrypted_k <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>update<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>final encrypted_k <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>encode64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>encrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>encrypt aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> key aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>iv <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'@@@@&&&&####$$$$'</span></span> encrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>encrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>update<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>final encrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>encrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>encode64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>encrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>encrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-rescue" style="box-sizing: border-box; color: rgb(0, 119, 170);">rescue</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Exception</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> e <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> encrypted_data <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns a single encrypted value ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### input data -> value to be encrypted ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### key -> key to use for encryption ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_encrypt_variable</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">##aes = OpenSSL::Cipher::Cipher.new("aes-128-cbc")</span> aes <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> OpenSSL<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span>Cipher<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">AES</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'128-CBC'</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>encrypt aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> key aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>iv <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'@@@@&&&&####$$$$'</span></span> encrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> <span class="token keyword keyword-begin" style="box-sizing: border-box; color: rgb(0, 119, 170);">begin</span> encrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>update<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>final encrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>encode64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>encrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-rescue" style="box-sizing: border-box; color: rgb(0, 119, 170);">rescue</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Exception</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> e <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> encrypted_data <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns dictionary of decrypted data ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a dictionary with data and key to decrypt with ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### can accept multiple key value pairs in the dictionary ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_decrypt</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">||</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>has_key<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:key</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> decrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>delete<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:key</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">##aes = OpenSSL::Cipher::Cipher.new("aes-128-cbc")</span> aes <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> OpenSSL<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span>Cipher<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">AES</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'128-CBC'</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-begin" style="box-sizing: border-box; color: rgb(0, 119, 170);">begin</span> keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>decrypt aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> key aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>iv <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'@@@@&&&&####$$$$'</span></span> decrypted_k <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>decode64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> decrypted_k <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>update<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>decrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>final <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> decrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>decrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">""</span></span> <span class="token keyword keyword-next" style="box-sizing: border-box; color: rgb(0, 119, 170);">next</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>decrypt aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> key aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>iv <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'@@@@&&&&####$$$$'</span></span> data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>decode64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> decrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>decrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>update<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>final <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-rescue" style="box-sizing: border-box; color: rgb(0, 119, 170);">rescue</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Exception</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> e <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> decrypted_data <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns a single decrypted value ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### input data -> value to be decrypted ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### key -> key to use for decryption ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_decrypt_variable</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">##aes = OpenSSL::Cipher::Cipher.new("aes-128-cbc")</span> aes <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> OpenSSL<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span>Cipher<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">AES</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'128-CBC'</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>decrypt aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> key aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>iv <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'@@@@&&&&####$$$$'</span></span> decrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> <span class="token keyword keyword-begin" style="box-sizing: border-box; color: rgb(0, 119, 170);">begin</span> decrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>decode64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> decrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>update<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>decrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>final <span class="token keyword keyword-rescue" style="box-sizing: border-box; color: rgb(0, 119, 170);">rescue</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Exception</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> e <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> decrypted_data <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_generate_salt</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> salt <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> SecureRandom<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>urlsafe_base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>length<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">*</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">3.0</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">/</span><span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">4.0</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> salt<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns checksum of given key value pairs ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a hash with key value pairs ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### calculates sha256 checksum of given values ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_checksum</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> salt_length <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">4</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> salt <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_generate_salt<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>salt_length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>sort keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-next" style="box-sizing: border-box; color: rgb(0, 119, 170);">next</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Digest<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token constant" style="box-sizing: border-box; color: rgb(153, 0, 85);">SHA256</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>hexdigest<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### encrypting checksum ###</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_encrypt_variable<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\r\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> check_sum <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns checksum of given String ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a hash with String ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### calculates sha256 checksum of given values ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_checksum_by_String</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>strdata<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> salt_length <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">4</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> strdata<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> salt <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_generate_salt<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>salt_length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> strdata <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Digest<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token constant" style="box-sizing: border-box; color: rgb(153, 0, 85);">SHA256</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>hexdigest<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### encrypting checksum ###</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_encrypt_variable<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\r\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> check_sum <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns checksum of given key value pairs ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a hash with key value pairs ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### calculates sha256 checksum of given values ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_refund_checksum</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> salt_length <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">4</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">#if params[k].to_s.include? "REFUND"</span> <span class="token keyword keyword-unless" style="box-sizing: border-box; color: rgb(0, 119, 170);">unless</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-include" style="box-sizing: border-box; color: rgb(0, 119, 170);">include</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"|"</span></span> <span class="token keyword keyword-next" style="box-sizing: border-box; color: rgb(0, 119, 170);">next</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> salt <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_generate_salt<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>salt_length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>sort keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-next" style="box-sizing: border-box; color: rgb(0, 119, 170);">next</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Digest<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token constant" style="box-sizing: border-box; color: rgb(153, 0, 85);">SHA256</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>hexdigest<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### encrypting checksum ###</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_encrypt_variable<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\r\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> check_sum <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns checksum of given key value pairs (must contain the :checksum key) ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a hash with key value pairs ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### calculates sha256 checksum of given values ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### returns true if checksum is consistent ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### returns false in case of inconsistency ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_verify_checksum_by_String</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>strdata<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> salt_length <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">4</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> strdata<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">||</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\r\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_decrypt_variable<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-begin" style="box-sizing: border-box; color: rgb(0, 119, 170);">begin</span> salt <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>length<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">-</span>salt_length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> strdata <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Digest<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token constant" style="box-sizing: border-box; color: rgb(153, 0, 85);">SHA256</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>hexdigest<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt <span class="token keyword keyword-rescue" style="box-sizing: border-box; color: rgb(0, 119, 170);">rescue</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Exception</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> e <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> generated_check_sum <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">true</span> <span class="token keyword keyword-else" style="box-sizing: border-box; color: rgb(0, 119, 170);">else</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns checksum of given key value pairs (must contain the :checksum key) ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a hash with key value pairs ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### calculates sha256 checksum of given values ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### returns true if checksum is consistent ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### returns false in case of inconsistency ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_verify_checksum</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> salt_length <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">4</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">||</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\r\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_decrypt_variable<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-begin" style="box-sizing: border-box; color: rgb(0, 119, 170);">begin</span> salt <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>length<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">-</span>salt_length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>sort keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-next" style="box-sizing: border-box; color: rgb(0, 119, 170);">next</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Digest<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token constant" style="box-sizing: border-box; color: rgb(153, 0, 85);">SHA256</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>hexdigest<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt <span class="token keyword keyword-rescue" style="box-sizing: border-box; color: rgb(0, 119, 170);">rescue</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Exception</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> e <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> generated_check_sum <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">true</span> <span class="token keyword keyword-else" style="box-sizing: border-box; color: rgb(0, 119, 170);">else</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span
<span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">######################################## Encryption module #########################################</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">############################ AES 128-bit encryption with SHA256 Hash ###############################</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">####################################### New PG Encryption ##########################################</span> <span class="token keyword keyword-module" style="box-sizing: border-box; color: rgb(0, 119, 170);">module</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">EncryptionNewPG</span> <span class="token keyword keyword-require" style="box-sizing: border-box; color: rgb(0, 119, 170);">require</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'openssl'</span></span> <span class="token keyword keyword-require" style="box-sizing: border-box; color: rgb(0, 119, 170);">require</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'base64'</span></span> <span class="token keyword keyword-require" style="box-sizing: border-box; color: rgb(0, 119, 170);">require</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'digest'</span></span> <span class="token keyword keyword-require" style="box-sizing: border-box; color: rgb(0, 119, 170);">require</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'securerandom'</span></span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns dictionary of encrypted data ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a dictionary with data and key to encrypt with ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### can accept multiple key value pairs in the dictionary ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_encrypt</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">||</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>has_key<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:key</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> encrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>delete<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:key</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">###aes = OpenSSL::Cipher::Cipher.new("aes-128-cbc")</span> aes <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> OpenSSL<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span>Cipher<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">AES</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'128-CBC'</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-begin" style="box-sizing: border-box; color: rgb(0, 119, 170);">begin</span> keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>encrypt aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> key aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>iv <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'@@@@&&&&####$$$$'</span></span> encrypted_k <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>update<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>final encrypted_k <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>encode64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>encrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>encrypt aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> key aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>iv <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'@@@@&&&&####$$$$'</span></span> encrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>encrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>update<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>final encrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>encrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>encode64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>encrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>encrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-rescue" style="box-sizing: border-box; color: rgb(0, 119, 170);">rescue</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Exception</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> e <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> encrypted_data <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns a single encrypted value ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### input data -> value to be encrypted ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### key -> key to use for encryption ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_encrypt_variable</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">##aes = OpenSSL::Cipher::Cipher.new("aes-128-cbc")</span> aes <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> OpenSSL<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span>Cipher<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">AES</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'128-CBC'</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>encrypt aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> key aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>iv <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'@@@@&&&&####$$$$'</span></span> encrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> <span class="token keyword keyword-begin" style="box-sizing: border-box; color: rgb(0, 119, 170);">begin</span> encrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>update<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>final encrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>encode64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>encrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-rescue" style="box-sizing: border-box; color: rgb(0, 119, 170);">rescue</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Exception</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> e <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> encrypted_data <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns dictionary of decrypted data ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a dictionary with data and key to decrypt with ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### can accept multiple key value pairs in the dictionary ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_decrypt</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">||</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>has_key<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:key</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> decrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>delete<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:key</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">##aes = OpenSSL::Cipher::Cipher.new("aes-128-cbc")</span> aes <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> OpenSSL<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span>Cipher<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">AES</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'128-CBC'</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-begin" style="box-sizing: border-box; color: rgb(0, 119, 170);">begin</span> keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>decrypt aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> key aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>iv <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'@@@@&&&&####$$$$'</span></span> decrypted_k <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>decode64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> decrypted_k <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>update<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>decrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>final <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> decrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>decrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">""</span></span> <span class="token keyword keyword-next" style="box-sizing: border-box; color: rgb(0, 119, 170);">next</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>decrypt aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> key aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>iv <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'@@@@&&&&####$$$$'</span></span> data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>decode64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> decrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>decrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>update<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>final <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-rescue" style="box-sizing: border-box; color: rgb(0, 119, 170);">rescue</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Exception</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> e <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> decrypted_data <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns a single decrypted value ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### input data -> value to be decrypted ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### key -> key to use for decryption ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_decrypt_variable</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">##aes = OpenSSL::Cipher::Cipher.new("aes-128-cbc")</span> aes <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> OpenSSL<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span>Cipher<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">AES</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'128-CBC'</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>decrypt aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> key aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>iv <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'@@@@&&&&####$$$$'</span></span> decrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> <span class="token keyword keyword-begin" style="box-sizing: border-box; color: rgb(0, 119, 170);">begin</span> decrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>decode64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> decrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>update<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>decrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>final <span class="token keyword keyword-rescue" style="box-sizing: border-box; color: rgb(0, 119, 170);">rescue</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Exception</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> e <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> decrypted_data <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_generate_salt</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> salt <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> SecureRandom<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>urlsafe_base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>length<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">*</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">3.0</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">/</span><span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">4.0</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> salt<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns checksum of given key value pairs ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a hash with key value pairs ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### calculates sha256 checksum of given values ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_checksum</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> salt_length <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">4</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> salt <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_generate_salt<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>salt_length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>sort keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-next" style="box-sizing: border-box; color: rgb(0, 119, 170);">next</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Digest<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token constant" style="box-sizing: border-box; color: rgb(153, 0, 85);">SHA256</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>hexdigest<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### encrypting checksum ###</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_encrypt_variable<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\r\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> check_sum <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns checksum of given String ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a hash with String ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### calculates sha256 checksum of given values ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_checksum_by_String</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>strdata<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> salt_length <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">4</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> strdata<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> salt <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_generate_salt<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>salt_length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> strdata <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Digest<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token constant" style="box-sizing: border-box; color: rgb(153, 0, 85);">SHA256</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>hexdigest<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### encrypting checksum ###</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_encrypt_variable<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\r\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> check_sum <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns checksum of given key value pairs ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a hash with key value pairs ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### calculates sha256 checksum of given values ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_refund_checksum</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> salt_length <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">4</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">#if params[k].to_s.include? "REFUND"</span> <span class="token keyword keyword-unless" style="box-sizing: border-box; color: rgb(0, 119, 170);">unless</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-include" style="box-sizing: border-box; color: rgb(0, 119, 170);">include</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"|"</span></span> <span class="token keyword keyword-next" style="box-sizing: border-box; color: rgb(0, 119, 170);">next</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> salt <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_generate_salt<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>salt_length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>sort keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-next" style="box-sizing: border-box; color: rgb(0, 119, 170);">next</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Digest<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token constant" style="box-sizing: border-box; color: rgb(153, 0, 85);">SHA256</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>hexdigest<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### encrypting checksum ###</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_encrypt_variable<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\r\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> check_sum <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns checksum of given key value pairs (must contain the :checksum key) ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a hash with key value pairs ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### calculates sha256 checksum of given values ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### returns true if checksum is consistent ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### returns false in case of inconsistency ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_verify_checksum_by_String</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>strdata<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> salt_length <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">4</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> strdata<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">||</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\r\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_decrypt_variable<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-begin" style="box-sizing: border-box; color: rgb(0, 119, 170);">begin</span> salt <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>length<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">-</span>salt_length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> strdata <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Digest<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token constant" style="box-sizing: border-box; color: rgb(153, 0, 85);">SHA256</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>hexdigest<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt <span class="token keyword keyword-rescue" style="box-sizing: border-box; color: rgb(0, 119, 170);">rescue</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Exception</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> e <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> generated_check_sum <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">true</span> <span class="token keyword keyword-else" style="box-sizing: border-box; color: rgb(0, 119, 170);">else</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns checksum of given key value pairs (must contain the :checksum key) ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a hash with key value pairs ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### calculates sha256 checksum of given values ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### returns true if checksum is consistent ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### returns false in case of inconsistency ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_verify_checksum</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> salt_length <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">4</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">||</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\r\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_decrypt_variable<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-begin" style="box-sizing: border-box; color: rgb(0, 119, 170);">begin</span> salt <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>length<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">-</span>salt_length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>sort keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-next" style="box-sizing: border-box; color: rgb(0, 119, 170);">next</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Digest<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token constant" style="box-sizing: border-box; color: rgb(153, 0, 85);">SHA256</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>hexdigest<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt <span class="token keyword keyword-rescue" style="box-sizing: border-box; color: rgb(0, 119, 170);">rescue</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Exception</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> e <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> generated_check_sum <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">true</span> <span class="token keyword keyword-else" style="box-sizing: border-box; color: rgb(0, 119, 170);">else</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span
<span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">######################################## Encryption module #########################################</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">############################ AES 128-bit encryption with SHA256 Hash ###############################</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">####################################### New PG Encryption ##########################################</span> <span class="token keyword keyword-module" style="box-sizing: border-box; color: rgb(0, 119, 170);">module</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">EncryptionNewPG</span> <span class="token keyword keyword-require" style="box-sizing: border-box; color: rgb(0, 119, 170);">require</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'openssl'</span></span> <span class="token keyword keyword-require" style="box-sizing: border-box; color: rgb(0, 119, 170);">require</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'base64'</span></span> <span class="token keyword keyword-require" style="box-sizing: border-box; color: rgb(0, 119, 170);">require</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'digest'</span></span> <span class="token keyword keyword-require" style="box-sizing: border-box; color: rgb(0, 119, 170);">require</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'securerandom'</span></span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns dictionary of encrypted data ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a dictionary with data and key to encrypt with ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### can accept multiple key value pairs in the dictionary ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_encrypt</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">||</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>has_key<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:key</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> encrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>delete<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:key</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">###aes = OpenSSL::Cipher::Cipher.new("aes-128-cbc")</span> aes <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> OpenSSL<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span>Cipher<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">AES</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'128-CBC'</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-begin" style="box-sizing: border-box; color: rgb(0, 119, 170);">begin</span> keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>encrypt aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> key aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>iv <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'@@@@&&&&####$$$$'</span></span> encrypted_k <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>update<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>final encrypted_k <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>encode64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>encrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>encrypt aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> key aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>iv <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'@@@@&&&&####$$$$'</span></span> encrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>encrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>update<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>final encrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>encrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>encode64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>encrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>encrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-rescue" style="box-sizing: border-box; color: rgb(0, 119, 170);">rescue</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Exception</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> e <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> encrypted_data <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns a single encrypted value ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### input data -> value to be encrypted ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### key -> key to use for encryption ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_encrypt_variable</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">##aes = OpenSSL::Cipher::Cipher.new("aes-128-cbc")</span> aes <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> OpenSSL<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span>Cipher<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">AES</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'128-CBC'</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>encrypt aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> key aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>iv <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'@@@@&&&&####$$$$'</span></span> encrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> <span class="token keyword keyword-begin" style="box-sizing: border-box; color: rgb(0, 119, 170);">begin</span> encrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>update<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>final encrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>encode64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>encrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-rescue" style="box-sizing: border-box; color: rgb(0, 119, 170);">rescue</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Exception</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> e <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> encrypted_data <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns dictionary of decrypted data ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a dictionary with data and key to decrypt with ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### can accept multiple key value pairs in the dictionary ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_decrypt</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">||</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>has_key<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:key</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> decrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>delete<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:key</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">##aes = OpenSSL::Cipher::Cipher.new("aes-128-cbc")</span> aes <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> OpenSSL<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span>Cipher<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">AES</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'128-CBC'</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-begin" style="box-sizing: border-box; color: rgb(0, 119, 170);">begin</span> keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>decrypt aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> key aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>iv <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'@@@@&&&&####$$$$'</span></span> decrypted_k <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>decode64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> decrypted_k <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>update<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>decrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>final <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> decrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>decrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">""</span></span> <span class="token keyword keyword-next" style="box-sizing: border-box; color: rgb(0, 119, 170);">next</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>decrypt aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> key aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>iv <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'@@@@&&&&####$$$$'</span></span> data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>decode64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> decrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>decrypted_k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>update<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>final <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-rescue" style="box-sizing: border-box; color: rgb(0, 119, 170);">rescue</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Exception</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> e <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> decrypted_data <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns a single decrypted value ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### input data -> value to be decrypted ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### key -> key to use for decryption ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_decrypt_variable</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">##aes = OpenSSL::Cipher::Cipher.new("aes-128-cbc")</span> aes <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> OpenSSL<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span>Cipher<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">AES</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'128-CBC'</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>decrypt aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>key <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> key aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>iv <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'@@@@&&&&####$$$$'</span></span> decrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> <span class="token keyword keyword-begin" style="box-sizing: border-box; color: rgb(0, 119, 170);">begin</span> decrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>decode64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> decrypted_data <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>update<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>decrypted_data<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> aes<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>final <span class="token keyword keyword-rescue" style="box-sizing: border-box; color: rgb(0, 119, 170);">rescue</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Exception</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> e <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> decrypted_data <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_generate_salt</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> salt <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> SecureRandom<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>urlsafe_base64<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>length<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">*</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">3.0</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">/</span><span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">4.0</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> salt<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns checksum of given key value pairs ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a hash with key value pairs ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### calculates sha256 checksum of given values ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_checksum</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> salt_length <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">4</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> salt <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_generate_salt<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>salt_length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>sort keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-next" style="box-sizing: border-box; color: rgb(0, 119, 170);">next</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Digest<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token constant" style="box-sizing: border-box; color: rgb(153, 0, 85);">SHA256</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>hexdigest<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### encrypting checksum ###</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_encrypt_variable<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\r\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> check_sum <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns checksum of given String ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a hash with String ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### calculates sha256 checksum of given values ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_checksum_by_String</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>strdata<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> salt_length <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">4</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> strdata<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> salt <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_generate_salt<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>salt_length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> strdata <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Digest<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token constant" style="box-sizing: border-box; color: rgb(153, 0, 85);">SHA256</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>hexdigest<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### encrypting checksum ###</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_encrypt_variable<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\r\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> check_sum <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns checksum of given key value pairs ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a hash with key value pairs ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### calculates sha256 checksum of given values ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_refund_checksum</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> salt_length <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">4</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">#if params[k].to_s.include? "REFUND"</span> <span class="token keyword keyword-unless" style="box-sizing: border-box; color: rgb(0, 119, 170);">unless</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-include" style="box-sizing: border-box; color: rgb(0, 119, 170);">include</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"|"</span></span> <span class="token keyword keyword-next" style="box-sizing: border-box; color: rgb(0, 119, 170);">next</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> salt <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_generate_salt<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>salt_length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>sort keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-next" style="box-sizing: border-box; color: rgb(0, 119, 170);">next</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Digest<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token constant" style="box-sizing: border-box; color: rgb(153, 0, 85);">SHA256</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>hexdigest<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### encrypting checksum ###</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_encrypt_variable<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\r\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> check_sum <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns checksum of given key value pairs (must contain the :checksum key) ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a hash with key value pairs ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### calculates sha256 checksum of given values ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### returns true if checksum is consistent ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### returns false in case of inconsistency ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_verify_checksum_by_String</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>strdata<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> salt_length <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">4</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> strdata<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">||</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\r\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_decrypt_variable<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-begin" style="box-sizing: border-box; color: rgb(0, 119, 170);">begin</span> salt <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>length<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">-</span>salt_length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> strdata <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Digest<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token constant" style="box-sizing: border-box; color: rgb(153, 0, 85);">SHA256</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>hexdigest<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt <span class="token keyword keyword-rescue" style="box-sizing: border-box; color: rgb(0, 119, 170);">rescue</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Exception</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> e <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> generated_check_sum <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">true</span> <span class="token keyword keyword-else" style="box-sizing: border-box; color: rgb(0, 119, 170);">else</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### function returns checksum of given key value pairs (must contain the :checksum key) ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### accepts a hash with key value pairs ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### calculates sha256 checksum of given values ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### returns true if checksum is consistent ###</span> <span class="token comment" style="box-sizing: border-box; color: rgb(112, 128, 144);">### returns false in case of inconsistency ###</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">new_pg_verify_checksum</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> salt_length <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token number" style="box-sizing: border-box; color: rgb(153, 0, 85);">4</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">!=</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Hash</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">||</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>empty<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\r\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>gsub<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"\n"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">''</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> new_pg_decrypt_variable<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> key<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-begin" style="box-sizing: border-box; color: rgb(0, 119, 170);">begin</span> salt <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>length<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">-</span>salt_length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>check_sum<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>length<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>keys str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> <span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span> keys <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>sort keys<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-each" style="box-sizing: border-box; color: rgb(0, 119, 170);">each</span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>k<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-nil" style="box-sizing: border-box; color: rgb(0, 119, 170);">nil</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">?</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-next" style="box-sizing: border-box; color: rgb(0, 119, 170);">next</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> paytmparams<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span>k<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>to_s <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> str <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">'|'</span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Digest<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token constant" style="box-sizing: border-box; color: rgb(153, 0, 85);">SHA256</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>hexdigest<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>str<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> generated_check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">+</span> salt <span class="token keyword keyword-rescue" style="box-sizing: border-box; color: rgb(0, 119, 170);">rescue</span> <span class="token builtin" style="box-sizing: border-box; color: rgb(102, 153, 0);">Exception</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> e <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> check_sum <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> generated_check_sum <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">true</span> <span class="token keyword keyword-else" style="box-sizing: border-box; color: rgb(0, 119, 170);">else</span> <span class="token keyword keyword-return" style="box-sizing: border-box; color: rgb(0, 119, 170);">return</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span
Step 8:Now we can create a view for start and verify the payment. For that, we can add 2 files named start_payment.html.erb and verify_payment.html.erb
start_payment.html.erb
<span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">PaytmController</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span> ApplicationController <span class="token keyword keyword-include" style="box-sizing: border-box; color: rgb(0, 119, 170);">include</span> PaytmHelper skip_before_action <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:verify_authenticity_token</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">start_payment</span></span> start_payment <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Paytm<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">StartPaymentService</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>params<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> request<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> start_payment<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>call <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> start_payment<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>checksum <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmParam</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> start_payment<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>paytmParam <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">verify_payment</span></span> paytm_verify <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Paytm<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">VerifyPaymentService</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>params<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@cart</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> paytm_verify<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>call <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytm_verify<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>paytmparams <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@is_valid_checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytm_verify<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>is_valid_checksum <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@is_valid_checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">true</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"STATUS"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"TXN_SUCCESS"</span></span> respond_to <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>format<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> format<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>html <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-else" style="box-sizing: border-box; color: rgb(0, 119, 170);">else</span> respond_to <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>format<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> format<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>html <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span
<span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">PaytmController</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span> ApplicationController <span class="token keyword keyword-include" style="box-sizing: border-box; color: rgb(0, 119, 170);">include</span> PaytmHelper skip_before_action <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:verify_authenticity_token</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">start_payment</span></span> start_payment <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Paytm<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">StartPaymentService</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>params<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> request<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> start_payment<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>call <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> start_payment<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>checksum <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmParam</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> start_payment<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>paytmParam <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">verify_payment</span></span> paytm_verify <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Paytm<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">VerifyPaymentService</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>params<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@cart</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> paytm_verify<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>call <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytm_verify<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>paytmparams <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@is_valid_checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytm_verify<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>is_valid_checksum <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@is_valid_checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">true</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"STATUS"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"TXN_SUCCESS"</span></span> respond_to <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>format<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> format<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>html <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-else" style="box-sizing: border-box; color: rgb(0, 119, 170);">else</span> respond_to <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>format<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> format<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>html <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span
<span class="token keyword keyword-class" style="box-sizing: border-box; color: rgb(0, 119, 170);">class</span> <span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">PaytmController</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span> ApplicationController <span class="token keyword keyword-include" style="box-sizing: border-box; color: rgb(0, 119, 170);">include</span> PaytmHelper skip_before_action <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:verify_authenticity_token</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">start_payment</span></span> start_payment <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Paytm<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">StartPaymentService</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>params<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> request<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> start_payment<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>call <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> start_payment<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>checksum <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmParam</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> start_payment<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>paytmParam <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-def" style="box-sizing: border-box; color: rgb(0, 119, 170);">def</span> <span class="token method-definition" style="box-sizing: border-box;"><span class="token function" style="box-sizing: border-box; color: rgb(221, 74, 104);">verify_payment</span></span> paytm_verify <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> Paytm<span class="token double-colon punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">::</span><span class="token class-name" style="box-sizing: border-box; color: rgb(221, 74, 104);">VerifyPaymentService</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span><span class="token keyword keyword-new" style="box-sizing: border-box; color: rgb(0, 119, 170);">new</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">(</span>params<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@cart</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">)</span> paytm_verify<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>call <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytm_verify<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>paytmparams <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@is_valid_checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=</span> paytm_verify<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>is_valid_checksum <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@is_valid_checksum</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">true</span> <span class="token keyword keyword-if" style="box-sizing: border-box; color: rgb(0, 119, 170);">if</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"STATUS"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">==</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"TXN_SUCCESS"</span></span> respond_to <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>format<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> format<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>html <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-else" style="box-sizing: border-box; color: rgb(0, 119, 170);">else</span> respond_to <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span>format<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">|</span> format<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">.</span>html <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span
verify_payment.html.erb
<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span>div<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span>h1<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">%=</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"STATUS"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">%> </h1></span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span>h1<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">%=</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"RESPMSG"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">%> </h1></span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">/</span>div<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">></span
<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span>div<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span>h1<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">%=</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"STATUS"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">%> </h1></span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span>h1<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">%=</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"RESPMSG"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">%> </h1></span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">/</span>div<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">></span
<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span>div<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span>h1<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">%=</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"STATUS"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">%> </h1></span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span>h1<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">%=</span> <span class="token variable" style="box-sizing: border-box; color: rgb(238, 153, 0);">@paytmparams</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">[</span><span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">"RESPMSG"</span></span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">]</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">%> </h1></span></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">/</span>div<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">></span
Step 9:Add the Paytm payment button which initializes payment.
<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">%=</span> form_tag paytm_payment_path<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">method</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">:</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:post</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">remote</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">:</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:style</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">""</span></span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">%> <button></span></span>Start Payment<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">/</span>button<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">%</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">%</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">></span
<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">%=</span> form_tag paytm_payment_path<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">method</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">:</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:post</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">remote</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">:</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:style</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">""</span></span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">%> <button></span></span>Start Payment<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">/</span>button<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">%</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">%</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">></span
<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">%=</span> form_tag paytm_payment_path<span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">method</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">:</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:post</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">remote</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">:</span> <span class="token boolean" style="box-sizing: border-box; color: rgb(153, 0, 85);">false</span><span class="token punctuation" style="box-sizing: border-box; color: rgb(153, 153, 153);">,</span> <span class="token symbol" style="box-sizing: border-box; color: rgb(153, 0, 85);">:style</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">=></span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">""</span></span> <span class="token keyword keyword-do" style="box-sizing: border-box; color: rgb(0, 119, 170);">do</span> <span class="token string-literal" style="box-sizing: border-box;"><span class="token string" style="box-sizing: border-box; color: rgb(102, 153, 0);">%> <button></span></span>Start Payment<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">/</span>button<span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">></span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);"><</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">%</span> <span class="token keyword keyword-end" style="box-sizing: border-box; color: rgb(0, 119, 170);">end</span> <span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">%</span><span class="token operator" style="box-sizing: border-box; color: rgb(154, 110, 58); background: rgba(255, 255, 255, 0.5);">></span
Everything is done now you will have a complete working payment gateway on your web app. Any question regarding the process or if any issue in implementing the above steps you can comment and we will be glad to help. Thank you!
Reader guide
Explore this topic
Explore this topic
Use the links below to jump into next reading without leaving the article flow.
Blog categories
Recent posts
Rails CSV Export: Why Large Data Exports Fail and How to Build Them Properly
7 min
Rails Background Jobs: Why Customers Shouldn’t Wait for Work That Can Run Later
6 min
Multi-Tenant Rails: 4 Data Isolation Problems SaaS Teams Need to Prevent
5 min
What Breaks When an AI-Generated MVP Goes to Production
5 min
Similar Blogs
Explore Similar Blogs
Explore Similar Blogs
Learn how AI is transforming meetings, notes,
and team productivity.
Learn how AI is transforming meetings, notes,
and team productivity.

next step
Tell us what you are trying to build.
No spec required. Send a paragraph, an old repo link, or a screenshot of the system you are replacing. A senior Rails engineer will review it and reply with real feedback.




next step
Tell us what you are trying to build.
No spec required. Send a paragraph, an old repo link, or a screenshot of the system you are replacing. A senior Rails engineer will review it and reply with real feedback.




next step
Tell us what you are trying to build.
No spec required. Send a paragraph, an old repo link, or a screenshot of the system you are replacing. A senior Rails engineer will review it and reply with real feedback.






