Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 404尝试创建事务树时未找到错误_Android_Heroku_Braintree_Braintree Rails - Fatal编程技术网

Android 404尝试创建事务树时未找到错误

Android 404尝试创建事务树时未找到错误,android,heroku,braintree,braintree-rails,Android,Heroku,Braintree,Braintree Rails,大家好,我正在尝试与Braintree进行交易,我正在使用Heroku rails服务器。我无法获得客户端令牌,当我尝试进行交易时,我得到404未找到。我正在使用GitHub上存储库中的演示应用程序。这是演示应用程序中的相关代码 import com.braintreepayments.demo.models.ClientToken; import com.braintreepayments.demo.models.Transaction; import retrofit.Callback;

大家好,我正在尝试与Braintree进行交易,我正在使用Heroku rails服务器。我无法获得客户端令牌,当我尝试进行交易时,我得到404未找到。我正在使用GitHub上存储库中的演示应用程序。这是演示应用程序中的相关代码

import com.braintreepayments.demo.models.ClientToken;
import com.braintreepayments.demo.models.Transaction;

import retrofit.Callback;
import retrofit.http.Field;
import retrofit.http.FormUrlEncoded;
import retrofit.http.GET;
import retrofit.http.POST;
import retrofit.http.Query;

public interface ApiClient {

    @GET("/client_token")
    void getClientToken(@Query("customer_id") String customerId, @Query("merchant_account_id") String merchantAccountId, Callback<ClientToken> callback);

    @FormUrlEncoded
    @POST("/nonce/transaction")
    void createTransaction(@Field("nonce") String nonce, Callback<Transaction> callback);

    @FormUrlEncoded
    @POST("/nonce/transaction")
    //@POST("/checkout")
    void createTransaction(@Field("nonce") String nonce, @Field("merchant_account_id") String merchantAccountId, Callback<Transaction> callback);

    @FormUrlEncoded
    @POST("/nonce/transaction")
    void createTransaction(@Field("nonce") String nonce, @Field("merchant_account_id") String merchantAccountId, @Field("three_d_secure_required") boolean requireThreeDSecure, Callback<Transaction> callback);
}
import com.braintreepayments.demo.models.ClientToken;
导入com.braintreepayments.demo.models.Transaction;
进口改装.回收;
导入reformation.http.Field;
导入reformation.http.FormUrlEncoded;
导入reformation.http.GET;
导入reformation.http.POST;
导入reformation.http.Query;
公共接口客户端{
@获取(“/client\u令牌”)
void getClientToken(@Query(“customer\u id”)字符串customerId,@Query(“merchant\u account\u id”)字符串merchantAccountId,回调);
@FormUrlEncoded
@过帐(“/nonce/transaction”)
void createTransaction(@Field(“nonce”)字符串nonce,回调);
@FormUrlEncoded
@过帐(“/nonce/transaction”)
//@过帐(“/结帐”)
void createTransaction(@Field(“nonce”)字符串nonce,@Field(“merchant\u account\u id”)字符串merchantAccountId,回调);
@FormUrlEncoded
@过帐(“/nonce/transaction”)
void createTransaction(@Field(“nonce”)字符串nonce、@Field(“merchant\u account id”)字符串merchantAccountId、@Field(“需要三个安全”)布尔值requiredthreedsecure、回调);
}
在交易活动中

 private void sendNonceToServer(PaymentMethodNonce nonce) {
        Callback<Transaction> callback = new Callback<Transaction>() {
            @Override
            public void success(Transaction transaction, Response response) {
                if (transaction.getMessage() != null &&
                        transaction.getMessage().startsWith("created")) {
                    setStatus(R.string.transaction_complete);
                    setMessage(transaction.getMessage());
                } else {
                    setStatus(R.string.transaction_failed);
                    if (TextUtils.isEmpty(transaction.getMessage())) {
                        setMessage("Server response was empty or malformed");
                    } else {
                        setMessage(transaction.getMessage());
                    }
                }
            }

            @Override
            public void failure(RetrofitError error) {
                Log.d("error",error.getResponse().getReason());
                setStatus(R.string.transaction_failed);
                setMessage("Unable to create a transaction. Response Code: " +
                        error.getResponse().getStatus() + " Response body: " +
                        error.getResponse().getBody());
            }
        };

        if (Settings.isThreeDSecureEnabled(this) && Settings.isThreeDSecureRequired(this)) {
            DemoApplication.getApiClient(this).createTransaction(nonce.getNonce(),
                    Settings.getThreeDSecureMerchantAccountId(this), true, callback);
        } else if (Settings.isThreeDSecureEnabled(this)) {
            DemoApplication.getApiClient(this).createTransaction(nonce.getNonce(),
                    Settings.getThreeDSecureMerchantAccountId(this), callback);
        } else if (nonce instanceof CardNonce && ((CardNonce) nonce).getCardType().equals("UnionPay")) {
            DemoApplication.getApiClient(this).createTransaction(nonce.getNonce(),
                    Settings.getUnionPayMerchantAccountId(this), callback);
        } else {
            DemoApplication.getApiClient(this).createTransaction(nonce.getNonce(), Settings.getMerchantAccountId(this),
                    callback);
        }
    }
private void sendNonceToServer(PaymentMethodNonce){
Callback Callback=new Callback(){
@凌驾
公共作废成功(交易、响应){
if(transaction.getMessage()!=null&&
transaction.getMessage().startsWith(“已创建”)){
设置状态(R.string.transaction_complete);
setMessage(transaction.getMessage());
}否则{
设置状态(R.string.transaction_失败);
if(TextUtils.isEmpty(transaction.getMessage())){
setMessage(“服务器响应为空或格式错误”);
}否则{
setMessage(transaction.getMessage());
}
}
}
@凌驾
公共无效失败(错误){
Log.d(“error”,error.getResponse().getReason());
设置状态(R.string.transaction_失败);
setMessage(“无法创建事务。响应代码:”+
错误。getResponse().getStatus()+“响应正文:”+
错误.getResponse().getBody());
}
};
if(Settings.isThreeDSecureEnabled(此)和&Settings.isThreeDSecureRequired(此)){
DemoApplication.getApiClient(this.createTransaction)(nonce.getNonce(),
Settings.getThreedSecureCommertaccountId(this),true,callback);
}else if(Settings.isThreeDSecureEnabled(此)){
DemoApplication.getApiClient(this.createTransaction)(nonce.getNonce(),
Settings.getThreedSecureCommertaccountId(this),回调);
}else if(cardnoce的nonce instanceof cardnoce&((cardnoce)nonce).getCardType().equals(“银联”)){
DemoApplication.getApiClient(this.createTransaction)(nonce.getNonce(),
getUnionPayMerchantAccountId(this),回调);
}否则{
DemoApplication.getApiClient(this).createTransaction(nonce.getNonce(),Settings.getMerchantAccountId(this),
回调);
}
}
就像我说的,我得到的客户端标记很好,所以我知道基本url很好,只是当我发送nonce时,我在尝试进行事务时得到了404 not found错误

感谢您的时间,如果您需要任何更多的信息,我将很乐意提供

编辑:我还收到一个错误,即商户账户未列入白名单,我不知道这是否与此有关

edit2我无法获取客户端令牌,或者我使用令牌化密钥弄错了。完全披露:我在Braintree工作。如果您有任何进一步的问题,请随时联系。此外,我还没有名声将此作为评论而不是回答。这就是说,这应该为你指明正确的方向

通常,当您试图操作的记录找不到时,我们会返回一个。例如,如果您试图传入一个客户,但客户ID无效。当您试图在创建客户标识之前或在客户存储在Vault中之前将客户标识传递到客户令牌时,这通常会表现出来。也就是说,请随时联系我们的客户,我们将很高兴深入研究我们的服务器日志,找到问题的根源


关于您关于白名单商户账户的问题,我们不要求以任何方式对商户账户进行白名单登记,也没有任何错误消息表明,在Braintree端,商户账户应被白名单登记。也就是说,您应该确保您要传递到客户端令牌的商户帐户存在于您的网关中。您可以通过导航至帐户>商户帐户信息>向下滚动至商户帐户部分来检查商户帐户的名称。如果您仍然遇到问题,您介意将完整的错误消息日志与您的一起发送到我们的服务器吗?我们不建议在公共论坛上共享此类帐户信息,但如果需要,我们非常乐意进一步帮助解决问题

我正在使用Android演示应用程序。所以我必须先创建一个客户?我想可能只是替换URL和标记化键当使用标记化键时,您可能只标记化支付信息。您可以不指定客户ID,而是设置spe