0

我在這裏有一個棘手的問題。我需要用戶在英國向銀行(即Barclaycard)付款。爲此,我有一個https URL,我將這些參數(如金額支付,訂單參考等)添加到URL中,啓動這個http連接作爲Intent.ActionView,它會將用戶重定向到瀏覽器,在那裏他可以在銀行網頁上輸入他的信用卡詳細信息,併成功將款項支付到我們的帳戶。到現在爲止還挺好 ?在Android中以編程方式監控網絡瀏覽器?

我使用的代碼如下(我爲隱私原因更改了值)問題是,當用戶完成/失敗/取消付款時,我需要返回到應用程序。 Barclaycarda在支付成功時自動重定向到特定的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); 
    } 
}); 
+1

爲您的應用添加一個意向過濾器,以獲得成功和失敗的URL – 2013-04-05 16:51:07

+0

非常感謝,這就是我正在尋找的,實際上您給了我一個好主意,即在應用內的webview中打開url並有意圖爲該webbiew活動過濾器,現在的問題是我怎麼做 – 2013-04-05 17:18:02

回答

2

您可以在自己的應用程序內部放置自己的Web視圖,並在某處放置一些完成/關閉按鈕。然後,您可以跟蹤所有在WebView中打開的URL並相應地執行相應的操作。用戶將永遠留在應用程序中..that解決你的目的..

對於跟蹤的網頁視圖內的所有網址,你需要註冊一個WebViewClient和ovveride以下功能

public boolean shouldOverrideUrlLoading (WebView view, String url) 

看一看WebView hereWebViewClient here

+0

輝煌,這正是我正在尋找的! – 2013-04-05 17:22:43

+0

知道了所有的工作,非常感謝! – 2013-04-08 18:56:23

2

如果您的用戶被重定向到一個新的網址,你可以使用一個ContentObserver是觀察任何更改書籤歷史:

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

public class UrlObserver extends ContentObserver { 

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

讀史可以這樣做

內容觀察者的註冊使用:

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

一旦檢測到特定的URL,您可以調用意圖使您的活動回到最前面。 This是一個示例應用程序,可能會幫助你在這種情況下。

我不是100%確定如果相同的網站用於表單傳輸會發生什麼情況。可能是內容觀察者不會觸發。在這種情況下你可能會發現一些有用的日誌條目。

注意:Chrome和Android標準瀏覽器使用不同的URL進行查詢。搜索互聯網找到正確的。

希望這會有所幫助....乾杯!

+0

非常感謝,絕對有幫助,但我相信使用意圖過濾器將是一個更好的解決方案,因爲我不需要訪問用戶的歷史 – 2013-04-05 17:17:07

+1

@ Trinimon不應該將觀察者傳遞給registerContentObserver()而不是UrlObserver類? – gonzobrains 2013-05-27 22:41:18

+0

@gonzobrains:你說得對,謝謝你通知! – Trinimon 2013-05-29 11:37:24

2

你永遠不應該在用戶設備上做這樣的事情。有人可以反編譯你的代碼並改變它,所以你的應用程序會「認爲」他們付款。

這可能會導致一些小問題,例如他們無償使用應用程序來解決嚴重問題,例如您被迫進行所有付款。

可以使用服務器端解決方案或Google購買應用內購買。

+0

感謝您的支持,但我認爲我們的情況不同,首先我真的很驚訝某人可以如何反編譯代碼,因爲Google負責確保代碼的安全,如果他們能夠破解代碼,他們可能會攻擊Google的支付服務。 雖然我不得不感謝你,因爲現在我們需要做出安全預防措施,即使某人得到了我們所有的代碼,他將無法訪問我們的服務,除非他被授權等。 – 2013-04-05 18:54:04

+0

@Heiba沒有客戶端應用程序代碼是安全的,無論是JavaScript瀏覽器應用程序,Android APK還是瘋狂寫在ASM中的東西。所有APK都在您的設備上,您可以將它們複製到計算機並更改代碼。應用內購買使用服務器來檢查許可證的有效性,但它可以用APK替換爲if(true){...}。這需要一段時間。付款是一個不同的事情,有0.1%的用戶免費使用付費應用程序。銀行真的會在乎它是否是1000億美元的0.1%。 ;) – 2013-04-05 19:02:11

+0

所以你建議像在網站上運行的支付網關,像這樣? – 2013-04-05 19:18:37