Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
Z
zion
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
zhengfg
zion
Commits
38ecd31c
提交
38ecd31c
authored
11月 12, 2019
作者:
zgy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
完成flutterwave支付
上级
da07cbe8
显示空白字符变更
内嵌
并排
正在显示
10 个修改的文件
包含
465 行增加
和
60 行删除
+465
-60
pom.xml
pom.xml
+23
-3
FlutterWaveController.java
...yun/zion/chinafrica/controller/FlutterWaveController.java
+42
-0
FlutterWaveService.java
...m/diaoyun/zion/chinafrica/service/FlutterWaveService.java
+17
-0
FlutterWaveServiceImpl.java
.../zion/chinafrica/service/impl/FlutterWaveServiceImpl.java
+213
-0
PayPalServiceImpl.java
...aoyun/zion/chinafrica/service/impl/PayPalServiceImpl.java
+19
-9
FlutterWaveCard.java
.../java/com/diaoyun/zion/chinafrica/vo/FlutterWaveCard.java
+120
-0
ResultCodeEnum.java
...in/java/com/diaoyun/zion/master/enums/ResultCodeEnum.java
+3
-0
HttpClientUtil.java
...ain/java/com/diaoyun/zion/master/util/HttpClientUtil.java
+1
-1
domain.properties
src/main/resources/properties/domain.properties
+16
-11
PayTest.java
src/test/java/com/diaoyun/zion/PayTest.java
+11
-36
没有找到文件。
pom.xml
浏览文件 @
38ecd31c
...
...
@@ -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>
...
...
@@ -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>
...
...
src/main/java/com/diaoyun/zion/chinafrica/controller/FlutterWaveController.java
0 → 100644
浏览文件 @
38ecd31c
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
);
}
}
src/main/java/com/diaoyun/zion/chinafrica/service/FlutterWaveService.java
0 → 100644
浏览文件 @
38ecd31c
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
);
}
src/main/java/com/diaoyun/zion/chinafrica/service/impl/FlutterWaveServiceImpl.java
0 → 100644
浏览文件 @
38ecd31c
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
;
}
}
src/main/java/com/diaoyun/zion/chinafrica/service/impl/PayPalServiceImpl.java
浏览文件 @
38ecd31c
...
...
@@ -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
.
get
Order
Status
()
==
20
)
{
if
(
tbCfOrderVo
.
getCouponId
()
!=
null
&&
tbCfOrderVo
.
get
Pay
Status
()
==
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
;
}
...
...
src/main/java/com/diaoyun/zion/chinafrica/vo/FlutterWaveCard.java
0 → 100644
浏览文件 @
38ecd31c
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
;
}
}
src/main/java/com/diaoyun/zion/master/enums/ResultCodeEnum.java
浏览文件 @
38ecd31c
...
...
@@ -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
;
...
...
src/main/java/com/diaoyun/zion/master/util/HttpClientUtil.java
浏览文件 @
38ecd31c
...
...
@@ -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
());
...
...
src/main/resources/properties/domain.properties
浏览文件 @
38ecd31c
#############配置###########################
#用户默认头像
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
src/test/java/com/diaoyun/zion/PayTest.java
浏览文件 @
38ecd31c
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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论