【问题标题】:Implementing authorize.net in android在android中实现authorize.net
【发布时间】:2011-01-19 14:28:40
【问题描述】:

我想开发一个通过 authorize.net 进行支付处理的应用程序

但每次我得到未知错误。

首先,我填充所有文本框并在按钮单击事件中使用这些值。
我的代码是:

txtAmount=Double.parseDouble(Amount.getText().toString());
txtFName = FName.getText().toString();
txtLName=LName.getText().toString();
txtAddress=Address.getText().toString();
txtCity=City.getText().toString();
txtState=State.getText().toString();
txtzipcode=zipcode.getText().toString();
txtEmail=Email.getText().toString();
txtCreditCard=CreditCard.getText().toString();
txtCVV2=CVV2.getText().toString(); 

drpMonth=selectedmonth;
drpYear=selectedyear;
date= drpMonth.concat(drpYear);

try {
    URL post_url = new URL("https://test.authorize.net/gateway/transact.dll");

    Hashtable post_values = new Hashtable();

    // the API Login ID and Transaction Key must be replaced with valid values
    post_values.put ("x_login", "8SX5gkJb46g");
    post_values.put ("x_tran_key", "8Wx295Gr4hd9Y5kd");

    post_values.put ("x_version", "3.1");
    post_values.put ("x_delim_data", "TRUE");
    post_values.put ("x_delim_char", "|");
    post_values.put ("x_relay_response", "FALSE");

    post_values.put ("x_type", "AUTH_CAPTURE");
    post_values.put ("x_method", "CC");
    post_values.put ("x_card_num", txtCreditCard);
    post_values.put ("x_exp_date", date);

    post_values.put ("x_amount", txtAmount);
    post_values.put ("x_description", "Sample Transaction");

    post_values.put ("x_first_name",txtFName);
    post_values.put ("x_last_name",txtLName);
    post_values.put ("x_address", txtAddress);
    post_values.put ("x_city", txtCity);
    post_values.put ("x_state",txtState);
    post_values.put ("x_zip", txtzipcode);
    post_values.put ("x_email", txtEmail);
    // Additional fields can be added here as outlined in the AIM integration
    // guide at: http://developer.authorize.net

    // This section takes the input fields and converts them to the proper format
    // for an http post.  For example: "x_login=username&x_tran_key=a1B2c3D4"

    StringBuffer post_string = new StringBuffer();
    Enumeration keys = post_values.keys();
    while( keys.hasMoreElements() ) {
        String key = URLEncoder.encode(keys.nextElement().toString(),"UTF-8");
        String value = URLEncoder.encode(post_values.get(key).toString(),"UTF-8");
        post_string.append(key + "=" + value + "&");
    }

    // Open a URLConnection to the specified post url
    URLConnection connection = post_url.openConnection();
    connection.setDoOutput(true);
    connection.setUseCaches(false);

    // this line is not necessarily required but fixes a bug with some servers
    connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");

    // submit the post_string and close the connection


    DataOutputStream requestObject = new DataOutputStream(connection.getOutputStream());
    requestObject.write(post_string.toString().getBytes());
    requestObject.flush();
    requestObject.close();

    // process and read the gateway response
    BufferedReader rawResponse = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    String line;
    String responseData = rawResponse.readLine();
    rawResponse.close();                         // no more data

    // split the response into an array
    String [] responses = responseData.split("|");

    // The results are output to the screen in the form of an html numbered list.

    for(Iterator iter=Arrays.asList(responses).iterator(); iter.hasNext();) {
        result="\n"+ iter.next() +"&nbsp";
        tv.setText(result);
        //out.println("<LI>" + iter.next() + "&nbsp;</LI>");
    }

    setContentView(tv);
} catch(Exception e) {
    tv.setText(e.getMessage());
    setContentView(tv);
}

谁能帮帮我?

通过 setContentView 我正在显示我的拆分结果,我只得到未知的错误异常。没有显示其他描述。是我的方法不对还是有其他方法可以实现支付处理?

【问题讨论】:

  • 如果您不提供有关您遇到的错误的更多信息,我们将无法帮助您。它仅仅是“未知错误”,还是有错误代码或任何其他信息?另外,你为什么在Button onClick 方法中调用setContentView

标签: java android authorize.net


【解决方案1】:

感谢您的代码 :) 我从您的代码中获得了在 android 中实现 authorize.net 的新想法我不知道您遇到了什么错误,但是当我尝试使用 post url 进行集成时遇到一个错误,我添加了“ x_market_type”在我的代码中,我得到了结果

 post_values.put ("x_market_type", "2");
我还集成了 authorize.net 提供的示例代码,但是对于我的自定义要求,您的代码对我有很大帮助。

如果您需要任何帮助而不是发表评论。 :)

【讨论】:

  • 嗨 Bhavin,我需要在我的应用程序中集成 authrozed.net .. 如何使用登录 ID 和交易密钥进行集成?我试图发送详细信息,但出现 E0003 错误。
  • 我没有得到任何响应结果,我只是得到“onPostExecute: |&nbsp”
【解决方案2】:

建议您使用 HTTPClient 代替,如本示例所示 How do I make an http request using cookies on Android?

从我在您的代码中可以看到:

  1. 本节将在末尾添加一个 &
    while( keys.hasMoreElements() ) {
    String key = URLEncoder.encode(keys.nextElement().toString(),"UTF-8");
    String value = URLEncoder.encode(post_values.get(key).toString(),"UTF-8");
    post_string.append(key + "=" + value + "&");
    

    }

  2. 您只读取了服务器返回的一行内容。即使内容可能放在一行中,HTTP 标头也会跨越几行
String responseData = rawResponse.readLine();
  1. 您使用了服务器可能不接受的默认用户代理请求标头

如果您想尝试修复当前代码,我建议您对其进行调试或输入一些日志语句(例如,您可以使用 aLogCat 应用程序查看)

【讨论】:

    【解决方案3】:

    //Authorize.net android 实现使用 volley post。这可能会对您和 rashmi 有所帮助,感谢您的代码和 bhavin 的错误帮助

    final String txtAmount=totalprice.getText().toString();
            final String txtFName = first_name;
            final String txtLName=last_name;
            final String txtAddress=address_1;
            final String txtCity=city;
            final String txtState=state;
            final String txtzipcode=postcode;
            final String txtEmail=email;
            final String txtCreditCard=CardNumber;
            String txtCVV2=Cvv;
    
            String drpMonth=Month;
            String drpYear=Year;
            final String date= drpMonth.concat(drpYear);
    
    
    
            String url = Uri.parse("https://test.authorize.net/gateway/transact.dll").buildUpon()
                    .build().toString();
    
            StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            Log.e("====", response);
                            if (dialog != null && dialog.isShowing()) {
                                dialog.dismiss();
                            }
    
                            try {
                                JSONObject jsonObject = new JSONObject(response);
    
    
    
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Log.e("====", error.toString());
                            if (dialog != null && dialog.isShowing()) {
                                dialog.dismiss();
                            }
                        }
                    }) {
    
                @Override
                protected Map<String, String> getParams() throws AuthFailureError {
                    Map<String, String> post_values = new HashMap<String, String>();
                    post_values.put ("x_login", "8RtP63yV");
                    post_values.put ("x_tran_key", "9A4a59AThQh4c6wG");
    
                    post_values.put ("x_version", "3.1");
                    post_values.put ("x_delim_data", "TRUE");
                    post_values.put ("x_delim_char", "|");
                    post_values.put ("x_relay_response", "FALSE");
                    post_values.put ("x_market_type", "2");
    
                    post_values.put ("x_type", "AUTH_CAPTURE");
                    post_values.put ("x_method", "CC");
                    post_values.put ("x_card_num", txtCreditCard);
                    post_values.put ("x_exp_date", date);
    
                    post_values.put ("x_amount", txtAmount);
                    post_values.put ("x_description", "Sample Transaction");
    
                    post_values.put ("x_first_name",txtFName);
                    post_values.put ("x_last_name",txtLName);
                    post_values.put ("x_address", txtAddress);
                    post_values.put ("x_city", txtCity);
                    post_values.put ("x_state",txtState);
                    post_values.put ("x_zip", txtzipcode);
                    post_values.put ("x_email", txtEmail);
                    return post_values;
                }
            };
    
            RequestQueue requestQueue = Volley.newRequestQueue(this);
            requestQueue.add(stringRequest);
    

    【讨论】:

      猜你喜欢
      • 2012-07-29
      • 2013-11-18
      • 2012-04-02
      • 2017-09-27
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多