最开始对接的是Adyen的订阅,订阅并不是分期,是类似充会员的一种支付方式,每期支付完成,才会进行当前期数物品的对应发放。
// Set your X-API-KEY with the API key from the Customer Area.
Config config = new Config();
config.setApiKey("Your X-API-KEY"));
Client client = new Client(config);
Checkout checkout = new Checkout(client);
PaymentsRequest paymentsRequest = new PaymentsRequest();
Amount amount = new Amount();
amount.setCurrency("USD");
amount.setValue(0L);
paymentsRequest.setAmount(amount);
paymentsRequest.setReference("YOUR_ORDER_NUMBER");
paymentsRequest.setPaymentMethod(new HashMap<String, String>());
paymentsRequest.addCardData("4111111111111111", "02", "2030", "737", "Simon Hopper", true);
paymentsRequest.setShopperReference("YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j");
paymentsRequest.setReturnUrl("https://your-company.com/...");
paymentsRequest.setMerchantAccount("YOUR_MERCHANT_ACCOUNT");
paymentsRequest.setShopperInteraction("Ecommerce");
paymentsRequent.setRecurringProcessingModel("CardOnFile");
PaymentsResponse response = checkout.payments(paymentsRequest);
代码按示例来写基本就没有问题,但是有很多坑。
- 需要前后端一起对接,Adyen提供多种方式,这里前端是自己写的输入框,通过仅后端对接Api的方式开发。
- 卡号信息都需要加密,这里刚开始开发时,用的都是明文,且adyen测服联调是没有问题。到生产确发现用不了。因为测服把限制都放开了,生产缺没有权限打开。
这里普通商家是没有权限报错用户隐私信息的,包括卡信息等。想要报错,需要申请证书,每年付十几万dollar。一般商户肯定是不会付的。
那就只能使用Adyen提供的卡信息加密方式。通过前端引入js的形式,输入框直接使用js,实时对卡信息加密。向后端传输加密后的字符串。
Adyen不提供接口,且不提供加密方式。只有通过前端引js的方式进行加密。
- 经后期新增Adyen商户号发现,Api key,client key和链接前缀都不用改动,只要是在一个公司下的商户号,密钥可以公用。
- 订阅不只是通过信用卡支付可以,也可以通过其他很多支付渠道,后面又加了google pay等。