首页 文章

如何在Android中集成PayU money Gateway? [关闭]

提问于
浏览
14

我正在开发一个电子商务应用程序,我想在其中集成Payumoney支付网关 . 有人可以帮我处理一些程序,链接或教程,怎么做?谢谢 .

6 回答

  • 1
  • 2

    以下是通过Web浏览器进行PayUMoney集成的完整代码指南 .

    http://navraj.net/?p=22

    它已在现实世界的应用程序中进行测试和部署

  • 17

    我完成了:) :)你必须编辑 SuccessURLFailureURL

    它完美地为我工作 .

    public class PayUMoneyActivity extends AppCompatActivity {
    
        /**
         * Adding WebView as setContentView
         */
        WebView webView;
    
        /**
         * Context for Activity
         */
        Context activity;
        /**
         * Order Id
         * To Request for Updating Payment Status if Payment Successfully Done
         */
        int mId; //Getting from Previous Activity
        /**
         * Required Fields
         */
        // Test Variables
        /*
        private String mMerchantKey = "FCyqqZ";
        private String mSalt = "sfBpGA8E";
        private String mBaseURL = "https://test.payu.in";
        */
    
        // Final Variables
        private String mMerchantKey = "Your Merchant Key";
        private String mSalt = "Salt";
        private String mBaseURL = "https://secure.payu.in";
    
    
        private String mAction = ""; // For Final URL
        private String mTXNId; // This will create below randomly
        private String mHash; // This will create below randomly
        private String mProductInfo = "Food Items"; //Passing String only
        private String mFirstName; // From Previous Activity
        private String mEmailId; // From Previous Activity
        private double mAmount; // From Previous Activity
        private String mPhone; // From Previous Activity
        private String mServiceProvider = "payu_paisa";
        private String mSuccessUrl = "your success URL";
        private String mFailedUrl = "Your Failure URL";
    
    
        boolean isFromOrder;
        /**
         * Handler
         */
        Handler mHandler = new Handler();
    
        /**
         * @param savedInstanceState
         */
        @SuppressLint({"AddJavascriptInterface", "SetJavaScriptEnabled"})
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            getWindow().requestFeature(Window.FEATURE_PROGRESS);
            super.onCreate(savedInstanceState);
    
            /**
            * Setting WebView to Screen
            */
            setContentView(R.layout.activity_webview_for_payumoney);
    
            /**
             * Creating WebView
             */
            webView = (WebView) findViewById(R.id.payumoney_webview);
    
            /**
             * Context Variable
             */
            activity = getApplicationContext();
    
            /**
             * Actionbar Settings
             */
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
    
            ActionBar ab = getSupportActionBar();
            ab.setDisplayHomeAsUpEnabled(true);
            // enabling action bar app icon and behaving it as toggle button
            ab.setHomeButtonEnabled(true);
            ab.setTitle(getString(R.string.title_activity_online_payment));
    
            /**
             * Getting Intent Variables...
             */
            Bundle bundle = getIntent().getExtras();
            if (bundle != null) {
    
                mFirstName = bundle.getString("name");
                mEmailId = bundle.getString("email");
                mAmount = bundle.getDouble("amount");
                mPhone = bundle.getString("phone");
                mId = bundle.getInt("id");
                isFromOrder = bundle.getBoolean("isFromOrder");
    
                Log.i(TAG, "" + mFirstName + " : " + mEmailId + " : " + mAmount + " : " + mPhone);
    
                /**
                 * Creating Transaction Id
                 */
                Random rand = new Random();
                String randomString = Integer.toString(rand.nextInt()) + (System.currentTimeMillis() / 1000L);
                mTXNId = hashCal("SHA-256", randomString).substring(0, 20);
    
                mAmount = new BigDecimal(mAmount).setScale(0, RoundingMode.UP).intValue();
    
                /**
                 * Creating Hash Key
                 */
                mHash = hashCal("SHA-512", mMerchantKey + "|" +
                        mTXNId + "|" +
                        mAmount + "|" +
                        mProductInfo + "|" +
                        mFirstName + "|" +
                        mEmailId + "|||||||||||" +
                        mSalt);
    
                /**
                 * Final Action URL...
                 */
                mAction = mBaseURL.concat("/_payment");
    
                /**
                 * WebView Client
                 */
                webView.setWebViewClient(new WebViewClient() {
    
                    @Override
                    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
                        super.onReceivedError(view, request, error);
                        Toast.makeText(activity, "Oh no! " + error, Toast.LENGTH_SHORT).show();
                    }
    
                    @Override
                    public void onReceivedSslError(WebView view,
                                                   SslErrorHandler handler, SslError error) {
                        Toast.makeText(activity, "SSL Error! " + error, Toast.LENGTH_SHORT).show();
                        handler.proceed();
                    }
    
                    @Override
                    public boolean shouldOverrideUrlLoading(WebView view, String url) {
                        return super.shouldOverrideUrlLoading(view, url);
                    }
    
                    @Override
                    public void onPageFinished(WebView view, String url) {
    
                        if (url.equals(mSuccessUrl)) {
                            Intent intent = new Intent(PayUMoneyActivity.this, PaymentStatusActivity.class);
                            intent.putExtra("status", true);
                            intent.putExtra("transaction_id", mTXNId);
                            intent.putExtra("id", mId);
                            intent.putExtra("isFromOrder", isFromOrder);
                            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            startActivity(intent);
                        } else if (url.equals(mFailedUrl)) {
                            Intent intent = new Intent(PayUMoneyActivity.this, PaymentStatusActivity.class);
                            intent.putExtra("status", false);
                            intent.putExtra("transaction_id", mTXNId);
                            intent.putExtra("id", mId);
                            intent.putExtra("isFromOrder", isFromOrder);
                            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            startActivity(intent);
                        }
                        super.onPageFinished(view, url);
                    }
                });
    
                webView.setVisibility(View.VISIBLE);
                webView.getSettings().setBuiltInZoomControls(true);
                webView.getSettings().setCacheMode(2);
                webView.getSettings().setDomStorageEnabled(true);
                webView.clearHistory();
                webView.clearCache(true);
                webView.getSettings().setJavaScriptEnabled(true);
                webView.getSettings().setSupportZoom(true);
                webView.getSettings().setUseWideViewPort(false);
                webView.getSettings().setLoadWithOverviewMode(false);
                webView.addJavascriptInterface(new PayUJavaScriptInterface(PayUMoneyActivity.this), "PayUMoney");
    
                /**
                 * Mapping Compulsory Key Value Pairs
                 */
                Map<String, String> mapParams = new HashMap<>();
    
                mapParams.put("key", mMerchantKey);
                mapParams.put("txnid", mTXNId);
                mapParams.put("amount", String.valueOf(mAmount));
                mapParams.put("productinfo", mProductInfo);
                mapParams.put("firstname", mFirstName);
                mapParams.put("email", mEmailId);
                mapParams.put("phone", mPhone);
                mapParams.put("surl", mSuccessUrl);
                mapParams.put("furl", mFailedUrl);
                mapParams.put("hash", mHash);
                mapParams.put("service_provider", mServiceProvider);
    
                webViewClientPost(webView, mAction, mapParams.entrySet());
            } else {
                Toast.makeText(activity, "Something went wrong, Try again.", Toast.LENGTH_LONG).show();
            }
        }
    
        /**
         * Posting Data on PayUMoney Site with Form
         *
         * @param webView
         * @param url
         * @param postData
         */
        public void webViewClientPost(WebView webView, String url,
                                      Collection<Map.Entry<String, String>> postData) {
            StringBuilder sb = new StringBuilder();
    
            sb.append("<html><head></head>");
            sb.append("<body onload='form1.submit()'>");
            sb.append(String.format("<form id='form1' action='%s' method='%s'>", url, "post"));
    
            for (Map.Entry<String, String> item : postData) {
                sb.append(String.format("<input name='%s' type='hidden' value='%s' />", item.getKey(), item.getValue()));
            }
            sb.append("</form></body></html>");
    
            Log.d("TAG", "webViewClientPost called: " + sb.toString());
            webView.loadData(sb.toString(), "text/html", "utf-8");
        }
    
        /**
         * Hash Key Calculation
         *
         * @param type
         * @param str
         * @return
         */
        public String hashCal(String type, String str) {
            byte[] hashSequence = str.getBytes();
            StringBuffer hexString = new StringBuffer();
            try {
                MessageDigest algorithm = MessageDigest.getInstance(type);
                algorithm.reset();
                algorithm.update(hashSequence);
                byte messageDigest[] = algorithm.digest();
    
                for (int i = 0; i < messageDigest.length; i++) {
                    String hex = Integer.toHexString(0xFF & messageDigest[i]);
                    if (hex.length() == 1)
                        hexString.append("0");
                    hexString.append(hex);
                }
            } catch (NoSuchAlgorithmException NSAE) {
            }
            return hexString.toString();
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            if(item.getItemId() == android.R.id.home) {
                onPressingBack();
            }
            return super.onOptionsItemSelected(item);
        }
    
        @Override
        public void onBackPressed() {
            onPressingBack();
        }
    
        /**
         * On Pressing Back
         * Giving Alert...
         */
        private void onPressingBack() {
    
            final Intent intent;
    
            if(isFromOrder)
                intent = new Intent(PayUMoneyActivity.this, ProductInCartList.class);
            else
                intent = new Intent(PayUMoneyActivity.this, MainActivity.class);
    
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    
            AlertDialog.Builder alertDialog = new AlertDialog.Builder(PayUMoneyActivity.this);
    
            // Setting Dialog Title
            alertDialog.setTitle("Warning");
    
            // Setting Dialog Message
            alertDialog.setMessage("Do you cancel this transaction?");
    
            // On pressing Settings button
            alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    finish();
                    startActivity(intent);
                }
            });
    
            // on pressing cancel button
            alertDialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
    
            // Showing Alert Message
            alertDialog.show();
        }
    
        public class PayUJavaScriptInterface {
            Context mContext;
    
            /**
             * Instantiate the interface and set the context
             */
            PayUJavaScriptInterface(Context c) {
                mContext = c;
            }
    
            public void success(long id, final String paymentId) {
                mHandler.post(new Runnable() {
    
                    public void run() {
                        mHandler = null;
                        Toast.makeText(PayUMoneyActivity.this, "Payment Successfully.", Toast.LENGTH_SHORT).show();
                    }
                });
            }
        }
    }
    

    已编辑:

    你现在可以使用https://www.payumoney.com/dev-guide/webcheckout/redirect.html .

  • 9

    Build Custom Integration

    根据payumoney:如果您从头开始构建您的网站,您需要向我们的API发布请求 . 传递您的密钥和其他强制变量 . 这还包括成功和失败页面URL,您希望在该URL中了解用户的成功和失败案例 . 第1步:与我们的任何电子商务平台合作伙伴一起创建商店 . 第2步:选择PayUMoney作为付款选项 . 第3步:输入PayUMoney凭证,您就可以开始了 .

    Note: 您需要开发自己的Web服务,从客户端应用程序获取数据并将请求转发给payumoney服务器,然后在您的Web服务通知您结果之后接收回调响应 .

    FlipKart,FreeCharge,Snapdeal等他们有自己的网址,负责启动支付网关,

    因此,您需要从服务器团队获得支持以启动付款并将结果返回给客户端应用程序 .

    你可以找到更多关于payumoney和api payumoney integration的信息,

  • 2

    集成支付网关的最简单方法是为您的应用程序使用 webview .

    您可以看到大多数应用程序,如 FlipKart, FreeCharge, Snapdeal 等,使用相同的

  • 1

    这就是我在我的应用程序中所做的

    public class PayYouMoneyFragment extends Fragment {
    
        /** The Constant PAYU_MONEY_URL. */
        private static final String PAYU_MONEY_URL = "https://www.payumoney.com/paybypayumoney/#/BCDCEAE6A98116CB48BDE55C440BC69D";
    
        /**
         * Instantiates a new pay you money fragment.
         */
        public PayYouMoneyFragment() {
            // Empty constructor required for fragment subclasses
        }
    
        /**
         * The Class MyWebViewClient.
         */
        private class MyWebViewClient extends WebViewClient {
    
            /** The web view previous state. */
            private int webViewPreviousState;
    
            /** The page started. */
            private final int PAGE_STARTED = 0x1;
    
            /** The page redirected. */
            private final int PAGE_REDIRECTED = 0x2;
    
            /** The dialog. */
            Dialog dialog = new Dialog(getActivity());
    
            /* (non-Javadoc)
             * @see android.webkit.WebViewClient#shouldOverrideUrlLoading(android.webkit.WebView, java.lang.String)
             */
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
    
            /* (non-Javadoc)
             * @see android.webkit.WebViewClient#onPageStarted(android.webkit.WebView, java.lang.String, android.graphics.Bitmap)
             */
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                webViewPreviousState = PAGE_STARTED;
    
                if (dialog == null || !dialog.isShowing())
                    dialog = ProgressDialog.show(getActivity(), "",
                            "Loading Please Wait", true, true,
                            new OnCancelListener() {
    
                                @Override
                                public void onCancel(DialogInterface dialog) {
                                    // do something
                                }
                            });
            }
    
            /* (non-Javadoc)
             * @see android.webkit.WebViewClient#onPageFinished(android.webkit.WebView, java.lang.String)
             */
            @Override
            public void onPageFinished(WebView view, String url) {
    
                if (webViewPreviousState == PAGE_STARTED) {
                    dialog.dismiss();
                    dialog = null;
    
                }
    
            }
        }
    
        /** The btn back. */
        Button btnBack;
    
        /** The webview. */
        WebView webview;
    
        /* (non-Javadoc)
         * @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
         */
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.payumoney_fragment, container,
                    false);
    
    
            webview = (WebView) rootView.findViewById(R.id.payu_webview);
            webview.setWebViewClient(new MyWebViewClient());
            webview.getSettings().setDomStorageEnabled(true);
            webview.getSettings().setJavaScriptEnabled(true);
            openURL();
    
            return rootView;
        }
    
        /**
         *  Opens the URL in a browser.
         */
        private void openURL() {
            webview.loadUrl(PAYU_MONEY_URL);
            webview.requestFocus();
        }
    
        public static Fragment newInstance() {
            return new PayYouMoneyFragment();
        }
    }
    

    这是payumoney布局

    <?xml version="1.0" encoding="utf-8"?>
    <WebView xmlns:android="http://schemas.android.com/apk/res/android"
             android:id="@+id/help_webview"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             android:scrollbars="none"
    />
    

    我还在Github上传了通用版: -

    https://github.com/hiteshsahu/Android-Universal-Web-Content-Loader

相关问题