Fondy 是乌克兰最大的第三方支付公司, 最近公司需要和他对接, 了解其运行原理后, 特在此记录.
一、网关支付有两种
1、客户端直接调用Fondy的支付网关,重定向到支付页面
2、客户端调用后台, 后台调用Fondy的支付网关,返回支付连接给客户端, 客户端用WEBVIEW打开
综合考虑后,最后决定采用第二种方式, 由后台来调用Fondy支付网关, 以下是相关代码
// 获取支付相关参数
FondyConfig config = getConfig(request.getConfigMark());
// 创建返回对象
DirectPayResponse response = new DirectPayResponse(config.getChannel(), config);
response.setSuccess(true);
response.setPaySuccessful(false);
// 支付相关参数
Map<String, String> param = new LinkedHashMap<String, String>();
BigDecimal multiply = request.getTotalFee().multiply(new BigDecimal("100"));
param.put("amount", String.valueOf(multiply.intValue()));
param.put("currency", request.getCurrency());
param.put("merchant_id", config.getMerchant_id());
param.put("order_desc", request.getSubject());
param.put("order_id", request.getOutTradeNo());
param.put("response_url", request.getNotifyUrl());
param.put("server_callback_url", request.getReturnUrl());
// 此参数有特殊意义
param.put("required_rectoken", "Y");
//排序
Map<String, String> orderMap = mapOrder(param);
param.put("signature", getSignature(orderMap, config.getPrimaryKey()));
JSONObject object = new JSONObject();
object.put("request", param);
String doPost = HttpClientUtil.doPost(url, object.toString());
if (StringUtils.isBlank(doPost)) {
response.setSuccess(false);
response.setMsg("Connect Fondy timeout");
<