提交 38ecd31c authored 作者: zgy's avatar zgy

完成flutterwave支付

上级 da07cbe8
......@@ -19,7 +19,6 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<skipTests>true</skipTests>
</properties>
......@@ -124,7 +123,7 @@
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<!-- <version>2.10.3</version>-->
<!-- <version>2.10.3</version>-->
</dependency>
<!--swagger2-->
<dependency>
......@@ -261,6 +260,17 @@
<artifactId>rest-api-sdk</artifactId>
<version>1.4.2</version>
</dependency>
<!-- <dependency>
<groupId>com.flutterwave</groupId>
<artifactId>Rave-Java</artifactId>
<version>1.03</version>
<exclusions>
<exclusion>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
</exclusion>
</exclusions>
</dependency>-->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
......@@ -316,7 +326,17 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.flutterwave</groupId>
<artifactId>Rave-Java</artifactId>
<version>1.03</version>
<exclusions>
<exclusion>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
......
package com.diaoyun.zion.chinafrica.controller;
import com.diaoyun.zion.chinafrica.service.FlutterWaveService;
import com.diaoyun.zion.chinafrica.vo.FlutterWaveCard;
import com.diaoyun.zion.master.base.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @Auther: wudepeng
* @Date: 2019/11/08
* @Description: FlutterWave支付
*/
@RestController
@RequestMapping("/flutterwave")
public class FlutterWaveController {
@Autowired
private FlutterWaveService flutterWaveService;
/**
* 发起支付
*
* @param orderId 订单ID
* @param flutterWaveCard 账号信息
* @return
*/
@PostMapping("/pay")
public Result payForOrderByCard(@RequestParam("orderId") String orderId, @RequestBody FlutterWaveCard flutterWaveCard) {
return flutterWaveService.payForOrder(orderId, flutterWaveCard);
}
/**
* 退款
* @param flutterWaveCard
* @return
*/
@PostMapping("/refund")
public Result refund(@RequestBody FlutterWaveCard flutterWaveCard) {
return flutterWaveService.refund(flutterWaveCard);
}
}
package com.diaoyun.zion.chinafrica.service;
import com.diaoyun.zion.chinafrica.vo.FlutterWaveCard;
import com.diaoyun.zion.master.base.Result;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @Auther: wudepeng
* @Date: 2019/11/09
* @Description:
*/
public interface FlutterWaveService {
public Result payForOrder(String orderId, FlutterWaveCard flutterWaveCard);
public Result refund(FlutterWaveCard flutterWaveCard);
}
package com.diaoyun.zion.chinafrica.service.impl;
import com.diaoyun.zion.chinafrica.constant.KeyConstant;
import com.diaoyun.zion.chinafrica.dao.TbCfFinanceDao;
import com.diaoyun.zion.chinafrica.dao.TbCfIssueCouponDao;
import com.diaoyun.zion.chinafrica.dao.TbCfOrderDao;
import com.diaoyun.zion.chinafrica.entity.TbCfFinanceEntity;
import com.diaoyun.zion.chinafrica.entity.TbCfOrderEntity;
import com.diaoyun.zion.chinafrica.enums.DeliveryStatusEnum;
import com.diaoyun.zion.chinafrica.enums.OrderStatusEnum;
import com.diaoyun.zion.chinafrica.service.FlutterWaveService;
import com.diaoyun.zion.chinafrica.vo.FlutterWaveCard;
import com.diaoyun.zion.chinafrica.vo.TbCfFinanceVo;
import com.diaoyun.zion.chinafrica.vo.TbCfOrderVo;
import com.diaoyun.zion.master.base.Result;
import com.diaoyun.zion.master.common.RedisCache;
import com.diaoyun.zion.master.config.DomainProperties;
import com.diaoyun.zion.master.enums.ResultCodeEnum;
import com.diaoyun.zion.master.util.HttpClientUtil;
import com.diaoyun.zion.master.util.IdUtil;
import com.github.theresasogunle.CardCharge;
import com.github.theresasogunle.Environment;
import com.github.theresasogunle.RaveConstant;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import sun.net.www.http.HttpClient;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @Auther: wudepeng
* @Date: 2019/11/09
* @Description: FlutterWave支付
*/
@Service("flutterWaveService")
@Transactional
public class FlutterWaveServiceImpl implements FlutterWaveService {
@Autowired
private TbCfFinanceDao tbCfFinanceDao;
@Autowired
private TbCfOrderDao tbCfOrderDao;
@Autowired
private TbCfIssueCouponDao tbCfIssueCouponDao;
@Autowired
private DomainProperties domainProperties;
@Resource
private RedisCache<Object> orderRedisCache;
private static Logger logger = LoggerFactory.getLogger(FlutterWaveServiceImpl.class);
private String FLUTTERWAVE_REFUND_URL = "https://api.ravepay.co/gpx/merchant/transactions/refund";
/**
* 使用卡号支付
*
* @param orderId
* @param flutterWaveCard
* @return
*/
@Override
public Result payForOrder(String orderId, FlutterWaveCard flutterWaveCard) {
RaveConstant.PUBLIC_KEY = domainProperties.getProperty("flutterwave.public.key");
RaveConstant.SECRET_KEY = domainProperties.getProperty("flutterwave.secret.key");
RaveConstant.ENVIRONMENT = Environment.STAGING; //or live
Result result = new Result();
TbCfOrderVo tbCfOrderVo = (TbCfOrderVo) orderRedisCache.get(KeyConstant.ORDER_DET + orderId);
if (tbCfOrderVo != null) {
try {
String orderPrice = tbCfOrderVo.getRealityPay().toString();
CardCharge ch = new CardCharge();
ch.setCardno(flutterWaveCard.getCard())
.setCvv(flutterWaveCard.getCvv())
.setCurrency("USD")
.setCountry("NG")
.setAmount(orderPrice)
.setExpiryyear(flutterWaveCard.getYear())
.setExpirymonth(flutterWaveCard.getMonth())
.setEmail(flutterWaveCard.getEmail())
.setTxRef("Afri-shop" + new Date().getTime());
JSONObject chargevisa = ch.chargeVisaAndIntl();
//if timeout, poll
//JSONObject pollvisa = ch.chargeVisaAndIntl(true);
System.out.println(chargevisa);
net.sf.json.JSONObject object = net.sf.json.JSONObject.fromObject(chargevisa.toString());
String status = object.getString("status");
System.out.println("========>>>" + status);
if ("success".equals(status)) {
net.sf.json.JSONObject data = object.getJSONObject("data");
String paymentId = data.getString("paymentId");
String authurl = data.getString("authurl");
String url = authurl.split(". ")[0];
changeOrderState(paymentId, tbCfOrderVo);
//修改优惠券状态
if (tbCfOrderVo.getCouponId() != null && tbCfOrderVo.getPayStatus() == 20) {
tbCfIssueCouponDao.changeCoupnStatus(tbCfOrderVo.getUserId(), tbCfOrderVo.getCouponId());
}
//生成支付流水
TbCfFinanceEntity finance = createFinance(paymentId, url, tbCfOrderVo);
TbCfFinanceVo tbCfFinanceVo = new TbCfFinanceVo();
BeanUtils.copyProperties(finance, tbCfFinanceVo);
//清除订单
result.setData(chargevisa).setMessage("Pay for success!");
logger.info(tbCfOrderVo.getUserName() + ":Pay for success! The order number is:" + tbCfOrderVo.getOrderId());
removeRedisCache(tbCfOrderVo);
} else {
result.setCode(ResultCodeEnum.ORDER_PAY_ERROR.getCode()).setMessage("payment failure!");
logger.error(tbCfOrderVo.getUserName() + ":payment failure! The order number is:" + tbCfOrderVo.getOrderId());
}
} catch (Exception e) {
result.setCode(ResultCodeEnum.ORDER_PAY_ERROR.getCode()).setMessage(e.getMessage());
logger.error(e.getMessage(), e);
return result;
}
} else {
result.setMessage("Order does not exist!");
result.setCode(ResultCodeEnum.ORDER_PAY_ERROR.getCode());
}
return result;
}
/**
* 退款
*
* @param flutterWaveCard
* @return
*/
@Override
public Result refund(FlutterWaveCard flutterWaveCard) {
Result result = new Result();
RaveConstant.SECRET_KEY = domainProperties.getProperty("flutterwave.secret.key");
Map<String, Object> params = new HashMap<>();
params.put("ref", flutterWaveCard.getRef());
params.put("seckey", RaveConstant.SECRET_KEY);
if (flutterWaveCard.getAmount() != null) {
params.put("amount", flutterWaveCard.getAmount());
}
try {
String post = HttpClientUtil.sendPostWithBodyParameter(FLUTTERWAVE_REFUND_URL, params);
result.setData(post).setMessage("Refund success!");
logger.info("Refund success!");
} catch (IOException e) {
result.setCode(ResultCodeEnum.ORDER_PAY_ERROR.getCode()).setMessage(e.getMessage());
logger.error(e.getMessage(), e);
return result;
}
return result;
}
/**
* 清空订单缓存
*
* @param tbCfOrderVo
*/
private void removeRedisCache(TbCfOrderVo tbCfOrderVo) {
orderRedisCache.delete(KeyConstant.ORDER_DET + tbCfOrderVo.getOrderId());
String couponId = "";
if (StringUtils.isNotBlank(tbCfOrderVo.getCouponId())) {
couponId = tbCfOrderVo.getCouponId();
}
String orderIdAndCouponId = tbCfOrderVo.getOrderId() + ":" + tbCfOrderVo.getUserId() + ":" + couponId;
orderRedisCache.delete(KeyConstant.ORDER_EXP + orderIdAndCouponId);
}
/**
* 修改订单状态
*
* @param payId
* @param oldOrder
*/
private void changeOrderState(String payId, TbCfOrderVo oldOrder) {
//更改订单状态
TbCfOrderEntity tbCfOrder = new TbCfOrderEntity();
tbCfOrder.setOrderId(oldOrder.getOrderId());
tbCfOrder.setUpdateTime(new Date());
tbCfOrder.setDealTime(new Date());
tbCfOrder.setOrderStatus(OrderStatusEnum.PAID.getValue());
tbCfOrder.setDeliveryFlag(DeliveryStatusEnum.PROCESSING.getValue());
tbCfOrder.setPayId(payId);
tbCfOrder.setPayStatus(OrderStatusEnum.PAID.getValue());
tbCfOrderDao.update(tbCfOrder);
}
/**
* 记录财务流水
*
* @param
* @param tbCfOrderVo
*/
private TbCfFinanceEntity createFinance(String paymentId, String url, TbCfOrderVo tbCfOrderVo) {
TbCfFinanceEntity tbCfFinance = new TbCfFinanceEntity();
tbCfFinance.setOrderId(tbCfOrderVo.getOrderId());
tbCfFinance.setFinaceId(IdUtil.createIdbyUUID());
tbCfFinance.setPayAccount(tbCfOrderVo.getRealityPay());
tbCfFinance.setPayId(paymentId);
tbCfFinance.setPayTime(new Date());
tbCfFinance.setReceiptUrl(url);
tbCfFinance.setPayWayCode("flutterwave");
tbCfFinance.setUserId(tbCfOrderVo.getUserId());
tbCfFinanceDao.save(tbCfFinance);
return tbCfFinance;
}
}
......@@ -72,10 +72,15 @@ public class PayPalServiceImpl implements PayPalService {
storage.setReturnUrl(domainProperties.getProperty("paypal.success.url"));
//取消按钮转跳地址,这里用异步通知地址的兼容的做法
storage.setNotifyUrl(domainProperties.getProperty("paypal.cancel.url"));
HttpConfigStorage httpConfigStorage = new HttpConfigStorage();
PayService service = new PayPalPayService(storage);
TbCfOrderVo tbCfOrderVo = (TbCfOrderVo) orderRedisCache.get(KeyConstant.ORDER_DET + orderId);
TbCfOrderEntity orderEntity = tbCfOrderDao.queryObject(orderId);
if (orderEntity != null && OrderStatusEnum.PAID.getValue().equals(orderEntity.getPayStatus())) {
result.setMessage("Order paid");
result.setCode(ResultCodeEnum.ORDER_PAY_ERROR.getCode());
return result;
}
try {
if (tbCfOrderVo != null) {
BigDecimal realityPay = tbCfOrderVo.getRealityPay();
......@@ -90,11 +95,13 @@ public class PayPalServiceImpl implements PayPalService {
palResult.setPaypalUrl(url);
palResult.setOrderDesc(tbCfOrderVo.getUserName() + "'s order,the total price is $" + tbCfOrderVo.getRealityPay());
result.setData(palResult);
} else {
result.setCode(ResultCodeEnum.SERVICE_ERROR.getCode()).setMessage("订单不存在!");
result.setMessage("Order does not exist");
result.setCode(ResultCodeEnum.ORDER_PAY_ERROR.getCode());
}
} catch (Exception e) {
result.setCode(ResultCodeEnum.SERVICE_ERROR.getCode()).setMessage(e.getMessage());
result.setCode(ResultCodeEnum.ORDER_PAY_ERROR.getCode()).setMessage(e.getMessage());
logger.error(e.getMessage(), e);
return result;
}
......@@ -103,6 +110,7 @@ public class PayPalServiceImpl implements PayPalService {
@Override
public Result payForSuccess(HttpServletRequest request) {
TbCfOrderVo tbCfOrderVo = (TbCfOrderVo) orderRedisCache.get(KeyConstant.ORDER_DET + ORDER_ID);
Result result = new Result();
PayPalConfigStorage storage = new PayPalConfigStorage();
storage.setClientID(domainProperties.getProperty("paypal.client.app"));
......@@ -117,18 +125,20 @@ public class PayPalServiceImpl implements PayPalService {
String paymentId = (String) params.get("paymentId");
String token = (String) params.get("token");
if (service.verify(params)) {
System.out.println("支付成功");
result.setMessage("支付成功");
System.out.println("pay success");
result.setMessage("pay success");
logger.info(tbCfOrderVo.getUserName() + ":Pay for success! The order number is:" + tbCfOrderVo.getOrderId());
} else {
result.setMessage("支付失败");
result.setCode(ResultCodeEnum.ORDER_PAY_ERROR.getCode()).setMessage("Payment Failed");
logger.error(tbCfOrderVo.getUserName() + ":payment failure! The order number is:" + tbCfOrderVo.getOrderId());
}
if (ORDER_ID != null) {
TbCfOrderVo tbCfOrderVo = (TbCfOrderVo) orderRedisCache.get(KeyConstant.ORDER_DET + ORDER_ID);
if (tbCfOrderVo != null) {
//修改订单状态
changeOrderState(paymentId, tbCfOrderVo);
//修改优惠券状态
if (tbCfOrderVo.getCouponId() != null && tbCfOrderVo.getOrderStatus() == 20) {
if (tbCfOrderVo.getCouponId() != null && tbCfOrderVo.getPayStatus() == 20) {
tbCfIssueCouponDao.changeCoupnStatus(tbCfOrderVo.getUserId(), tbCfOrderVo.getCouponId());
}
//生成支付流水
......@@ -141,7 +151,7 @@ public class PayPalServiceImpl implements PayPalService {
}
} catch (IOException e) {
result.setCode(ResultCodeEnum.SERVICE_ERROR.getCode()).setMessage(e.getMessage());
result.setCode(ResultCodeEnum.ORDER_PAY_ERROR.getCode()).setMessage(e.getMessage());
logger.error(e.getMessage(), e);
return result;
}
......
package com.diaoyun.zion.chinafrica.vo;
/**
* @Auther: wudepeng
* @Date: 2019/11/11
* @Description: 持卡人信息
*/
public class FlutterWaveCard {
//卡号
private String card;
//银行卡背后3位数
private String cvv;
//到期月
private String month;
//到期年
private String year;
//email
private String email;
//手机号
private String phone;
//名字
private String firstname;
//姓氏
private String lastname;
//国家
private String country;
//支付的唯一参考
private String ref;
//退款金额
private String amount;
public String getCard() {
return card;
}
public void setCard(String card) {
this.card = card;
}
public String getCvv() {
return cvv;
}
public void setCvv(String cvv) {
this.cvv = cvv;
}
public String getMonth() {
return month;
}
public void setMonth(String month) {
this.month = month;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getRef() {
return ref;
}
public void setRef(String ref) {
this.ref = ref;
}
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
}
......@@ -2,6 +2,7 @@ package com.diaoyun.zion.master.enums;
public enum ResultCodeEnum {
SUCCESS(1,"success"),
ORDER_PAY_ERROR(9008,"payment failure"),
ERROR(9999,"unknown error"),
APPLICATION_ERROR(9000,"application error"),
VALIDATE_ERROR(9001,"validate error"),
......@@ -11,6 +12,8 @@ public enum ResultCodeEnum {
NEED_LOGIN(10,"need login"),
ILLEGAL_ARGUMENT(2,"illegal argument");
//成员变量(常量)
private final int code;
private final String desc;
......
......@@ -214,7 +214,7 @@ public class HttpClientUtil {
URL url = new URL(targetUrl);
//构建URI
URI uri=new URI(url.getProtocol(), url.getHost(), url.getPath(), url.getQuery(), null);
List<NameValuePair> params = URLEncodedUtils.parse(uri, Charset.forName(Consts.UTF_8.name()));
List<NameValuePair> params = URLEncodedUtils.parse(uri, String.valueOf(Charset.forName(Consts.UTF_8.name())));
Map<String,String> paramMap=new HashMap<>();
for (NameValuePair param : params) {
paramMap.put(param.getName(),param.getValue());
......
#############配置###########################
#用户默认头像
user.avatar=https://dev.diaosaas.com/upload/chinafrica/user/avatar.png
################################################################################
###################################邮箱###############################################
#网易
......@@ -20,19 +18,16 @@ email.authentication.password=Afri123456
#发送主题
email.subject=Verification Code from Afrishop
###################################邮箱 END###############################################
################redis有效时间###################
#登录token second 默认30分 一个星期 604800
redis.token.expiredTime=60480000
#订单 30分 second
redis.order.expiredTime=1800
################腾讯翻译配置###################
tencent.translate.app_id=2120761040
tencent.translate.app_url=https://api.ai.qq.com/fcgi-bin/nlp/nlp_texttranslate
//tencent.wordseg.app_url=https://api.ai.qq.com/fcgi-bin/nlp/nlp_wordseg
tencent.wordpos.app_url=https://api.ai.qq.com/fcgi-bin/nlp/nlp_wordpos
################腾讯翻译配置 END###################
##################新11.05(stripe公钥(不加密)和私钥(已用 AESUtils 加密))################################
stripe.pk=pk_live_FP6ipnw3lt0e1AmS5IVdpJWd00s5PLdbVa
......@@ -58,13 +53,23 @@ express.info.token=d44426bd5b64dd2
#paypal.client.app=AW7u5JVLhzA7_0EznoZ7uKHFzz1_nACOtt6k9oEpbisGUy3nqjjb3L-MmBFnD3YDuMSapcXpfSiYWtiB
#paypal.client.secret=EIyDryMDyM0BDWp2mtuGFdSU2WOkWtmSuGGaRnUiIom7kxuM7JhuSFfETbC8X4e9E_ZbMX4zg4jHA1lV
paypal.mode=live
#################################真实######################################################
#################################paypal真实######################################################
#paypal.client.app=AUUFVT30kPIP-a7dcQfPS8KYdl5cCZIwyYNIS79Cp7E_0GNZWfut3ZHQiRIoamqRstHigMoTTy1n8Glj
#paypal.client.secret=EJBVz86f9Mg482bL3lniPtLYe_ULyBkjTS0q-qhZBIVFC3dgae-J7-JJA5iWQAZsQqtAOV_ctVGWNLJS
#################################测试######################################################
paypal.success.url=https://africa.gzdazt.com/zion/paypal/success
paypal.cancel.url=https://africa.gzdazt.com/zion/paypal/cancel
#################################paypal测试######################################################
paypal.client.app=AW7u5JVLhzA7_0EznoZ7uKHFzz1_nACOtt6k9oEpbisGUy3nqjjb3L-MmBFnD3YDuMSapcXpfSiYWtiB
paypal.client.secret=EIyDryMDyM0BDWp2mtuGFdSU2WOkWtmSuGGaRnUiIom7kxuM7JhuSFfETbC8X4e9E_ZbMX4zg4jHA1lV
#paypal.success.url=https://africa.gzdazt.com/zion/paypal/success
#paypal.cancel.url=https://africa.gzdazt.com/zion/paypal/cancel
paypal.success.url=http://localhost:8083/zion/paypal/success
paypal.cancel.url=http://localhost:8083/zion/paypal/cancel
\ No newline at end of file
#paypal.success.url=http://localhost:8083/zion/paypal/success
#paypal.cancel.url=http://localhost:8083/zion/paypal/cancel
#################################flutterwave真实######################################################
#flutterwave.public.key=FLWPUBK-f69061bce3128da9b15c1e12c6182ff8-X
#flutterwave.secret.key=FLWSECK-38ec6860f49e953333218d929281ce65-X
#flutterwave.encryption.key=38ec6860f49e0d9d488a83b1
#flutterwave.merchant.id=3950728
#################################flutterwave测试######################################################
flutterwave.public.key=FLWPUBK_TEST-fe034e806c47ab16cd85c4a8df1e1a0e-X
flutterwave.secret.key=FLWSECK_TEST-f7335806b11db9c42d2ef10847199f71-X
flutterwave.encryption.key=FLWSECK_TEST97c23ad56b5f
flutterwave.merchant.id=5876535
\ No newline at end of file
package com.diaoyun.zion;
import com.egzosn.pay.common.api.PayService;
import com.egzosn.pay.common.bean.CurType;
import com.egzosn.pay.common.bean.MethodType;
import com.egzosn.pay.common.bean.PayOrder;
import com.egzosn.pay.common.http.HttpConfigStorage;
import com.egzosn.pay.paypal.api.PayPalConfigStorage;
import com.egzosn.pay.paypal.api.PayPalPayService;
import com.egzosn.pay.paypal.bean.PayPalTransactionType;
import com.paypal.api.payments.Links;
import javax.servlet.http.HttpServletRequest;
import java.awt.image.BufferedImage;
import java.math.BigDecimal;
import java.util.Map;
import java.util.UUID;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
*
*
* 微信
*
* @author egan
* @email egzosn@gmail.com
* @date 2017/8/18
......@@ -29,25 +15,14 @@ public class PayTest {
public static void main(String[] args) {
PayPalConfigStorage storage = new PayPalConfigStorage();
storage.setClientID("AWbyqn1AKJeVvzNsYms_9fs_LVr5_w5Xyt8nX5q0Wmqoq0NYCZf2wyz9DDeA5ArsWx0LFBwl5Oz6amD2");
storage.setClientSecret("EFhRjCBzhtI1lf88Xiy3VF07gVpu1vWk0VheSP3n5J0fhQxA6Pu7j89dbyYTLj3FxqiJBOlxQRKG_58e");
//storage.setTest(true);
//发起付款后的页面转跳地址
storage.setReturnUrl("http://127.0.0.1:8083/pay/success");
//取消按钮转跳地址,这里用异步通知地址的兼容的做法
storage.setNotifyUrl("http://127.0.0.1:8083/pay/cancel");
HttpConfigStorage httpConfigStorage = new HttpConfigStorage();
PayService service = new PayPalPayService(storage);
BigDecimal price = new BigDecimal("500");
PayOrder order = new PayOrder("Order_payment:", "Order payment", price, UUID.randomUUID().toString().replace("-", ""), PayPalTransactionType.sale);
Map orderInfo = service.orderInfo(order);
String request = service.buildRequest(orderInfo, MethodType.POST);
System.out.println(request);
String str = "{\"error\":0,\"content\":{\"rknums\":2,\"data\":[{\"sid\":\"46777865677\",\"rktime\":\"2019-09-29 11:03:35\"},{\"sid\":\"ceshi20190929\",\"rktime\":\"2019-09-29 15:07:16\"}]}}";
JSONObject jsonObject = JSONObject.fromObject(str).getJSONObject("content");
JSONArray data = jsonObject.getJSONArray("data");
for (int i = 0; i < data.size(); i++) {
//System.out.println(data.getString(i));
JSONObject object = JSONObject.fromObject(data.getString(i));
System.out.println(object.getString("sid"));
}
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论