");
for (String key : result.getIdResult().keySet()) {
String info = result.getIdResult().get(key);
out.println(key + ":" + info + "
");
}
if (channel.equals(PAY_CHANNEL.ALI))
response.sendRedirect(result.getAliRefundUrl());
} catch(BCException ex) {
ex.printStackTrace();
out.println(ex.getMessage());
}
BCBatchRefund batchRefundDeny = new BCBatchRefund();
batchRefundDeny.setIds(Arrays.asList(ids));
batchRefundDeny.setChannel(channel);
batchRefundDeny.setAgree(false);//批量否决
try {
BCBatchRefund result = BCPay.startBatchRefund(batchRefundDeny);
out.println("
批量驳回成功!
");
} catch(BCException ex) {
ex.printStackTrace();
out.println(ex.getMessage());
}
```
代码中的参数对象BCBatchRefund封装字段含义如下:
请求参数及返回字段:
key | 说明
---- | -----
ids | 退款记录id列表,批量审核的退款记录的唯一标识符集合,(必填)
channel | 渠道类型, 根据不同场景选择不同的支付方式,包含:
WX、ALI、UN、YEE、JD、KUAIQIAN、BD(必填)
agree | 同意或者驳回,批量驳回传false,批量同意传true,(必填)
idResult | 退款id、结果信息集合,Map类型,key为退款记录id,当退款成功时,value值为"OK";当退款失败时, value值为具体的错误信息
aliRefundUrl | 支付宝批量退款跳转url,支付宝预退款批量同意处理成功后返回
###
订单查询
订单查询接收BCQueryParameter参数对象,该对象封装了发起订单查询所需的各个具体参数。
成功发起订单查询接口将会返回BCOrder对象的集合。
发起订单查询异常情况将抛出BCException, 开发者需要捕获此异常进行相应失败操作 开发者可根据异常消息判断异常的具体信息,异常信息的格式为
"resultCode:xxx;resultMsg:xxx;errDetail:xxx(;responseCode:xxx)"。
```java
BCQueryParameter param = new BCQueryParameter();
param.setNeedDetail(true);//设置返回messgeDetail
param.setChannel(channel);//设置查询条件channel
try {
List
bcOrders = BCPay.startQueryBill(param);
System.out.println("billSize:" + bcOrders.size());
} catch (BCException e) {
out.println(e.getMessage());
}
```
代码中的参数对象BCQueryParameter封装字段含义如下:
key | 说明
---- | -----
channel | 渠道类型, 根据不同场景选择不同的支付方式,包含:
WX
WX\_APP 微信手机APP支付
WX\_NATIVE 微信公众号二维码支付
WX\_JSAPI 微信公众号支付
ALI
ALI\_APP 支付宝APP支付
ALI\_WEB 支付宝网页支付
ALI\_QRCODE
ALI\_WAP 支付宝移动网页支付 支付宝内嵌二维码支付
UN
UN\_APP 银联APP支付
UN\_WEB 银联网页支付
UN\_WAP 银联移动网页支付
KUAIQIAN
KUAIQIAN\_WEB 快钱网页支付
KUAIQIAN\_WAP 快钱移动网页支付
YEE
YEE\_WEB 易宝网页支付
YEE\_WAP 易宝移动网页支付
YEE\_NOBANKCARD 易宝点卡支付
JD
JD\_WEB 京东网页支付
JD\_WAP 京东移动网页支付
PAYPAL
PAYPAL\_SANDBOX
PAYPAL\_LIVE
BD
BD\_WEB 百度网页支付
BD\_APP 百度APP支付
BD\_WAP 百度移动网页支付,(选填)
billNo | 商户订单号,String类型,(选填)
startTime | 起始时间, Date类型,(选填)
endTime | 结束时间, Date类型, (选填)
payResult |支付成功与否标识,(选填)
refundResult | 退款成功与否标识,(选填)
needDetail | 是否需要返回渠道详细信息,不返回可减少网络开销,(选填)
skip | 查询起始位置 默认为0。设置为10,表示忽略满足条件的前10条数据 , (选填)
limit | 查询的条数, 默认为10,最大为50。设置为10,表示只查询满足条件的10条数据
返回的BCOrder集合字段意义如下:
key | 说明
---- | -----
objectId | 支付订单唯一标识, 可通过查询获得
billNo | 商户订单号, 可通过查询获得
totalFee | 订单总金额, 可通过查询获得
title | 订单标题, 可通过查询获得
channel | 渠道类型, 可通过查询获得
channelTradeNo | 渠道交易号, 支付完成之后可通过查询获得
result | 是否支付, 可通过查询获得
refundResult | 是否退款, 可通过查询获得
revertResult | 订单是否撤销, 可通过查询获得
messageDetail | 渠道详细信息,默认为"不显示", 当needDetail为true时,并于支付完成之后可通过查询获得
dateTime | 订单创建时间,yyyy-MM-dd HH:mm:ss格式,可通过查询获得
optionalString | optional json字符串, 可通过查询获得
### 订单总数查询
订单总数查接收BCQueryParameter参数对象,该对象封装了发起订单总数查所需的各个具体参数。
成功发起订单总数查询接口将会返回订单总数。
发起订单总数查询异常情况将抛出BCException, 开发者需要捕获此异常进行相应失败操作 开发者可根据异常消息判断异常的具体信息,异常信息的格式为"resultCode:xxx;resultMsg:xxx;errDetail:xxx(;responseCode:xxx)"。
```java
BCQueryParameter param = new BCQueryParameter();
try {
int count = BCPay.startQueryBillCount(param);
pageContext.setAttribute("count", count);
} catch (BCException e) {
out.println(e.getMessage());
}
```
代码中的参数对象BCQueryParameter可设置查询条件参考[订单查询的参数](#billQueryParam)含义部分,并排除**skip**, **limit**, **needDetail**三个参数。
### 单笔订单查询
单笔订单查询接收订单的唯一标识。
成功发起单笔订单查询接口将会返回BCOrder对象。
发起单笔订单查询异常情况将抛出BCException, 开发者需要捕获此异常进行相应失败操作 开发者可根据异常消息判断异常的具体信息,异常信息的格式为"resultCode:xxx;resultMsg:xxx;errDetail:xxx(;responseCode:xxx)"。
```java
try {
BCOrder result = BCPay.startQueryBillById(id);
pageContext.setAttribute("bill", result);
} catch (BCException e) {
out.println(e.getMessage());
}
```
返回的BCOrder对象包含字段参考国内支付部分的[BCOrder集合字段](#billQueryJump)字段。
### 退款查询
退款查询接收BCQueryParameter参数对象,该对象封装了发起退款查询所需的各个具体参数。
成功发起退款查询接口将会返回BCRefund对象的集合。
发起退款查询异常情况将抛出BCException, 开发者需要捕获此异常进行相应失败操作 开发者可根据异常消息判断异常的具体信息,异常信息的格式为"resultCode:xxx;resultMsg:xxx;errDetail:xxx(;responseCode:xxx)"。
```java
BCQueryParameter param = new BCQueryParameter();
param.setChannel(channel);
param.setNeedDetail(true);
try {
List bcRefunds = BCPay.startQueryRefund(param);
pageContext.setAttribute("refundList", bcRefunds);
System.out.println("refundList:" + bcRefunds.size());
} catch (BCException e) {
e.printStackTrace();
out.println(e.getMessage());
}
```
代码中的参数对象BCQueryParameter封装字段含义如下:
key | 说明
---- | -----
channel | 渠道类型, 根据不同场景选择不同的支付方式,包含:
WX
WX\_APP 微信手机APP支付
WX\_NATIVE 微信公众号二维码支付
WX\_JSAPI 微信公众号支付
ALI
ALI\_APP 支付宝APP支付
ALI\_WEB 支付宝网页支付
ALI\_QRCODE
ALI\_WAP 支付宝移动网页支付 支付宝内嵌二维码支付
UN
UN\_APP 银联APP支付
UN\_WEB 银联网页支付
UN\_WAP 银联移动网页支付
KUAIQIAN
KUAIQIAN\_WEB 快钱网页支付
KUAIQIAN\_WAP 快钱移动网页支付
YEE
YEE\_WEB 易宝网页支付
YEE\_WAP 易宝移动网页支付
JD
JD\_WEB 京东网页支付
JD\_WAP
BD
BD\_WEB 百度网页支付
BD\_APP 百度APP支付
BD\_WAP 京东移动网页支付,(选填)
billNo | 商户订单号, 32个字符内,数字和/或字母组合,确保在商户系统中唯一, (选填)
refundNo | 商户退款单号, 格式为:退款日期(8位) + 流水号(3~24 位)。不可重复,且退款日期必须是当天日期。流水号可以接受数字或英文字符,建议使用数字,但不可接受“000” ,(选填)
startTime | 起始时间, Date类型,(选填)
endTime | 结束时间, Date类型, (选填)
needDetail | 是否需要返回渠道详细信息,不返回可减少网络开销,(选填)
needApproval | 是否是预退款,(选填)
skip | 查询起始位置 默认为0。设置为10,表示忽略满足条件的前10条数据 , (选填)
limit | 查询的条数, 默认为10,最大为50。设置为10,表示只查询满足条件的10条数据
返回的BCRefund集合字段意义如下:
key | 说明
---- | -----
objectId | 退款记录唯一标识,可通过查询返回
billNo | 商户订单号,可通过查询返回
refundNo | 商户退款单号,可通过查询返回
totalFee | 订单总金额,可通过查询返回
refundFee | 退款金额,可通过查询返回
channel | 渠道类型,可通过查询返回
optionalString | 附加数据json字符串,可通过查询返回
title | 标题,可通过查询返回
finished | 退款是否结束,可通过查询返回
refunded | 退款是否成功,可通过查询返回
dateTime | 订单创建时间,yyyy-MM-dd HH:mm:ss格式,可通过查询获得
messageDetail | 渠道详细信息,默认为"不显示", 当needDetail为true时,可通过查询获得
### 退款总数查询
退款总数查询接收BCQueryParameter参数对象,该对象封装了发起退款总数查询所需的各个具体参数。
成功发起退款总数查询接口将会返回订单总数。
发起退款总数查询异常情况将抛出BCException, 开发者需要捕获此异常进行相应失败操作 开发者可根据异常消息判断异常的具体信息,异常信息的格式为"resultCode:xxx;resultMsg:xxx;errDetail:xxx(;responseCode:xxx)"。
```java
BCQueryParameter param = new BCQueryParameter();
try {
int count = BCPay.startQueryRefundCount(param);
pageContext.setAttribute("count", count);
} catch (BCException e) {
out.println(e.getMessage());
}
```
代码中的参数对象BCQueryParameter可设置查询条件参考[退款查询的参数](#refundQueryParam)含义部分,并排除**skip**, **limit**, **needDetail**三个参数。
### 单笔退款查询
单笔退款查询接收订单的唯一标识。
成功发起单笔退款查询接口将会返回BCRefund对象。
发起单笔退款查询异常情况将抛出BCException, 开发者需要捕获此异常进行相应失败操作 开发者可根据异常消息判断异常的具体信息,异常信息的格式为"resultCode:xxx;resultMsg:xxx;errDetail:xxx(;responseCode:xxx)"。
```java
try {
BCRefund result = BCPay.startQueryRefundById(id);
pageContext.setAttribute("refund", result);
} catch (BCException e) {
out.println(e.getMessage());
}
```
返回的BCRefund包含字段参考退款部分的[BCRefund集合字段](#refundQueryJump)字段。
### 退款状态更新
退款状态更新接收channel和refundNo参数,__调用参数中,只有当channel是WX、YEE、KUAIQIAN或BD时,才需要并且必须调用退款状态更新接口,其他渠道的退款已经在退款接口中完成__。
成功发起退款状态更新接口将会返回退款状态字符串(SUCCESS, PROCESSING, FAIL ...)。
发起退款状态更新异常情况将抛出BCException, 开发者需要捕获此异常进行相应失败操作 开发者可根据异常消息判断异常的具体信息,异常信息的格式为"resultCode:xxx;resultMsg:xxx;errDetail:xxx(;responseCode:xxx)"。
```java
try {
String result = BCPay.startRefundUpdate(channel, refund_no);
out.println(result);
} catch(BCException ex) {
out.println(ex.getMessage());
log.info(ex.getMessage());
}
```
代码中的各个参数含义如下:
key | 说明
---- | -----
refundNo | 商户退款单号, 格式为:退款日期(8位) + 流水号(3~24 位)。不可重复,且退款日期必须是退款发起当日日期。流水号可以接受数字或英文字符,建议使用数字,但不可接受“000”。,(必填)
channel | 渠道类型, 包含WX、YEE、KUAIQIAN和BD(必填)
### BC企业打款
发起BC企业打款请求。BCTransferParameter对象包含了发起BC企业打款所需要的所有参数。
发起BC企业打款异常情况将抛出BCException, 开发者需要捕获此异常进行相应失败操作 开发者可根据异常消息判断异常的具体信息,异常信息的格式为"resultCode:xxx;resultMsg:xxx;errDetail:xxx(;responseCode:xxx)"。
```java
BCTransferParameter param = new BCTransferParameter();
param.setBillNo("1111111111");//设置订单号 8到32位数字和/或字母组合,请自行确保在商户系统中唯一,同一订单号不可重复提交,否则会造成订单重复
param.setTitle("subject");//设置标题 UTF8编码格式,32个字节内,最长支持16个汉字
param.setTotalFee(1);//设置下发订单总金额 必须是正整数,单位为分
param.setTradeSource("OUT_PC");//UTF8编码格式,目前只能填写OUT_PC
param.setBankFullName("中国银行");//银行全称,不能缩写
param.setCardType("DE");//卡类型 DE代表借记卡,CR代表信用卡,其他值为非法
param.setAccountType("P");//账户类型 区分对公和对私 P代表私户,C代表公户,其他值为非法
param.setAccountNo("123456789");//收款方的银行卡号
param.setAccountName("beecloud");//收款方的姓名或者单位名
try {
BCPay.startBCTransfer(param);
}catch (Exception e) {
out.println(ex.getMessage());
log.info(ex.getMessage());
}
```
### BC企业打款支持银行获取
发起BC企业打款支持银行获取请求。BC\_TRANSFER\_BANK\_TYPE枚举包含P\_DE(对私借记卡)、P\_CR(对私信用卡)、C(对公账户)
发起BC企业打款支持银行获取异常情况将抛出BCException, 开发者需要捕获此异常进行相应失败操作 开发者可根据异常消息判断异常的具体信息,异常信息的格式为"resultCode:xxx;resultMsg:xxx;errDetail:xxx(;responseCode:xxx)"。
```java
try {
List banks = BCPay.fetchBCTransfersBanks(BC_TRANSFER_BANK_TYPE.P_CR);
out.println(banks.toString());
} catch (BCException e) {
out.println(e.getMessage());
}
```
### BC鉴权
发起BC鉴权请求。BCAuth对象包含了发起BC鉴权所需要的所有参数。
发起BC鉴权异常情况将抛出BCException, 开发者需要捕获此异常进行相应失败操作 开发者可根据异常消息判断异常的具体信息,异常信息的格式为"resultCode:xxx;resultMsg:xxx;errDetail:xxx(;responseCode:xxx)"。
```java
String name = "冯晓波";
String idNo = "320504192306171022";
String cardNo = "6114335124826228";
String mobile = "13761231321";
BCAuth auth = new BCAuth(name, idNo, cardNo);
auth.setMobile(mobile);
try {
auth = BCPay.startBCAuth(auth);
out.println("鉴权成功!");
out.println(auth.getAuthMsg());
out.println(auth.getCardId());
out.println(auth.isAuthResult());
} catch (BCException e) {
out.println(e.getMessage());
}
```
代码中的参数对象BCAuth封装字段含义如下:
key | 说明
---- | -----
name | 身份证姓名, (必填)
idNo | 身份证号, (必填)
cardNo | 用户银行卡卡号 , (必填)
mobile | 手机号, (选填)
## 测试模式部分
### 国内支付
国内支付接口完全参考[LIVE模式](#payment)订单查询, **暂不支持WX_JSAPI**
沙箱模式调起支付返回的支付要素(html、url、codeUrl)为BeeCloud提供的模拟支付要素
### 订单查询
订单查询接口完全参考[LIVE模式](#billQuery)订单查询
### 订单总数查询
订单总数查询接口完全参考[LIVE模式](#billCountQuery)订单总数查询
### 单笔订单查询
单笔订单查询接口完全参考[LIVE模式](#billQueryById)单笔订单查询
**其他接口暂不支持测试模式**
## 订阅支付
### 订阅支付详细设计请参考[BeeCloud订阅系统说明](https://github.com/beecloud/beecloud-rest-api/blob/master/subscription/%E8%AE%A2%E9%98%85%E7%B3%BB%E7%BB%9F%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md)
### 短信验证码发送
成功发起短信验证码接口返回短信验证码id,输入手机会收到短信验证码。
发起短信验证码发送接口异常情况将抛出BCException, 开发者需要捕获此异常进行相应失败操作 开发者可根据异常消息判断异常的具体信息,异常信息的格式为"resultCode:xxx;resultMsg:xxx;errDetail:xxx(;responseCode:xxx)"。
```java
try {
String smsId = BCSubscriptionPay.sendSMS("13861331391");
out.println(smsId);//保留此smsId以便后续发起订阅使用
} catch (BCException ex){
out.print(ex.getMessage());
}
```
### 发起订阅
成功发起订阅接口将会返回带objectId的BCSubscription对象。
发起订阅接口异常情况将抛出BCException, 开发者需要捕获此异常进行相应失败操作 开发者可根据异常消息判断异常的具体信息,异常信息的格式为"resultCode:xxx;resultMsg:xxx;errDetail:xxx(;responseCode:xxx)"。
```java
try {
/**
* 以下是通过银行5要素订阅的demo
*/
BCSubscription subscription = new BCSubscription();
subscription.setPlanId("4a009b37-c36a-49d3-b011-d13d43535b96");
subscription.setBuyerId("demo buyer id");
subscription.setSmsId(smsId);//验证码发送接口返回的smsId
subscription.setSmsCode("code of your mobile received");//收到的短信验证码
subscription.setMobile("13661331392");
subscription.setBankName("交通银行");
subscription.setCardNo("6222630140019836463");
subscription.setIdName("冯小刚");
subscription.setIdNo("350503198606271013");
BCSubscription result = BCSubscriptionPay.startSubscription(subscription);
out.println(result.getCardId());//保留待直接通过cardId发起订阅
out.println(result.getValid());
out.println(result.getStatus());
out.println(result.getObject());//保留待取消订阅时使用
} catch (BCException ex){
out.print(ex.getMessage());
}
/**
* 以下是直接通过cardId订阅的demo
*/
BCSubscription subscription = new BCSubscription();
subscription.setCardId("第一次成功订阅后通过webhook获得");
subscription.setSmsId(smsId);//验证码发送接口返回的smsId
subscription.setSmsCode("code of your mobile received");//收到的短
BCSubscription result = BCSubscriptionPay.startSubscription(subscription);
out.print(result.getStatus());
```
代码中的参数对象BCSubscription封装字段含义如下:
key | 说明
---- | -----
buyerId | 订阅的buyer ID,可以是用户email,也可以是商户系统中的用户ID, (必填)
planId | 对应的计划id , (必填)
smsId | 短信验证码id,通过短信验证接口获得,(必填)
smsCode | 短信验证码, (必填)
cardId | 第一次订阅成功的情况下,webhook会返回,之后订阅可以直接使用cardId代替以下5个参数 , 即({bankName、cardNo、idName、idNo、mobile}和{cardId} 二选一)(必填)
bankName | 订阅用户银行名称(支持列表可参考API获取支持银行列表) , (选填)
cardNo | 订阅用户银行卡号, (选填)
idName | 订阅用户身份证姓名, (选填)
idNo | 订阅用户身份证号, (选填)
mobile | 订阅用户银行预留手机号, (选填)
amount | 对于类似收取电费的场景,计划的收费金额fee应当是电费的单价,用户每月使用的度数在订阅中的amount设置,在每次扣款时间点之前,商户的系统需要更新每个注册用户对应订阅的amount数值, 默认1(选填)
trialEnd | 试用截止时间点,默认值为null,如果设置了,当前订阅直接从trialEnd的下一天进行第一次扣费,之后按照计划中设定的时间间隔,周期性扣费。该参量可以用来统一订阅用户的收费时间, (选填)
optional | 补充说明, (选填)
objectId | 订阅id, 成功发起订阅时返回
accountType | 账户类型, 只在查询时返回
last4 | 银行卡号后4位, 只在查询时返回
status | 订阅状态, 只在查询时返回
valid | 订阅是否生效, 只在查询时返回
### 取消订阅
成功取消订阅接口将会返回订阅id。
发起取消订阅接口异常情况将抛出BCException, 开发者需要捕获此异常进行相应失败操作 开发者可根据异常消息判断异常的具体信息,异常信息的格式为"resultCode:xxx;resultMsg:xxx;errDetail:xxx(;responseCode:xxx)"。
```java
String id;
BCSubscription subscription = new BCSubscription();
subscription.setObjectId("2ae989af-9cfd-4004-b350-5b4e1cad4d0a");
try {
id = BCSubscriptionPay.cancelSubscription(subscription);
out.print(id);
} catch (BCException e) {
e.printStackTrace();
}
```
代码中参数含义参考[BCSubscription含义](#subscriptionJump)中的objectId和cancelAtPeriodEnd
### 订阅查询
成功发起订阅查询接口将会返回满足条件的BCSubscription对象集合或者满足条件的BCSubscription数量。
发起订阅查询接口异常情况将抛出BCException, 开发者需要捕获此异常进行相应失败操作 开发者可根据异常消息判断异常的具体信息,异常信息的格式为"resultCode:xxx;resultMsg:xxx;errDetail:xxx(;responseCode:xxx)"。
```java
BCSubscriptionQueryParameter param = new BCSubscriptionQueryParameter();
param.setPlanId("xxxxxxxxxxxxx");
try {
Object result = BCSubscriptionPay.fetchSubsciptionByCondition(param);
if (result instanceof List) {
List subscriptions = (List)result;
} else {
out.print(result);
}
} catch (BCException ex) {
ex.printStackTrace();
out.println(ex.getMessage());
}
```
代码中的参数对象BCSubscriptionQueryParameter封装字段含义如下:
key | 说明
---- | -----
buyerId | 订阅的buyer ID,可以是用户email,也可以是商户系统中的用户ID,(选填)
planId | 对应的计划id,(选填)
cardId | 第一次订阅成功后webhook返回,(选填)
countOnly | 仅返回满足条件的subscription的集合数量,默认为false, 如果传入值为true, 则返回满足查询条件的数量,否则返回BCSubscription集合数量,(选填)
startTime | 起始时间, Date类型,(选填)
endTime | 结束时间, Date类型, (选填)
skip | 查询起始位置 默认为0。设置为10,表示忽略满足条件的前10条数据 , (选填)
limit | 查询的条数, 默认为10,最大为50。设置为10,表示只查询满足条件的10条数据, (选填)
返回BCSubscription参数含义参考[BCSubscription含义](#subscriptionJump)
### 订阅计划查询
成功发起订阅计划查询接口将会返回BCPlan对象集合或者满足条件的BCPlan数量。
发起订阅计划查询接口异常情况将抛出BCException, 开发者需要捕获此异常进行相应失败操作 开发者可根据异常消息判断异常的具体信息,异常信息的格式为"resultCode:xxx;resultMsg:xxx;errDetail:xxx(;responseCode:xxx)"。
```java
BCPlanQueryParameter param = new BCPlanQueryParameter();
param.setNameWithSubstring("订阅");
try {
Object result = BCSubscriptionPay.fetchPlanByCondition(param);
if (result instanceof List) {
List plans = (List)result;
} else {
out.print(result);
}
} catch (BCException ex) {
ex.printStackTrace();
out.println(ex.getMessage());
}
```
代码中的参数对象BCPlanQueryParameter封装字段含义如下:
key | 说明
---- | -----
name | 计划名,(选填)
nameWithSubstring | 计划名子字符串查询,(选填)
interval | 周期间隔,(选填)
intervalCount | 周期数,(选填)
trialDays | 试用天数,(选填)
countOnly | 仅返回满足条件的subscription的集合数量,默认为false, 如果传入值为true, 则返回满足查询条件的数量,否则返回BCPlan集合数量,(选填)
startTime | 起始时间, Date类型,(选填)
endTime | 结束时间, Date类型, (选填)
skip | 查询起始位置 默认为0。设置为10,表示忽略满足条件的前10条数据 , (选填)
limit | 查询的条数, 默认为10,最大为50。设置为10,表示只查询满足条件的10条数据, (选填)
返回BCPlan对象含义如下:
key | 说明
---- | -----
objectId | 订阅计划id
name | 计划名
interval | 收费周期单位,只能是day、week、month、year
intervalCount | 和interval共同定义收费周期,例如interval=month intervalCount=3,那么每3个月收费一次,最大的收费间隔为1年(1 year, 12 months, or 52 weeks).
trialDays | 试用天数
valid | 计划是否生效
currency | ISO货币名
valid | 计划是否生效
optional | 键值对,用于补充说明
### 订阅支持银行查询
成功发起订阅支持银行查询接口将会返回BSubscriptionBanks对象。
发起订阅支持银行查询接口异常情况将抛出BCException, 开发者需要捕获此异常进行相应失败操作 开发者可根据异常消息判断异常的具体信息,异常信息的格式为"resultCode:xxx;resultMsg:xxx;errDetail:xxx(;responseCode:xxx)"。
```java
try {
SubscriptionBanks banks = BCSubscriptionPay.fetchSubscrptionBanks();
out.println("banks:" + banks.getBankList().toString());
out.println("
");
out.println("common_banks:" + banks.getCommonBankList().toString());
} catch (BCException ex) {
ex.printStackTrace();
out.println(ex.getMessage());
}
```
### 订阅Webhook
•对于订阅结果的推送,transaction\_id就是创建订阅时返回的订阅id,transaction\_type为SUBSCRIPTION,sub\_channel\_type为BC\_SUBSCRIPTION,message\_detail中包含用户相关的注册信息. 其中的card\_id注意留存
•对于订阅收费结果的推送,transaction\_id为收费订单记录的订单号bill\_no,transaction\_type为PAY,sub\_channel\_type为BC\_SUBSCRIPTION,transaction\_fee为本次收费金额,message\_detail中包含用户相关的注册信息,例如其中的buyer\_id可以定位收取的是商户系统的那个用户的费用,plan\_id和subscription\_id可以帮助用户定位是哪个计划的哪个订阅
•参考demo中的 webhook\_receiver\_subscription.jsp
## Demo
项目文件夹demo为我们的样例项目,详细展示如何使用java sdk.
•关于支付宝的return_url
请参考demo中的 aliReturnUrl.jsp
•关于银联的return_url
请参考demo中的 unReturnUrl.jsp
•关于京东PC网页的return_url
请参考demo中的 jdWebReturnUrl.jsp
•关于京东移动网页的return_url
请参考demo中的 jdWapReturnUrl.jsp
•关于快钱的return_url
请参考demo中的 kqReturnUrl.jsp
•关于易宝PC网页的return_url
请参考demo中的 yeeWebReturnUrl.jsp
•关于易宝移动网页的return_url
请参考demo中的 yeeWapReturnUrl.jsp
•关于百度钱包的return_url
请参考demo中的 bdReturnUrl.jsp
•关于PAYPAL内支付的return_url
请参考demo中的 paypalReturnUrl.jsp
•关于weekhook的接收
请参考demo中的 webhook_receiver.jsp以及webhook\_sandbox\_receiver.jsp
文档请阅读 [webhook](https://github.com/beecloud/beecloud-webhook)
## 测试
- 下载安装maven后,进入sdk文件夹,执行mvn test。
- 导入sdk至eclipse或者IDEA, 在src/test/java包下找到BCPayTest类,运行javaSDKTest()方法。
## 常见问题
- 根据app\_id找不到对应的APP/keyspace或者app\_sign不正确,或者timestamp不是当前UTC,可能的原因:系统时间不准确 app_id和secret填写不正确,请以此排查如下:
1.appid和appSecret填写是否一致
2.校准系统时间
- 支付宝吊起支付返回调试错误,请回到请求来源地,重新发起请求。错误代码ILLEGAL_PARTNER,可能的原因:使用了测试账号test@beecloud.cn的支付宝支付参数。请使用自己申请的支付账号。
## 代码许可
The MIT License (MIT).