1.1 app或web前端请求令牌从你的服务器来初始化客户端SDK。
1.2 服务器生成和发送端令牌回您的客户机与服务器SDK。
1.3 一旦初始化客户端SDK和客户提交支付信息,布伦特里SDK传达这一信息,返回一个临时的付款方法。
1.4 然后你发送临时的支付到你的服务器。
1.5 你的服务器程序接收临时的支付方式从客户端,然后使用SDK创建一个事务或执行详细指南的其他Braintree 函数。
图1.1
逻辑交互
2.1 build.gradle的配置
dependencies {
compile 'com.braintreepayments.api:braintree:2.+'
compile 'com.braintreepayments.api:drop-in:2.+'
}
2.2 获取客户端的token
服务器负责生成客户端令牌,它包含授权和配置细节,你的客户端需要初始化客户端SDK。
从服务器请求客户端令牌,然后初始化Braintree 和现在drop-in UI(这个示例使用Android异步Http客户端从服务器请求客户端令牌-适应您自己的设置)。
AsyncHttpClient client = new AsyncHttpClient();
client.get("https://your-server/client_token", new TextHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, String clientToken) {
this.clientToken = clientToken;
}
});
2.3 尝试执行令牌demo
你应该常获得一个新客户经令牌,至少经常重启应用程序。最好的经验,你应该在阻止用户交互之前开始这个网络操作。您必须每个用户每次结账会话(checkout session)生成一个客户端令牌在服务器上。你应该常获得一个新客户经令牌,至少经常重启应用程序。最好的经验,你应该在阻止用户交互之前开始这个网络操作。您必须每个用户每次结账会话(checkout session)生成一个客户端令牌在服务器上。我们提供的端点在本例中仅用于演示目的。
public void onBraintreeSubmit(View v) {
PaymentRequest paymentRequest = new PaymentRequest()
.clientToken(eyJ2ZXJzaW9uIjoyLCJhdXRob3JpemF0aW9uRmluZ2VycHJpbnQiOiIyODQxYzU0MjRmZTQ4YTYzMGYxMjJjYzBhMTAyYzQyMWVlMjViN2YzYWZiYzAxYzlkZmE4MDg3OTFhY2FkODRjfGNyZWF0ZWRfYXQ9MjAxNS0xMS0yM1QwNjo1MDozNS44NzAzODAwNDUrMDAwMFx1MDAyNm1lcmNoYW50X2lkPTM0OHBrOWNnZjNiZ3l3MmJcdTAwMjZwdWJsaWNfa2V5PTJuMjQ3ZHY4OWJxOXZtcHIiLCJjb25maWdVcmwiOiJodHRwczovL2FwaS5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tOjQ0My9tZXJjaGFudHMvMzQ4cGs5Y2dmM2JneXcyYi9jbGllbnRfYXBpL3YxL2NvbmZpZ3VyYXRpb24iLCJjaGFsbGVuZ2VzIjpbXSwiZW52aXJvbm1lbnQiOiJzYW5kYm94IiwiY2xpZW50QXBpVXJsIjoiaHR0cHM6Ly9hcGkuc2FuZGJveC5icmFpbnRyZWVnYXRld2F5LmNvbTo0NDMvbWVyY2hhbnRzLzM0OHBrOWNnZjNiZ3l3MmIvY2xpZW50X2FwaSIsImFzc2V0c1VybCI6Imh0dHBzOi8vYXNzZXRzLmJyYWludHJlZWdhdGV3YXkuY29tIiwiYXV0aFVybCI6Imh0dHBzOi8vYXV0aC52ZW5tby5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tIiwiYW5hbHl0aWNzIjp7InVybCI6Imh0dHBzOi8vY2xpZW50LWFuYWx5dGljcy5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tIn0sInRocmVlRFNlY3VyZUVuYWJsZWQiOnRydWUsInRocmVlRFNlY3VyZSI6eyJsb29rdXBVcmwiOiJodHRwczovL2FwaS5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tOjQ0My9tZXJjaGFudHMvMzQ4cGs5Y2dmM2JneXcyYi90aHJlZV9kX3NlY3VyZS9sb29rdXAifSwicGF5cGFsRW5hYmxlZCI6dHJ1ZSwicGF5cGFsIjp7ImRpc3BsYXlOYW1lIjoiQWNtZSBXaWRnZXRzLCBMdGQuIChTYW5kYm94KSIsImNsaWVudElkIjpudWxsLCJwcml2YWN5VXJsIjoiaHR0cDovL2V4YW1wbGUuY29tL3BwIiwidXNlckFncmVlbWVudFVybCI6Imh0dHA6Ly9leGFtcGxlLmNvbS90b3MiLCJiYXNlVXJsIjoiaHR0cHM6Ly9hc3NldHMuYnJhaW50cmVlZ2F0ZXdheS5jb20iLCJhc3NldHNVcmwiOiJodHRwczovL2NoZWNrb3V0LnBheXBhbC5jb20iLCJkaXJlY3RCYXNlVXJsIjpudWxsLCJhbGxvd0h0dHAiOnRydWUsImVudmlyb25tZW50Tm9OZXR3b3JrIjp0cnVlLCJlbnZpcm9ubWVudCI6Im9mZmxpbmUiLCJ1bnZldHRlZE1lcmNoYW50IjpmYWxzZSwiYnJhaW50cmVlQ2xpZW50SWQiOiJtYXN0ZXJjbGllbnQzIiwiYmlsbGluZ0FncmVlbWVudHNFbmFibGVkIjp0cnVlLCJtZXJjaGFudEFjY291bnRJZCI6ImFjbWV3aWRnZXRzbHRkc2FuZGJveCIsImN1cnJlbmN5SXNvQ29kZSI6IlVTRCJ9LCJjb2luYmFzZUVuYWJsZWQiOmZhbHNlLCJtZXJjaGFudElkIjoiMzQ4cGs5Y2dmM2JneXcyYiIsInZlbm1vIjoib2ZmIn0=);
startActivityForResult(paymentRequest.getIntent(this), REQUEST_CODE);
}
2.4 UI界面环节的使用
此时,您已经准备好从你的客户那里收集付款细节。
Drop-in是最简单的方法开始。它提供了一个完全成熟的开箱即用的支付体验。你也可以选择创建一个自定义用户界面,然后标记直接支付方式的细节。
如何开始使用Drop-in:当你的用户提供的付款信息, 你需要重载onActivityResult去获得这个响应,您的应用程序代码调用将在此收到临时的支付方式,:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
PaymentMethodNonce paymentMethodNonce = data.getParcelableExtra(
BraintreePaymentActivity.EXTRA_PAYMENT_METHOD_NONCE
);
String nonce = paymentMethodNonce.getNonce();
// Send the nonce to your server.
}
}
}
2.5 发送支付方式到你的服务端
发送临时产生的支付方式 到服务器(再一次,这个示例使用Android异步Http客户端-适应您自己的设置):
void postNonceToServer(String nonce) {
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("payment_method_nonce", nonce);
client.post("http://your-server/payment-methods", params,
new AsyncHttpResponseHandler() {
// Your implementation here
}
);
}
2.6 最后一点
你应该有一个工作中的客户端(client-side)检验流程工作。当你的用户提供支付细节,你收到临时的付款方法和发送给你的服务器。
接下来,您的服务器通过使用临时的支付方式创建一个事务来关闭循环。
3 创建服务端:
服务端的配置需要一个沙箱账号,以及java lib库或者使用maven引用等等。此外,客户端的token由服务端生成。服务器负责生成客户端令牌,其中包含客户端用来初始化客户端SDK和Braintree交互所需要的所有授权和配置信息。
Ps:如果混淆了代码请输入下面规则:
-keep class com.braintree.** {*; }
-keep class com.braintreegateway.** {*; }
-dontwarn com.google.android.gms.**
-dontwarn com.devicecollector.**
android demo部分代码示例
http://download.csdn.net/detail/u010716109/9588697
IOS部分示例:
[self createOrder:^(NSString *orderNo) {
Log(@"ordorNo = %@",orderNo);
self.orderNo=orderNo;
self.dataCollector = [[BTDataCollector alloc]
initWithEnvironment:BTDataCollectorEnvironmentProduction];
BTDropInViewController *dropInViewController = [[BTDropInViewController alloc]
initWithAPIClient:self.braintreeClient];
BTUI *btUI = [BTUI braintreeTheme];
dropInViewController.theme=btUI;
dropInViewController.delegate = self;
dropInViewController.paymentRequest.summaryTitle=self.address.name;
dropInViewController.paymentRequest.summaryDescription=self.address.addr;
dropInViewController.paymentRequest.displayAmount=[NSString stringWithFormat:@"%@ %.2f",XFLOCALIZATION(@"TOTAL:"),self.orderGroups.allPrice];
dropInViewController.paymentRequest.currencyCode=[TTSettingTool getSaveCurrencyId];
[self.navigationController pushViewController:dropInViewController animated:YES];
}];