PAYPAL支付开发简介
本简介主要是给开发者一个参考,没有具体实现,也没有demo。但是,根据教程对paypal也能有个全方位的了解。
集成paypal支付需要先进入https://www.paypal.com/c2/home注册商家账户,然后进入https://developer.paypal.com/开发者平台,登录后点击默认应用可以查看账户的id和secret
一 普通支付(一次性商品购买)
网页支付
没做过,可以参考 https://blog.csdn.net/a53657561/article/details/64982411和https://blog.csdn.net/zxl646801924/article/details/79800418 ,同时可以参考官方文档 https://developer.paypal.com/docs/checkout/#,服务端如果想使用sdk方式,可以参考https://github.com/paypal/Checkout-Java-SDK。
客户端SDK支付
通过sdk方式接入paypal超级简单,paypal本身不再支持安卓sdk方法接入,而是要求开发者通过Braintree sdk接入,实际上是一个东西,通过Braintree不需要申请任何新的账户。具体参考文档https://developer.paypal.com/docs/accept-payments/express-checkout/ec-braintree-sdk/get-started/。
运行原理
服务端首先添加依赖
<dependency>
<groupId>com.braintreepayments.gateway</groupId>
<artifactId>braintree-java</artifactId>
<version>2.87.0</version>
</dependency>
/**
* 获取accessToken
* @return
*/
public static String getAccessToken() {
BraintreeGateway braintreeGateway = new BraintreeGateway(braintreeToken);
return braintreeGateway.clientToken().generate();
}
服务端将token和商品信息返回客户端,客户端通过sdk方式,进行支付,支付成功后,会返回一个nonce,客户端将nonce给服务端,服务端校验发货。由于我们产品是虚拟商品,不需要运输,也不需要填写相应信息,如果是实体商品,可以参考https://developer.paypal.com/docs/accept-payments/express-checkout/ec-braintree-sdk/client-side/android/v2/链接最下方的SDK参考。
服务端支付成功后回调接口,商品校验,java服务器端接入paypal移动支付可参考https://www.jianshu.com/p/6fd43355bb85。
sdk接入方式不需要服务器接收papal的通知,因为paypal会给客户端返回支付信息nonce,sdk直接回调服务器即可。如果确实有需要,可以参考后边的通知。
注意:1 paypal不支持人民币,沙盒账户好像可以,生产环境绝对不行。支持的货币种类见https://developer.paypal.com/docs/api/reference/currency-codes/
2 账户支持国家https://developer.paypal.com/docs/api/reference/country-codes/;使用沙盒账户调试时,国家国内可以。但是,上线生产环境时,进行调试时,建议使用国外账户的外币,国内的visa卡好像不行,我们调试时遇到这个问题了,不幸的是忘记具体细节了。
二 paypal连续包月
网上查找了好多关于paypal的连续包月感觉都不大好,因此自己查找文档,自己总结了。我开发使用的restApi请求,因为paypal的连续包月sdk方式讲解并不够明白,好多sdk实体类还没有解释。其实,说白了sdk也是对restApi的封装而已。
连续包月开发文档可以参考https://developer.paypal.com/docs/subscriptions/#,restApi开发文档地址https://developer.paypal.com/docs/api/subscriptions/v1/,建议不要使用https://developer.paypal.com/docs/api/payments.billing-plans/v1/,因为它要过期了。
开发前,需要理解以下一些概念。
Product 产品或商品,用户拿到手或享受的服务等。比如,购买一个网易云音乐连续包月,那么他实际获得的产品是听歌的权利或者说是服务,而不是连续包月这个虚拟的东西,本身连续包月并没有意义,服务本身才有意义。
Plan 计划。创建一个计划指向Product,计划可以是连续包周,连续包日,连续包季,连续包年等等,这是我们能够看到的展示到购买页面上的东西。
Subscription 订阅。点击付款->创建一个订阅->去订阅一个计划->用户付款->激活订阅->享受服务。这个订阅id是唯一的。
Product和Plan创建的restApi可以参考https://developer.paypal.com/docs/api/subscriptions/v1/。但实际上,它们不需要通过代码进行创建。沙盒环境登录https://www.sandbox.paypal.com/billing/plans,生产环境登录网站https://www.paypal.com/billing/plans或官网-工具-所有工具-收款-定期付款来管理,可以直接进行Product 和Plan的配置,而这一般是运营人员来进行,可以省却很多开发的力气。配置有一个注意事项,试用期是不计算在正式计划之内的。比如1年$500的计划,有1个月$5的试用期,是第1个月扣除$5,然后月末扣除$500,$505享受13个月服务。
创建一个订阅
直接使用rest api方式进行开发,前端或客户端只需要一个进行购买的重定向网址即可。
restApi文档https://developer.paypal.com/docs/api/subscriptions/v1/#subscriptions_create。
Demo如下:
package com.abc.paypal;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;