本SDK是根据BeeCloud Rest API 开发的 .net SDK, 适用于 .net framework 3.5及以上平台。可以作为调用BeeCloud Rest API的示例或者直接用于生产。
1.从BeeCloud release中下载dll文件,然后导入自己工程。(请注意beta版本不支持从release下载)
下载的BeeCloud.xml文件为dll注释文件,请一起放入项目文件夹中,方便查看注释。
.net SDK使用了第三方Json库LitJson.dll,请一起引入项目。
2.按需修改本工程之后编译获得dll文件(包括BeeCloud.dll, BeeCloud.xml,LitJson.dll),导入自己工程即可。
三个步骤,2分钟轻松搞定:
BeeCloud.BeeCloud.registerApp(appid, appsecret);
具体使用请参考项目中的
BeeCloudSDKDemo
工程
方法原型:
public static BCPayResult BCPayByChannel(string channel, int totalFee, string billNo, string title, Dictionary<string,string> optional, string returnUrl,string openId, string showURL, string qrPayMode);
调用:
BCPayResult result = BCPay.BCPayByChannel(BCPay.PayChannel.UN_WEB.ToString(), 1, BCUtil.GetUUID(), "dotNet自制自来水", null, "http://localhost:50003/return.aspx", null, null, "2");
if (result.resultCode == 0)
{
BCUnWebPayResult payResult = result as BCUnWebPayResult;
}
方法原型:
public static BCRefundResult BCRefundByChannel(string channel, string refundNo, string billNo, int refundFee, Dictionary<string, string> optional);
调用:
BCRefundResult refundResult = BCPay.BCRefundByChannel(BCPay.RefundChannel.ALI.ToString(), DateTime.Today.ToString("yyyyMMdd") + BCUtil.GetUUID().Substring(0, 8), billNo, totalFee, null);
if (refundResult.resultCode == 0)
{
Response.Redirect(refundResult.url);
}
- 查询支付订单
方法原型:
public static BCPayQueryResult BCPayQueryByCondition(string channel, string billNo, long? startTime, long? endTime, int? skip, int? limit);
调用:
BCPayQueryResult result = BCPay.BCPayQueryByCondition(BCUtil.GetTimeStamp("ALI", null, null, null, null, 50);
- 查询退款订单
方法原型:
public static BCRefundQuerytResult BCRefundQueryByCondition(string channel, string billNo, string refundNo, long? startTime, long? endTime, int? skip, int? limit);
调用:
BCRefundQuerytResult result = BCPay.BCRefundQueryByCondition("ALI", null, null, null, null, null, 50);
- 查询退款状态(只支持微信)
方法原型:
public static BCRefundStatusQueryResult BCRefundStatusQuery(string channel, string refundNo);
调用:
BCRefundStatusQueryResult result = BCPay.BCRefundStatusQuery("WX", refundNo);
- 支付宝批量打款
方法原型:
public static BCTransferResult BCTransfer(string channel, string batchNo, string accountName, List<BCTransferData> transferData)
调用:
BCTransferData data = new BCTransferData();
data.transferId = BCUtil.GetUUID();
data.receiverAccount = "xx@xx.com";
data.receiverName = "某某某";
data.transferFee = 100;
data.transferNote = "note";
BCTransferData data2 = new BCTransferData();
data2.transferId = BCUtil.GetUUID();
data2.receiverAccount = "xx@xx.com";
data2.receiverName = "某某";
data2.transferFee = 100;
data2.transferNote = "note";
List<BCTransferData> list = new List<BCTransferData>();
list.Add(data);
list.Add(data2);
BCTransferResult result = BCPay.BCTransfer(BCPay.TransferChannel.ALI.ToString(), BCUtil.GetUUID(), "毛毛", list);
项目中的BeeCloudSDKDemo
工程为我们的demo
在demo工程中添加BeeCloud工程的dll引用,设置demo工程为启动项后F5即可运行调试
每次修改过BeeCloud工程后请先build BeeCloud工程再运行demo调试
- 关于支付宝的return_url
请参考demo中的return_ali_url.aspx
- 关于银联的return_url
请参考demo中的return_un_url.aspx
- 关于weekhook的接收
请参考demo中的notify.asxp
文档请阅读 webhook
TODO
- demo的支付宝为什么报错,报错内容为:调试错误,请回到请求来源地,重新发起请求。错误代码 ILLEGAL_PARTNER?
由于政策原因,支付宝账号不能提供给用户做测试,请替换成自己的账号即可,微信银联不受限,可使用demo本身的账号测试。 LitJson.dll
和ThoughtWorks.QRCode.dll
哪里有下?
可以在demo项目的bin文件夹下获得,推荐使用本项目提供的dll,有遇到过使用不同版本的dll导致出错的情况。- 网页在手机上如何使用微信支付?
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();
}
}
- 查询/退款方法没有传channel但是报错了?
要不传channel完成查询/退款必须保证所有渠道所有订单号不同,否则会报错告诉开发者,要求传入channel以区分。
我们非常欢迎大家来贡献代码,我们会向贡献者致以最诚挚的敬意。
一般可以通过在Github上提交Pull Request来贡献代码。
Pull Request要求
-
代码规范
-
代码格式化
-
必须添加测试! - 如果没有测试(单元测试、集成测试都可以),那么提交的补丁是不会通过的。
-
记得更新文档 - 保证
README.md
以及其他相关文档及时更新,和代码的变更保持一致性。 -
创建feature分支 - 最好不要从你的master分支提交 pull request。
-
一个feature提交一个pull请求 - 如果你的代码变更了多个操作,那就提交多个pull请求吧。
-
清晰的commit历史 - 保证你的pull请求的每次commit操作都是有意义的。如果你开发中需要执行多次的即时commit操作,那么请把它们放到一起再提交pull请求。
- 如果有什么问题,可以到BeeCloud开发者1群:321545822 或 BeeCloud开发者2群:427128840 提问
- 更详细的文档,见源代码的注释以及官方文档
- 如果发现了bug,欢迎提交issue
- 如果有新的需求,欢迎提交issue
The MIT License (MIT).