如何在没有商户账户的情况下使用 Braintree 进行买卖双方的付款?

Posted

技术标签:

【中文标题】如何在没有商户账户的情况下使用 Braintree 进行买卖双方的付款?【英文标题】:How to use Braintree for buyer to seller payments without Merchant account? 【发布时间】:2019-11-10 21:00:07 【问题描述】:

我正在为物业租赁管理开发一个 android 应用程序,租户可以直接向房东支付租金。 我想使用 Braintree,因为它支持信用卡/借记卡、PayPal 和 谷歌支付。

到目前为止我已经尝试过,

    我已经尝试过创建 Braintree 的沙盒账户并进行简单的支付转账给单个商家。 探索了 Stripe Connect,但文档看起来很耗时。 还探索了 Braintree Direct,但它显示的文档与单一商户支付转账相同。我已按照上述步骤进行操作,并引导我实施单一商家付款转移。

我的问题:

    用户如何通过 Android SDK 或服务器上的 php sdk 使用 Braintree 直接向其他用户发送付款? 我需要 Braintree 的企业帐户来实施上述服务吗? 您能否推荐任何有关买方到卖方付款集成的示例,无论使用任何编程语言,但使用 Braintree / Paypal?

    这是根据文档处理付款的服务器代码:

    $result=Braintree_Transaction::sale([
        'amount'=>$amount,
        'paymentMethodNonce'=>$nonce,
        'options'=> [
            'submitForSettlement'=>True
            ]
        ]);
    

    我愿意接受任何其他解决方案,只要它通过示例或参考文档符合我的需要。

那么,有没有什么参数可以让我们直接向收款人转账?

我知道上面有很多问题,但我真的很困惑,因为没有关于 android 应用程序的适当文档,也没有找到合适的集成示例。

任何指导都会有所帮助。

【问题讨论】:

好的,更新了我的问题。现在,如何使用braintree直接处理租户向房东支付的租金? 如果您问“如何避免创建商家帐户”,听起来您需要来自 articles.braintreepayments.com/get-started/… 的“仅网关集成”,并且需要直接联系 Braintree。否则,您应该更详细地解释 developers.braintreepayments.com/start/hello-client/android/v2 是如何不合适的。或链接到您引用的 PayPal 或 Braintree 文档。 @MorrisonChang ,我已经用我提到的文档链接更新了我的问题描述以及我对 Braintree 的需求。 @MorrisonChang 我主要担心的是没有单一的房东也没有单一的租户,所以 Braintree Direct 是否支持这种任何用户都可以直接向任何其他用户付款的设施? 我花了一段时间才找到,使用的关键字是“支付提供商”,用于向房东汇款。付款/付款使用不同的 API,因此您应该联系 Braintree about Hyperwallet 和/或自行调查 Hyperwallet 并检查他们的 developer documentation 【参考方案1】:

这是实现 Braintree 的适当文档。看看这个 -

https://developers.braintreepayments.com/guides/drop-in/setup-and-integration/android/v2

在你的 gradle 中添加这个 -

dependencies 
  implementation 'com.braintreepayments.api:drop-in:3.7.1'

在您的付款按钮中调用 -

public void onBraintreeSubmit(View v) 
  DropInRequest dropInRequest = new DropInRequest().clientToken(clientToken);
  startActivityForResult(dropInRequest.getIntent(this), REQUEST_CODE);

您将在 Activity 的 onActivtyResult 中获得一个随机数 -

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
  if (requestCode == REQUEST_CODE) 
    if (resultCode == RESULT_OK) 
      // use the result to update your UI and send the payment method nonce to your server
      DropInResult result = data.getParcelableExtra(DropInResult.EXTRA_DROP_IN_RESULT);
     else if (resultCode == RESULT_CANCELED) 
      // the user canceled
     else 
      // handle errors here, an exception may be available in
      Exception error = (Exception) data.getSerializableExtra(DropInActivity.EXTRA_ERROR);
    
  

然后,如果您不使用卡,则调用配置不同的付款方式,例如 Google Pay 等。

希望对您有所帮助。

【讨论】:

感谢您的回答,但我已经完成了。我正在寻找来自 Braintree 的买方到卖方集成服务。请仔细阅读我的问题,我已经用链接更新了它以解释我想要实现的目标。 当然。感谢更新。【参考方案2】:
public void getpaymentstatus(final Context context,String token,String user_id,String ride_id)

    ApiServiceInterface service=getApiInstance(context);
    try 
        service.Passengerpaymentstatus(token,user_id,ride_id)
                .enqueue(new Callback<PaymentStatus>() 
                    @Override
                    public void onResponse(Call<PaymentStatus> call, Response<PaymentStatus> response) 
                        if (response.isSuccessful())
                        
                            if (response!=null)
                            
                                try 
                                    PaymentStatus paymentStatus=response.body();
                                    passengerPaymentStatus.Passengerpaymentstatusclass(paymentStatus);
                                catch (Exception e)
                                
                                    e.printStackTrace();
                                
                            
                        
                    

                    @Override
                    public void onFailure(Call<PaymentStatus> call, Throwable t)
                    
                        String message=context.getResources().getString(R.string.error_message);
                        PopupHelper.displayAlertDialog(context, message);
                        t.printStackTrace();
                    
                );
    catch (Exception e)
    
        e.printStackTrace();
    

【讨论】:

【参考方案3】:
private ApiServiceInterface getApiInstance(Context context) 
    HttpLoggingInterceptor logInter = new HttpLoggingInterceptor();
    logInter.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient mIntercepter = new OkHttpClient.Builder()
            .addInterceptor(logInter)
            .build();
    String BASE_URL = "http://192.168.0.14:80/api/auth/";
     Retrofit retrofitInstance = new Retrofit.Builder()
            //.addConverterFactory(new NullOnEmptyConverterFactory())
            .addConverterFactory(GsonConverterFactory.create())
            .baseUrl(BASE_URL)
            .client(mIntercepter)
            .build();
    return retrofitInstance.create(ApiServiceInterface.class);

【讨论】:

以上是关于如何在没有商户账户的情况下使用 Braintree 进行买卖双方的付款?的主要内容,如果未能解决你的问题,请参考以下文章

如何区分我的 BrainTree 商户账号?

用braintree生产账户接受paypal

来自paypal沙箱的消息:“此PayPal交易的货币必须与商户账户的货币匹配”

django数据库事务

Braintree 可以在没有账单信息的情况下从卡中收取费用吗?

企业付款到零钱