0

ここで難しい質問があります。ユーザーが英国の銀行 (つまり Barclaycard) に支払いを行う必要があります。そうするために、私は https URL を持っています。パラメーター (支払う金額、注文参照など) を URL に追加し、この http 接続を Intent.ActionView として開始します。これにより、ユーザーはブラウザーにリダイレクトされます。銀行のウェブページにクレジットカードの詳細を入力して、私たちの口座に支払いを行うことができます。ここまでは順調ですね ?

私が使用するコードは以下のとおりです (プライバシー上の理由から値を変更しました) 問題は、ユーザーが支払いを完了/失敗/キャンセルしたときにアプリに戻る必要があることです。Barclaycard は、支払いが成功すると特定の URL に自動的にリダイレクトし、失敗すると別の URL にリダイレクトします。Barclaycard の支払いがいつ成功したかを知る方法はないので、どうにかして Android アプリに戻りますか?

Button cardbutton = (Button) findViewById(R.id.card_button);
cardbutton.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View arg0)
    {
        String preHashString = new String();
        String proHashString = new String();
        String SHAPassPhrase = new String();

        SHAPassPhrase = "GSvTh£h70ZkHdAq9b"; // FOR TEST ENVIRONMENT

        preHashString = preHashString + "AMOUNT=" + String.valueOf((int) (order.getPaymentAmount() * 100.00)) + SHAPassPhrase;
        preHashString = preHashString + "BGCOLOR=cccccc" + SHAPassPhrase;
        preHashString = preHashString + "CN=" + user.getString("name") + SHAPassPhrase;
        preHashString = preHashString + "CURRENCY=GBP" + SHAPassPhrase;
        preHashString = preHashString + "LANGUAGE=en_US" + SHAPassPhrase;
        preHashString = preHashString + "ORDERID=" + order.getOrderId() + SHAPassPhrase;

        try
        {
            proHashString = SHA1(preHashString);
        }
        catch (NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        }
        catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
        }

        String redirecturl = "https://mdepayments.epdq.co.uk/ncol/test/orderstandard.asp";

        redirecturl += "?AMOUNT=" + String.valueOf((int) (order.getPaymentAmount() * 100));
        redirecturl += "&CN=" + user.getString("name");
        redirecturl += "&CURRENCY=GBP";
        redirecturl += "&LANGUAGE=en_US";
        redirecturl += "&ORDERID=" + order.getOrderId();
        redirecturl += "&SHASIGN=" + proHashString;

        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(redirecturl));
        startActivity(i);
    }
});
4

3 に答える 3

2

ユーザーが新しい URL にリダイレクトされた場合はContentObserver、変更のブックマーク履歴を監視する を使用できます。

public class UrlObserver extends ContentObserver {

    @Override
    public void onChange(boolean selfChange) {
       super.onChange(selfChange);
       // check last URL in history
    }
}

履歴の読み取りは、次の方法で実行できます。

private static final Uri CONTENT_URI = Browser.BOOKMARKS_URI;
Cursor cursor = context.getContentResolver().query(
                    CONTENT_URI, Browser.HISTORY_PROJECTION, null, null, null); 

コンテンツ オブザーバーの登録は、次のように機能します。

UrlObserver observer = new UrlObserver();
context.getContentResolver().registerContentObserver(CONTENT_URI, true, observer);          

特定の URL が検出されたら、インテントを呼び出してアクティビティを前面に戻すことができます。 そんな時に役立つサンプルアプリです

フォームの送信に同じサイトを使用するとどうなるかは 100% わかりません。コンテンツ オブザーバーがトリガーされない可能性があります。その場合、役立つログ エントリが見つかることがあります。

注: Chrome と Android の標準ブラウザーでは、クエリに異なる URL を使用します。インターネットで検索して、適切なものを見つけてください。

これが役に立てば幸いです....乾杯!

于 2013-04-05T16:56:39.107 に答える
2

アプリ内に独自のWebviewを配置し、どこかに完了/閉じるボタンを配置できます..次に、WebViewで開いているすべてのURLを追跡し、それに応じて操作を行うことができます..ユーザーは常にアプリにとどまります..それで解決しますあなたの目的..

WebView 内のすべての URL を追跡するには、1 つの WebViewClient を登録し、以下の関数を ovveride する必要があります

public boolean shouldOverrideUrlLoading (WebView view, String url)

WebView hereとWebViewClient hereをご覧ください

于 2013-04-05T17:18:30.587 に答える