TIPS: 此文章中的环境仅仅是在SandBox 进行了开发调试!
说明
- 为什么选择PayPal
 在国外,多数支付都是采用PayPal或者信用卡进行支付。 注意 对于使用PayPal,其实也有诸多限制,一定要调查清楚了再去分析是否合适自己的项目
- 为什么使用BrainTree
 在使用PayPal 的时候,我们计划采用集成SDK的方式进行支付。在PayPal的 APP SDK 项目中,已经不再维护 SDK,推荐使用 Braintree Direct 参见: https://github.com/paypal/PayPal-Android-SDK
- How it works 
准备工作
- 注册PayPal账号
 PayPal 地址: https://www.paypal.com/
- 注册Braintree沙箱账号
 因为注册一个正式的braintree比较麻烦,我们这里仅仅注册一个 Sandbox账号用来调试 Sandbox 注册地址:https://www.braintreepayments.com/my/sandbox 官方注册账号 https://www.braintreepayments.com
配置PayPal
- 创建Sandbox账号
- 登陆后 Dashboard->MyApps&Credentials ;
- 选择 Sandbox,然后点击 CreateApp
- 填写APP名称,并选择在沙箱中使用的账号
- 创建成功后,可以在 MyApps&Credentials 中显示你创建的APP,点击该APP进入项目,可以看到 Sandbox account 、Client ID 、Secret (需要点击show按钮)  
warn: 此时,尚未有 webhooks 配置
配置BrainTree
登陆到沙箱环境
- 配置PayPal
- 点击 下拉菜单中的 Processing
- 找到 PayPal ,点击后面的 “Options” ,去配置PayPal
- 分别填入 PayPalEmail 、PayPal Client Id ,PayPal ClientSecret
- 启用对信用卡的校验
- 找到 Processing -> Fraud Tools 中的 CVV,进入
- 如图配置

- 配置WebHooks
- 点击 API -> WebHooks -> create new webhook
- 填入:Destination URL (HTTPS only),并选择要通知的事件
- 校验WebHooks是否正确(需要先开发webhooks功能)

APP 实现代码
略
后台JAVA实现代码
//初始化 gateway
BraintreeGateway gateway = new BraintreeGateway(
	isProduct ? Environment.PRODUCTION : Environment.SANDBOX,
	merchant_id,
	public_key,
	private_key
);
//生成token
String token = gateway.clientToken().generate();
//请求交易
TransactionRequest request = new TransactionRequest()
	.amount( 这里放金额 )
	.paymentMethodNonce( 这里放APP提交过来的字符串码 )
	.orderId( 这里可以放订单号 )
	.options()
		.submitForSettlement(true)
		.paypal()
		.done()
	.storeInVaultOnSuccess(true)
	.done();
Result<Transaction> result = gateway.transaction().sale(request);
具体的JAVA代码实现,可以参考官方开发文档: https://developers.braintreepayments.com/guides/paypal/server-side/java
注意事项
- SandBox 环境下 WebHooks无效的问题
在测试过程中发现,交易成功后,无法收到回调。经过多次google,有提到该问题已经很久(据说修复了,但是一直不能用) 那么可以使用他们提供的 WebhookTestingGateway 进行测试
WebhookTestingGateway webhookTestingGateway = new WebhookTestingGateway(gateway.getConfiguration() );
Map<String, String> params =webhookTestingGateway.sampleNotification(WebhookNotification.Kind.SUBSCRIPTION_CHARGED_SUCCESSFULLY, merchant_id);
PayPal选择分析
1、PAYPAL企业账号注册(用于收款、提现的账号)
部分国家不可以注册
2、PAYPAL收款的汇率、手续费
支持银联、Visa、MasterCard、American Express、Discover Card用于支付
   手续费:
   当月累积收款$3000以下,4.4%+$0.3
   当月累积收款$3000-10000,3.9%+$0.3
   当月累积收款$10000-100000,3.7%+$0.3
   当月累积收款$100000,3.4%+$0.3
   汇率:
   收款货币使用美元,付款使用人民币,需要付款方把人民币兑换成美元后付款,兑换费率为正常汇率+固定兑换手续费2.5% 
3、PAYPAL提现
   不能提现人民币,只能使用电汇美金形式提现到银行账户(其他PAYPAL不支持的收款币种,都需要已电汇美金形式提现)
   提现必须使用银行账户,需要支持美元
   支持PAYPAL提现的中国银行:工商银行、建设银行、农业银行、中国银行、招商银行、交通银行、中信银行、民生银行、兴业银行、光大银行、华夏银行、浦发银行、邮政银行
   提现手续费:
   中国大陆:3-7个工作日,每次$35
   美国:3-4个工作日,每次$35
   中国香港:3-6个工作日,免费(低于1000HKD时,每笔3.5HKD)
   提现汇率:
   PAYPAL账户币种与提现币种相同,不需要支付汇率+兑换费,只需支付手续费
   PAYPAL账户币种与提现币种不同,需要支付汇率+2.5%兑换费+手续费
4、PAYPAL支持币种
收款币种:
  澳元、加元、瑞士法郎、捷克克朗、丹麦克朗、欧元、英镑、港币、福林、以色列新谢克尔、日元、墨西哥比索、挪威克朗、新西兰元、菲律宾比索、波兰兹罗提、俄罗斯卢布、瑞典克朗、新加坡元、泰铢、新台币、美元
  付款币种:100+
5、企业账户身份认证




