【问题标题】:Authorize.NET gateway API for Android is not working适用于 Android 的 Authorize.NET 网关 API 不起作用
【发布时间】:2014-03-18 01:09:32
【问题描述】:

我正在尝试 Authorize.net 支付 API。我已经完成了tutorial page 中显示的所有步骤。

但是当我点击Login 按钮时,它什么也没做,这意味着它并不是说我的用户名/密码不正确或正确,什么都没有。

根据教程链接,步骤 7 无法正常工作。

当应用启动时,点击“授权和捕获”按钮。系统将提示您一个对话框,要求您输入登录 ID 和密码。这些是您的 Authorize.Net 帐户登录凭据。

如果这是您第一次从新设备(无论是真实的还是虚拟的)执行此登录,登录将失败并声明该设备已注册但正在等待批准。在这种情况下,您需要登录沙箱 (https://test.authorize.net/) 并启用新设备。您可以通过以下方式找到:

首页 > 账户(设置)> 安全设置(移动设备管理)

在那里,您应该会看到您的新设备处于“待处理”状态。单击新设备并启用它。再次点击登录按钮;交易应该会成功,系统会提示您 authCode 和 refTransId。

我的 ExampleActivity 代码与该链接中的代码相同。我在 AndroidManifest.xml 中给予了适当的许可

这是我的 logcat 详细信息,

02-18 16:43:05.454: D/AuthNetActivityBase(11420): sleeping getMerchant()
02-18 16:43:05.954: D/AuthNetActivityBase(11420): sleeping getMerchant()
02-18 16:43:06.454: D/AuthNetActivityBase(11420): sleeping getMerchant()
02-18 16:43:06.954: D/AuthNetActivityBase(11420): sleeping getMerchant()
02-18 16:43:07.454: D/AuthNetActivityBase(11420): sleeping getMerchant()
02-18 16:43:07.954: D/AuthNetActivityBase(11420): sleeping getMerchant()
02-18 16:43:08.454: D/AuthNetActivityBase(11420): sleeping getMerchant()
02-18 16:43:08.959: D/AuthNetActivityBase(11420): sleeping getMerchant()
02-18 16:43:09.459: D/AuthNetActivityBase(11420): sleeping getMerchant()
02-18 16:43:09.959: D/AuthNetActivityBase(11420): sleeping getMerchant()
02-18 16:43:10.459: D/AuthNetActivityBase(11420): sleeping getMerchant()
02-18 16:43:10.959: D/AuthNetActivityBase(11420): sleeping getMerchant()
02-18 16:43:11.459: D/AuthNetActivityBase(11420): sleeping getMerchant()
02-18 16:43:11.959: D/AuthNetActivityBase(11420): sleeping getMerchant()
02-18 16:43:12.459: D/AuthNetActivityBase(11420): sleeping getMerchant()
02-18 16:43:12.959: D/AuthNetActivityBase(11420): sleeping getMerchant()
02-18 16:43:13.459: D/AuthNetActivityBase(11420): sleeping getMerchant()
02-18 16:43:13.959: D/AuthNetActivityBase(11420): sleeping getMerchant()

【问题讨论】:

    标签: android authorize.net


    【解决方案1】:

    好的,我自己解决了这个问题,

    我在tutorial page 的第 2 步中犯了一个错误。我刚刚重新配置了应用程序,它工作正常。

    【讨论】:

    • 当我运行示例时,它工作正常,但是将此示例集成到我的应用程序中,进度对话框不断显示,并且定位显示您在上面发布的相同日志 plzz help @user3322955
    • @NeetuShrivastava 你有任何解决方案吗,我有同样的问题“将此示例集成到我的应用程序中”不起作用。
    • 正如@user3322955提到的第二步,这意味着你需要添加权限 在清单文件中
    • @AndroGeek 我知道,我添加了它并且它为我工作,而我正在整合这个项目来挖掘它显示的错误。
    • 您已发布以下代码和解决方案。只需仔细阅读文档并调试您的代码。我现在不记得我为这个例外做了什么。
    【解决方案2】:

    我终于找到并解决了这个问题。

    Authorize.net 示例中有一个类名为MobileMerchantAuthActivity.java,这里是一个AsyncTask ExecuteTransactionTask,在登录按钮点击内部调用,像这样。

    validateButton.setOnClickListener(new OnClickListener() {
    
                    public void onClick(View v) {
                        showLoggingInDialog();
                        Log.d("Mobile_merchent", "after dialog called  " + loginIdEdit.getText().toString() +"   "+
                                passwordEdit.getText().toString());
    
                        PasswordAuthentication passAuth = PasswordAuthentication
                            .createMerchantAuthentication(loginIdEdit.getText().toString(),
                                passwordEdit.getText().toString(), deviceId);
                        _merchant = Merchant.createMerchant(env, passAuth);
                        Log.d("Mobile_merchent", "before asynctask called  ");
    
                        new ExecuteTransactionTask().execute();
    
                        }
                    });
    

    在将此项目与我的项目集成后,new ExecuteTransactionTask().execute(); 从未被执行 [我不知道原因是什么 :( ]。所以我用 runOnUiThread() 将 AsyncTask 更改为普通的 Thread 并且它现在工作正常。下面给出了我用于替换 AsyncTask 的新代码及其工作正常。

    protected void ExecuteTransactionTask_thread() {
            // TODO Auto-generated method stub
    
            Thread thread_replace_asynctask = new Thread(new Runnable(){
                @Override
                public void run() {
                    try {
    
                        try {
                            Log.d("Mobile_merchent", "asynctask called  ");
                            net.authorize.mobile.Transaction transaction = _merchant
                                .createMobileTransaction(TransactionType.MOBILE_DEVICE_LOGIN);
                            MobileDevice mobileDevice = MobileDevice.createMobileDevice(deviceId,
                                deviceDescription, deviceTelephoneNumber);
                            transaction.setMobileDevice(mobileDevice);
                            result = (net.authorize.mobile.Result) _merchant
                                .postTransaction(transaction);
    
                            // if the device hasn't been registered, register now and go from there
                            if (result.isResponseError()
                                && (result.getMessages().size() == 1 && MessageType.E00054
                                    .equals(result.getMessages().get(0)))) {
                                transaction = _merchant
                                    .createMobileTransaction(TransactionType.MOBILE_DEVICE_REGISTRATION);
                                transaction.setMobileDevice(mobileDevice);
                                result = (net.authorize.mobile.Result) _merchant
                                    .postTransaction(transaction);
    
                                // attempt login again
                                transaction = _merchant
                                    .createMobileTransaction(TransactionType.MOBILE_DEVICE_LOGIN);
                                transaction.setMobileDevice(mobileDevice);
                                result = (net.authorize.mobile.Result) _merchant
                                    .postTransaction(transaction);
                            }
                            resultCode = result.isResponseOk() ? RESULT_OK
                                : SimpleActivity.RESULT_FAILURE;
                        } catch (Exception e) {
                            Log.e(this.getClass().getName(), "executeTransaction failed.", e);
                            resultCode = SimpleActivity.RESULT_FAILURE;
                        }
                        runOnUiThread(new Runnable() {
                            public void run() {
                                Log.d("Mobile_merchent", "asynctask post called  " + String.valueOf(resultCode));
    
                                switch (resultCode) {
                                case RESULT_CANCELED:
                                    setResult(RESULT_CANCELED);
                                    dismissLoggingInDialog();
                                    finish();
                                    break;
                                case SimpleActivity.RESULT_FAILURE:
                                    if (result != null) {
                                        showAlert(result.getMessages().size() > 0 ? result.getMessages()
                                            .get(0).getText() : MessageType.E00000.getText());
                                    } else {
                                        setResult(SimpleActivity.RESULT_FAILURE);
                                        dismissLoggingInDialog();
                                        finish();
                                    }
                                    break;
                                case RESULT_OK:
    
                                    // check if the result was from a registration or a successful login
                                    AuthNetActivityBase.sessionToken = result.getSessionToken();
                                    SessionTokenAuthentication sessionTokenAuthentication = SessionTokenAuthentication
                                        .createMerchantAuthentication(_merchant.getMerchantAuthentication()
                                            .getName(), result.getSessionToken(), deviceId);
                                    _merchant.setMerchantAuthentication(sessionTokenAuthentication);
    
                                    setResultIntent();
                                    break;
                                }   
                            }
                        });
    
    
    
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
            thread_replace_asynctask.start();
        }
    

    并在登录按钮单击时调用ExecuteTransactionTask_thread()函数而不是new ExecuteTransactionTask().execute();,它肯定会工作。

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2023-03-24
      • 2013-03-14
      • 2021-01-02
      • 2014-05-19
      • 2016-09-20
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      相关资源
      最近更新 更多