2013-05-22 51 views
0

我想創建和Android應用程序,可以通過使用主卡API信用卡支付。我'按照這個教程 - >>https://developer.mastercard.com/portal/pages/viewpage.action?pageId=14876685,但它說沒有找到網址。Java.io.FileNotFoundException「URL」

這是我使用的代碼:

public class MainActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 

     ((Button) findViewById(R.id.submit)).setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Context context = getApplicationContext(); 
       String endPoint = "https://api.mastercard.com/payments/v1/purchase?Format=XML"; 
       EditText cardNumberInput = (EditText) findViewById(R.id.cardNumberInput); 
       EditText expirationMonthInput = (EditText) findViewById(R.id.expirationMonthInput); 
       EditText expirationYearInput = (EditText) findViewById(R.id.expirationYearInput); 
       EditText cvvInput = (EditText) findViewById(R.id.cvvInput); 
       EditText cardHolderNameInput = (EditText) findViewById(R.id.cardHolderNameInput); 
       EditText amountInput = (EditText) findViewById(R.id.amountInput); 

       final double amount = Float.valueOf(amountInput.getText().toString()); 
       final String currency = "USD"; 
       final String companyId = "ComID"; 
       final String companyPassword = "ComPass"; 
       final String messageId = "001"; 
       final String settlementId = "011"; 
       final String cardHolderName = cardHolderNameInput.getText().toString(); 
       final String accountNumber = cardNumberInput.getText().toString(); 
       final String expiryMonth = expirationMonthInput.getText().toString(); 
       final String expiryYear = expirationYearInput.getText().toString(); 
       final String securityCode = cvvInput.getText().toString(); 
       try { 
        // Send data 
        URL url = new URL(endPoint); 
        URLConnection conn = url.openConnection(); 
        conn.setDoOutput(true); 
        conn.setDoInput(true); 
        OutputStreamWriter request = new OutputStreamWriter(conn.getOutputStream()); 
           // Create the XML to post 
        request.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); 
        request.append("<PurchaseRequest>"); 
        request.append("<MerchantIdentity>"); 
        request.append("<CompanyId>"); 
        request.append(companyId); 
        request.append("</CompanyId>"); 
        request.append("<CompanyPassword>"); 
        request.append(companyPassword); 
        request.append("</CompanyPassword>"); 
        request.append("</MerchantIdentity>"); 
        request.append("<Reference>"); 
        request.append("<MessageId>"); 
        request.append(messageId); 
        request.append("</MessageId>"); 
        request.append("<SettlementId>"); 
        request.append(settlementId); 
        request.append("</SettlementId>"); 
        request.append("</Reference>"); 
        request.append("<Amount>"); 
        request.append("<Currency>"); 
        request.append(currency); 
        request.append("</Currency>"); 
        request.append("<Value>"); 
        request.append(Double.toString(amount)); 
        request.append("</Value>"); 
        request.append("</Amount>"); 
        request.append("<FundingCard>"); 
        request.append("<CardholderName>"); 
        request.append(cardHolderName); 
        request.append("</CardholderName>"); 
        request.append("<AccountNumber>"); 
        request.append(accountNumber); 
        request.append("</AccountNumber>"); 
        request.append("<ExpiryMonth>"); 
        request.append(expiryMonth); 
        request.append("</ExpiryMonth>"); 
        request.append("<ExpiryYear>"); 
        request.append(expiryYear); 
        request.append("</ExpiryYear>"); 
        request.append("<SecurityCode>"); 
        request.append(securityCode); 
        request.append("</SecurityCode>"); 
        request.append("</FundingCard>"); 
        request.append("</PurchaseRequest>"); 
        request.flush(); 

        DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 
        DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
        Document doc = docBuilder.parse(conn.getInputStream()); 
        Node transactionResponseNode = doc.getElementsByTagName("TransactionResponse").item(0); 
        // Test for approval. 
        String response = transactionResponseNode.getNodeValue().trim().toUpperCase(); 
        Log.d("**********Response", ""+response); 
        if (response.equals("APPROVED") == true) { 
         request.close(); 
         String text = "The payment processed successfully. PHP" + amountInput.getText().toString() 
            + " was charged to the account."; 
         Toast toast = Toast.makeText(context, text, Toast.LENGTH_LONG); 
           toast.show(); 
        } else if (response.equals("DECLINED")) { 
         String text = "The payment was declined."; 
         Toast toast = Toast.makeText(context, text, Toast.LENGTH_LONG); 
         toast.show(); 
        } else if (response.equals("ERROR")) { 
         String text = "Error Processing Payment."; 
         Toast toast = Toast.makeText(context, text, Toast.LENGTH_LONG); 
         toast.show(); 
        } 
       } catch (MalformedURLException e) { 
        String text = "Error"; 
        Toast toast = Toast.makeText(context, ""+e, Toast.LENGTH_LONG); 
        toast.show(); 
       } catch (IOException e) { 
        String text = "Error"; 
        Toast toast = Toast.makeText(context, ""+e, Toast.LENGTH_LONG); 
        toast.show(); 
       } catch (ParserConfigurationException e) { 
        String text = "Error"; 
        Toast toast = Toast.makeText(context, ""+e, Toast.LENGTH_LONG); 
        toast.show(); 
       } catch (SAXException e) { 
        String text = "Error"; 
        Toast toast = Toast.makeText(context, ""+e, Toast.LENGTH_LONG); 
        toast.show(); 
       } 
      } 
     }); 
    } 
} 

任何想法會幫助我很多。謝謝。

這就是登錄貓說:

05-22 11:20:58.129: D/**********Error2(1424): java.io.FileNotFoundException: https://api.mastercard.com/payments/v3/purchase?Format=XML 
+1

無論什麼原因,你當然不應該在GUI回調方法中做網絡操作。 – EJP

+0

正如@EJP所說,你不應該在主UI線程上這樣做,即使是測試。無論如何,你得到了什麼確切的錯誤?我看到該頁面使用OAuth,但我沒有看到代碼中進行OAuth身份驗證的任何內容。 – GreyBeardedGeek

+0

我把什麼日誌貓說。我只是按照上面發佈的教程鏈接。您在哪裏看到了OAuth身份驗證? –

回答

0

-它總是好做的UI線程,並且在非UI線程非UI工作UI的工作,但是從其版本是LAW的Android's Honeycomb版本。

-因此,你的網絡電話使用後臺線程

-要麼使用Thread做網絡呼叫,然後使用Handler穿上UI THEAD的數據,或者使用所謂的Android中無痛線程AsyncTask

相關問題