Giter Club home page Giter Club logo

beecloud-java's Introduction

BeeCloud Java SDK (Open Source)

pass MIT v2.0.0

本SDK是根据BeeCloud Rest API开发的Java SDK,适用于JRE 1.6及以上平台。可以作为调用BeeCloud Rest API的示例或者直接用于生产。

安装

1.从github下载带依赖的jar文件,然后导入到自己的工程依赖包中。

2.若是工程采用maven进行依赖配置,可在自己工程的pom.xml文件里加入以下配置

<dependency>   
    <groupId>cn.beecloud</groupId>
    <artifactId>beecloud-java-sdk</artifactId>
    <version>2.0.0</version>
</dependency>

工程名以及版本号需要保持更新。(更新可参考本项目的pom.xml,文件最顶端)

注册

三个步骤,2分钟轻松搞定:

  1. 注册开发者:猛击这里注册成为BeeCloud开发者。

  2. 注册应用:使用注册的账号登陆控制台后,点击"+创建App"创建新应用

  3. 在代码中注册:

BeeCloud.registerApp(appid, appsecret);

使用方法

具体使用请参考本目录下的demo项目

调用以下接口发起支付并将得到BCPayResult对象,BCPayResult对象包含两种状态,正确状态和错误状态,正确状态的BCPayResult的type类型字符串为OK, 对应值为0。错误状态调用getErrMsg()方法返回错误信息。调用getErrDetail()方法返回具体错误信息,开发者可任意显示,打印,或者进行日志。

正确状态调用getCodeUrl()方法返回二维码字符串,返回code url的格式为:weixin://wxpay/bizpayurl?sr=XXXXX。 请商户调用第三方库将返回的code url生成二维码图片。 该模式链接较短,生成的二维码打印到结账小票上的识别率较高。

bcPayResult = BCPay.startBCPay(PAY_CHANNEL.WX_NATIVE, 1, billNo, "买水", null, null, null , null, null);
if (bcPayResult.getType().ordinal() == 0) {
	System.out.println(bcPayResult.getCodeUrl());
} else {
	//handle the error message as you wish!
	out.println(bcPayResult.getErrMsg());
	out.println(bcPayResult.getErrDetail());
}

正确状态调用getWxJSAPIMap()方法返回jsapi map对象。

bcPayResult = BCPay.startBCPay(PAY_CHANNEL.WX_JSAPI, 1, billNo, "买水", null, null, "openid000000001", null, null);
if (bcPayResult.getType().ordinal() == 0) {
	System.out.println(bcPayResult.getWxJSAPIMap());
} else {
	//handle the error message as you wish!
	out.println(bcPayResult.getErrMsg());
	out.println(bcPayResult.getErrDetail());
}

正确状态调用getHtml()方法,如将html输出至页面,即可开始银联网页支付。

bcPayResult = BCPay.startBCPay(PAY_CHANNEL.UN_WEB, 1, billNo, "买水", null, returnUrl, null, null, null);
if (bcPayResult.getType().ordinal() == 0) {
	out.println(bcPayResult.getHtml());
} else {
	//handle the error message as you wish!
	out.println(bcPayResult.getErrMsg());
	out.println(bcPayResult.getErrDetail());
}

正确状态调用getHtml()方法或者getUrl()方法,getHtml()方法返回html,如将html输出至页面,即可开始支付宝网页支付。getUrl()方法返回支付宝跳转url,推荐使用html。

bcPayResult = BCPay.startBCPay(PAY_CHANNEL.ALI_WEB, 1, billNo, "农夫山泉", null, "http://beecloud.cn", null, null, null);
if (bcPayResult.getType().ordinal() == 0) {
	out.println(bcPayResult.getHtml());
	out.println(bcPayResult.getUrl());
} else {
	//handle the error message as you wish!
	out.println(bcPayResult.getErrMsg());
	out.println(bcPayResult.getErrDetail());
}

正确状态调用getHtml()方法或者getUrl()方法,getHtml()方法返回html,如将html输出至页面,即可开始扫描支付。getUrl()方法返回支付宝内嵌二维码地址。需使用<iframe>加载此url

bcPayResult = BCPay.startBCPay(PAY_CHANNEL.ALI_QRCODE, 1, billNo, "农夫山泉", null, "http://beecloud.cn", null, null, null);
if (bcPayResult.getType().ordinal() == 0) {
    //使用html示例
	out.println(bcPayResult.getHtml());
	//使用url示例
	out.println("<html><iframe width='420' height='330' name='url' frameborder='0' src='" + bcPayResult.getUrl() + "'></iframe</html>");
} else {
	//handle the error message as you wish!
	out.println(bcPayResult.getErrMsg());
	out.println(bcPayResult.getErrDetail());
}

正确状态调用getHtml()方法或者getUrl()方法,getHtml()方法返回html,如将html输出至页面,即可开始支付。getUrl()方法返回支付宝跳转url,推荐使用html。

bcPayResult = BCPay.startBCPay(PAY_CHANNEL.ALI_WAP, 1, billNo, "买水", null, null, null, null, null);
if (bcPayResult.getType().ordinal() == 0) {
	out.println(bcPayResult.getHtml());
}
else {
	//handle the error message as you wish!
	out.println(bcPayResult.getErrMsg());
	out.println(bcPayResult.getErrDetail());
}

代码中的各个参数含义如下:

key 说明
channel 渠道类型, 根据不同场景选择不同的支付方式,包含:
WX_NATIVE 微信公众号二维码支付
WX_JSAPI 微信公众号支付
ALI_WEB 支付宝网页支付
ALI_QRCODE 支付宝内嵌二维码支付
ALI_WAP 支付宝移动网页支付 支付宝内嵌二维码支付
UN_WEB 银联网页支付, (必填)
totalFee 订单总金额, 只能为整数,单位为分,例如 1,(必填)
billNo 商户订单号, 32个字符内,数字和/或字母组合,确保在商户系统中唯一, 例如(201506101035040000001),(必填)
title 订单标题, 32个字节内,最长支持16个汉字,(必填)
optional 附加数据, 用户自定义的参数,将会在webhook通知中原样返回,该字段主要用于商户携带订单的自定义数据,(选填)
returnUrl 同步返回页面 , 支付渠道处理完请求后,当前页面自动跳转到商户网站里指定页面的http路径。当 channel 参数为 ALI_WEB 或 ALI_QRCODE 或 UN_WEB时为必填,(选填)
openId 微信公众号支付(WX_JSAPI)必填,(选填)
showUrl 商品展示地址,需以http://开头的完整路径,例如:http://www.商户网址.com/myorder,(选填)
qrPayMode 二维码类型,二维码类型含义MODE_BRIEF_FRONT: 订单码-简约前置模式, 对应 iframe 宽度不能小于 600px, 高度不能小于 300px
MODE_FRONT: 订单码-前置模式, 对应 iframe 宽度不能小于 300px, 高度不能小于 600px
MODE_MINI_FRONT: 订单码-迷你前置模式, 对应 iframe 宽度不能小于 75px, 高度不能小于 75px ,(选填)
return BCPayResult对象, 根据type决定返回内容

调用以下接口发起退款并将得到BCPayResult对象,BCPayResult对象包含两种状态,正确状态和错误状态,正确状态的BCPayResult的type类型字符串为OK, 对应值为0。错误状态调用getErrMsg()方法返回错误信息。调用getErrDetail()方法返回具体错误信息,开发者可任意显示,打印,或者进行日志。。

正确状态调用getSucessMsg()方法获知微信退款调用成功。

BCPayResult result = BCPay.startBCRefund(PAY_CHANNEL.WX, "201507170000", billNo, 2, null);;
if (bcPayResult.getType().ordinal() == 0) {
    //返回"退款成功!" 
	out.println(bcPayResult.getSucessMsg());
} else {
	//handle the error message as you wish!
	out.println(bcPayResult.getResult());
	out.println(bcPayResult.getErrDetail());
}

正确状态调用getUrl()方法返回url并跳转输入邮箱地址和密码完成退款。

BCPayResult result = BCPay.startBCRefund(PAY_CHANNEL.ALI, "201507170000", billNo, 1, null);;
if (bcPayResult.getType().ordinal() == 0) {
	response.redirect(bcPayResult.getUrl());
} else {
	//handle the error message as you wish!
	out.println(bcPayResult.getResult());
	out.println(bcPayResult.getErrDetail());
}

正确状态调用getSucessMsg()方法获知银联退款的返回结果。

BCPayResult result = BCPay.startBCRefund(PAY_CHANNEL.UN, "201507170000", billNo, 1, null);;
if (bcPayResult.getType().ordinal() == 0) {
	response.redirect(bcPayResult.getSucessMsg());
} else {
	//handle the error message as you wish!
	out.println(bcPayResult.getResult());
	out.println(bcPayResult.getErrDetail());
}

代码中的各个参数含义如下:

key 说明
channel 渠道类型, 根据不同场景选择不同的支付方式,包含:
WX 微信
ALI 支付宝
UN 银联,(必填)
refundNo 商户退款单号 , 格式为:退款日期(8位) + 流水号(3~24 位)。不可重复,且退款日期必须是当天日期。流水号可以接受数字或英文字符,建议使用数字,但不可接受“000”,例如:201506101035040000001 (必填)
billNo 商户订单号, 32个字符内,数字和/或字母组合,确保在商户系统中唯一,(必填)
refundFee 退款金额,只能为整数,单位为分,例如1,(必填)
optional 附加数据 用户自定义的参数,将会在webhook通知中原样返回,该字段主要用于商户携带订单的自定义数据,例如{"key1":"value1","key2":"value2",...}, (选填)
return BCPayResult, 根据type决定返回内容

调用以下接口发起订单查询并将得到BCQueryResult对象,BCQueryResult对象包含两种状态,正确状态和错误状态,正确状态的BCPayResult的type类型字符串为OK, 对应值为0。错误状态调用getErrMsg()方法返回错误信息。调用getErrDetail()方法返回具体错误信息,开发者可任意显示,打印,或者进行日志。调用参数中,channel参数包含以下取值: WX、WX_NATIVE、WX_JSAPI、ALI、ALI_APP、ALI_WEB、ALI_QRCODE、ALI_WAP、UN、UN_APP、UN_WEB。其中WX、ALI、UN是其他子渠道的父渠道,返回的是各种子渠道返回结果的并集。

正确状态调用bcQueryResult.getBcOrders()方法返回订单(BCOrderBean)的list集合。调用者可任意遍历,显示这个订单的list对象。

bcQueryResult = BCPay.startQueryBill(channel, null, null, null, null, null);
if (bcQueryResult.getType().ordinal() == 0) {
    //handle the order list as you wish.
	pageContext.setAttribute("bills", bcQueryResult.getBcOrders());
} else {
	out.println(bcQueryResult.getErrMsg());
	out.println(bcQueryResult.getErrDetail());
}

代码中的各个参数含义如下:

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 银联网页支付,(必填)
billNo 商户订单号,
startTime 起始时间, Date类型,(选填)
endTime 结束时间, Date类型, (选填)
skip 查询起始位置 默认为0。设置为10,表示忽略满足条件的前10条数据 , (选填)
limit 查询的条数, 默认为10,最大为50。设置为10,表示只查询满足条件的10条数据
return BCQueryResult, 根据type决定返回内容

调用以下接口发起退款查询并将得到BCQueryResult对象,BCQueryResult对象包含两种状态,正确状态和错误状态,正确状态的BCPayResult的type类型字符串为OK, 对应值为0。错误状态调用getErrMsg()方法返回错误信息。调用getErrDetail()方法返回具体错误信息,开发者可任意显示,打印,或者进行日志。调用参数中,channel参数包含以下取值: WX、WX_NATIVE、WX_JSAPI、ALI、ALI_APP、ALI_WEB、ALI_QRCODE、ALI_WAP、UN、UN_APP、UN_WEB。其中WX、ALI、UN是其他子渠道的父渠道,返回的是各种子渠道返回结果的并集。

正确状态调用bcQueryResult.getBcRefundList()方法返回退款记录(BCRefundBean)的list集合。调用者可任意遍历,显示这个退款记录的list对象。

bcQueryResult = BCPay.startQueryRefund(PAY_CHANNEL.UN, null, null, null, null, null, null);
if (bcQueryResult.getType().ordinal() == 0) {
	pageContext.setAttribute("refundList", bcQueryResult.getBcRefundList());
} else {
	out.println(bcQueryResult.getErrMsg());
	out.println(bcQueryResult.getErrDetail());
}

代码中的各个参数含义如下:

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 银联网页支付,(必填)
billNo 商户订单号, 32个字符内,数字和/或字母组合,确保在商户系统中唯一, (选填)
refundNo 商户退款单号, 格式为:退款日期(8位) + 流水号(3~24 位)。不可重复,且退款日期必须是当天日期。流水号可以接受数字或英文字符,建议使用数字,但不可接受“000” ,(选填)
startTime 起始时间, Date类型,(选填)
endTime 结束时间, Date类型, (选填)
skip 查询起始位置 默认为0。设置为10,表示忽略满足条件的前10条数据 , (选填)
limit 查询的条数, 默认为10,最大为50。设置为10,表示只查询满足条件的10条数据
return BCQueryResult, 根据type决定返回内容

调用以下接口发起微信退款状态查询并将得到BCQueryStatusResult对象,BCQueryStatusResult对象包含两种状态,正确状态和错误状态,正确状态的BCQueryStatusResult的type类型字符串为OK, 对应值为0。错误状态调用getErrMsg()方法返回错误信息。调用getErrDetail()方法返回具体错误信息,开发者可任意显示,打印,或者进行日志。调用参数中,channel参数包含以下取值: WX、WX_NATIVE、WX_JSAPI、ALI、ALI_APP、ALI_WEB、ALI_QRCODE、UN、UN_APP、UN_WEB。其中WX、ALI、UN是其他子渠道的父渠道,返回的是各种子渠道返回结果的并集。

正确状态调用getRefundStatus()方法返回微信退款状态(Success, Processing, Fail ...)。调用者可任意处理这个值。

BCQueryStatusResult result = BCPay.startWeChatRefundStatusQuery(refund_no);
if (result.getType().ordinal() == 0 ) {
	out.println(result.getRefundStatus());
} else {
	out.println(result.getErrMsg());
	out.println(result.getErrDetail());
}

代码中的各个参数含义如下:

key 说明
refundNo 商户退款单号, 格式为:退款日期(8位) + 流水号(3~24 位)。不可重复,且退款日期必须是退款发起当日日期。流水号可以接受数字或英文字符,建议使用数字,但不可接受“000”。,(必填)

Demo

项目文件夹demo为我们的样例项目,详细展示如何使用java sdk. •关于支付宝的return_url

请参考demo中的 return_url.jsp •关于银联的return_url

请参考demo中的 front_url.jsp •关于weekhook的接收

请参考demo中的 notify_url.jsp 文档请阅读 webhook

测试

TODO

常见问题

  • 网页在手机上如何使用微信支付?
    1.由于微信的限制,现在手机网页只能在微信APP内实现使用微信支付,即微信公众号支付(WX_JSAPI)
    2.WX_JSAPI支付配置相对复杂,请参考微信文档
    3.示例代码,调用js方法callpay()即可使用
function onBridgeReady(){
   WeixinJSBridge.invoke(
       'getBrandWCPayRequest', {
           //以下参数的值由BCPayByChannel方法返回来的数据填入即可
           "appId" : "wx2421b1c4370ec43b",          
           "timeStamp":" 1395712654",              
           "nonceStr" : "e61463f8efa94090b1f366cccfbbb444",
           "package" : "prepay_id=u802345jgfjsdfgsdg888",  
           "signType" : "MD5",     
           "paySign" : "70EA570631E4BB79628FBCA90534C63FF7FADD89" 
       },
       function(res){     
           if(res.err_msg == "get_brand_wcpay_request:ok" ) {}     // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回    ok,但并不保证它绝对可靠。 
       }
   ); 
}
function callpay()
{
    if (typeof WeixinJSBridge == "undefined"){
        if( document.addEventListener ){
            document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
        }else if (document.attachEvent){
            document.attachEvent('WeixinJSBridgeReady', jsApiCall); 
            document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
        }
    }else{
        jsApiCall();
    }
}

代码贡献

我们非常欢迎大家来贡献代码,我们会向贡献者致以最诚挚的敬意。

一般可以通过在Github上提交Pull Request来贡献代码。

Pull Request要求

•代码规范

•代码格式化

•必须添加测试! - 如果没有测试(单元测试、集成测试都可以),那么提交的补丁是不会通过的。

•记得更新文档 - 保证 README.md 以及其他相关文档及时更新,和代码的变更保持一致性。

•创建feature分支 - 最好不要从你的master分支提交 pull request。

•一个feature提交一个pull请求 - 如果你的代码变更了多个操作,那就提交多个pull请求吧。

•清晰的commit历史 - 保证你的pull请求的每次commit操作都是有意义的。如果你开发中需要执行多次的即时commit操作,那么请把它们放到一起再提交pull请求。

联系我们

•如果有什么问题,可以到 321545822 BeeCloud开发者大联盟QQ群提问

•更详细的文档,见源代码的注释以及官方文档

•如果发现了bug,欢迎提交issue

•如果有新的需求,欢x迎提交issue

代码许可

The MIT License (MIT).

beecloud-java's People

Contributors

figo10203 avatar josephgao avatar quietbamboo avatar wencaiw avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.