Inheritance: System.ApplicationException
示例#1
0
        /// <summary>
        ///  预退款(批量)审核
        /// </summary>
        /// <param name="channel">渠道类型
        ///     根据不同渠道选不同的值
        ///     必填
        ///     可以通过enum BCPay.RefundChannel获取
        ///     ALI:      支付宝
        ///     WX:       微信
        ///     UN:       银联
        ///     JD:       京东
        ///     YEE:      易宝
        ///     KUAIQIAN: 快钱
        ///     BD:       百度
        /// </param>
        /// <param name="ids">退款记录id列表
        ///     批量审核的退款记录的唯一标识符集合
        ///     必填
        /// </param>
        /// <param name="agree">同意或者驳回
        ///     批量驳回传false,批量同意传true
        ///     必填
        /// </param>
        /// <param name="denyReason">驳回理由
        ///     可空
        /// </param>
        /// <returns>
        ///     参考BCApproveRefundResult
        /// </returns>
        public static BCApproveRefundResult BCApproveRefund(string channel, List<string> ids, bool agree, string denyReason)
        {
            Random random = new Random();
            string approveRefundUrl = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.refundURL;

            string paraString = prepareApproveRefundParameters(channel, ids, agree, denyReason);

            try
            {
                HttpWebResponse response = BCPrivateUtil.CreatePutHttpResponse(approveRefundUrl, paraString, BCCache.Instance.networkTimeout);
                string respString = BCPrivateUtil.GetResponseString(response);
                return handleApproveRefundResult(respString, channel);
            }
            catch (Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#2
0
        /// <summary>
        /// (预)退款
        /// </summary>
        /// <param name="channel">渠道类型   
        ///     选填
        ///     可以通过enum BCPay.RefundChannel获取
        ///     ALI:      支付宝
        ///     WX:       微信
        ///     UN:       银联
        ///     JD:       京东
        ///     YEE:      易宝
        ///     KUAIQIAN: 快钱
        ///     BD:       百度
        ///     注意:不传channel也能退款的前提是保证所有渠道所有订单号不同,如果出现两个订单号重复,会报错提示传入channel进行区分
        /// </param>
        /// <param name="refundNo">商户退款单号
        ///     格式为:退款日期(8位) + 流水号(3~24 位)。不可重复,且退款日期必须是当天日期。流水号可以接受数字或英文字符,建议使用数字,但不可接受“000”。
        ///     必填
        ///     例如:201506101035040000001
        /// </param>
        /// <param name="billNo">商户订单号
        ///     32个字符内,数字和/或字母组合,确保在商户系统中唯一
        ///     DIRECT_REFUND和PRE_REFUND时必填
        /// </param>
        /// <param name="refundFee">退款金额
        ///     只能为整数,单位为分
        ///     DIRECT_REFUND和PRE_REFUND时必填
        /// </param>
        /// <param name="refundAccount">
        ///     微信渠道退款资金来源
        ///     1:可用余额退款 
        ///     0:未结算资金退款(默认使用未结算资金退款)
        /// </param>
        /// <param name="optional">附加数据
        ///     用户自定义的参数,将会在webhook通知中原样返回,该字段主要用于商户携带订单的自定义数据
        ///     选填
        ///     {"key1":"value1","key2":"value2",...}
        /// </param>
        /// <param name="needApproval">是否为预退款
        ///     预退款needApproval值传true,直接退款传false
        ///     如果needApproval值传true,开发者需要调用审核退款接口或者直接去BeeCloud控制台的预退款界面审核退款方能最终退款
        /// </param>
        /// <returns>
        /// </returns>
        public static BCRefund BCRefundByChannel(BCRefund refund)
        {
            Random random = new Random();
            string refundUrl = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.refundURL;
            string paraString = prepareRefundParameters(refund);

            try
            {
                HttpWebResponse response = BCPrivateUtil.CreatePostHttpResponse(refundUrl, paraString, BCCache.Instance.networkTimeout);
                string respString = BCPrivateUtil.GetResponseString(response);
                return handleRefundResult(respString, refund);

            }
            catch(Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#3
0
        /// <summary>
        /// 获得退款笔数,配合BCRefundQueryByCondition使用,使用查询退款时一样的参数
        /// </summary>
        /// <param name="para"></param>
        /// <returns></returns>
        public static int BCRefundQueryCount(BCQueryRefundParameter para)
        {
            string payQueryUrl = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.refundsCountURL;

            string paraString = prepareRefundQueryByConditionParameters(para);

            try
            {
                string url = payQueryUrl + "?para=" + HttpUtility.UrlEncode(paraString, Encoding.UTF8);
                HttpWebResponse response = BCPrivateUtil.CreateGetHttpResponse(url, BCCache.Instance.networkTimeout);
                string respString = BCPrivateUtil.GetResponseString(response);
                return handleQueryCountResult(respString);
            }
            catch (Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#4
0
        /// <summary>
        /// 支付宝微信扫码/被扫订单状态查询
        /// </summary>
        /// <param name="billNo"></param>
        /// <param name="channel"></param>
        /// <returns></returns>
        public static bool BCOfflineBillStatus(string billNo, string channel)
        {
            string statusUrl = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.offlineStatusURL;

            long timestamp = BCUtil.GetTimeStamp(DateTime.Now);

            JsonData data = new JsonData();
            data["app_id"] = BCCache.Instance.appId;

            data["app_sign"] = BCPrivateUtil.getAppSignature(BCCache.Instance.appId, BCCache.Instance.appSecret, timestamp.ToString());
            data["timestamp"] = timestamp;
            data["bill_no"] = billNo;
            data["channel"] = channel;

            string paraString = data.ToJson();

            try
            {
                HttpWebResponse response = BCPrivateUtil.CreatePostHttpResponse(statusUrl, paraString, BCCache.Instance.networkTimeout);

                string respString = BCPrivateUtil.GetResponseString(response);

                JsonData responseData = JsonMapper.ToObject(respString);

                if (responseData["result_code"].ToString() == "0")
                {
                    return (bool)responseData["pay_result"];
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }
            }
            catch (Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#5
0
        /// <summary>
        /// 支付
        /// </summary>
        /// <param name="channel">渠道类型
        ///     根据不同场景选择不同的支付方式
        ///     必填
        ///     可以通过enum BCPay.PayChannel获取
        ///     channel的参数值含义:
        ///     WX_APP:       微信手机APP支付
        ///     WX_NATIVE:    微信公众号二维码支付
        ///     WX_JSAPI:     微信公众号支付
        ///     ALI_APP:      支付宝APP支付
        ///     ALI_WEB:      支付宝网页支付 
        ///     ALI_QRCODE:   支付宝内嵌二维码支付
        ///     UN_APP:       银联APP支付
        ///     UN_WEB:       银联网页支付
        ///     UN_WAP:       银联wap支付
        ///     JD_WAP:       京东wap支付
        ///     JD_WEB:       京东web支付
        ///     YEE_WAP:      易宝wap支付 
        ///     YEE_WEB:      易宝web支付
        ///     KUAIQIAN_WAP: 快钱wap支付
        ///     KUAIQIAN_WEB: 快钱web支付
        ///     BD_WEB:       百度web支付
        ///     BD_WAP:       百度wap支付
        ///     BC_GATEWAY    比可网关支付
        ///     BC_EXPRESS    比可快捷支付(收款最低金额1元)
        /// </param>
        /// <param name="totalFee">订单总金额
        ///     只能为整数,单位为分
        ///     必填
        /// </param>
        /// <param name="billNo">商户订单号
        ///     32个字符内,数字和/或字母组合,确保在商户系统中唯一(即所有渠道所有订单号不同)
        ///     必填
        /// </param>
        /// <param name="title">订单标题
        ///     32个字节内,最长支持16个汉字
        ///     必填
        /// </param>
        /// <param name="optional">附加数据
        ///     用户自定义的参数,将会在webhook通知中原样返回,该字段主要用于商户携带订单的自定义数据
        ///     {"key1":"value1","key2":"value2",...}
        ///     可空
        /// </param>
        /// <param name="returnUrl">同步返回页面
        ///     支付渠道处理完请求后,当前页面自动跳转到商户网站里指定页面的http路径。
        ///     当channel 参数为 ALI_WEB 或 ALI_QRCODE 或 UN_WEB时为必填
        /// </param>
        /// <param name="billTimeout">订单失效时间
        ///     必须为非零正整数,单位为秒,建议最短失效时间间隔必须大于300秒
        ///     可空
        ///     京东系列支付不支持该参数,填空
        /// </param>
        /// <param name="openId">用户相对于微信公众号的唯一id
        ///     例如'0950c062-5e41-44e3-8f52-f89d8cf2b6eb'
        ///     微信公众号支付(WX_JSAPI)的必填参数
        /// </param>
        /// <param name="showURL">商品展示地址
        ///     以http://开头,例如'http://beecloud.cn'
        ///     支付宝网页支付(ALI_WEB)的选填参数
        /// </param>
        /// <param name="qrPayMode">二维码类型
        ///     支付宝内嵌二维码支付(ALI_QRCODE)的选填参数
        ///     二维码类型含义
        ///     0: 订单码-简约前置模式,对应 iframe 宽度不能小于 600px, 高度不能小于 300px
        ///     1: 订单码-前置模式,对应 iframe 宽度不能小于 300px, 高度不能小于 600px
        ///     3: 订单码-迷你前置模式,对应 iframe 宽度不能小于 75px, 高度不能小于 75px
        /// </param>
        /// <returns>
        /// </returns>
        public static BCBill BCPayByChannel(BCBill bill)
        {
            string payUrl = "";
            if (!BCCache.Instance.testMode)
            {
                payUrl = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.billURL;
            }
            else
            {
                payUrl = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.billTestURL;
            }

            string paraString = preparePayParameters(bill);

            try
            {
                HttpWebResponse response = BCPrivateUtil.CreatePostHttpResponse(payUrl, paraString, BCCache.Instance.networkTimeout);

                string respString = BCPrivateUtil.GetResponseString(response);

                return handlePayResult(respString, bill);
            }
            catch (Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#6
0
        /// <summary>
        /// 给用户发送验证码
        /// </summary>
        /// <param name="phone">用户电话</param>
        /// <returns></returns>
        public static string sendSMS(string phone)
        {
            long timestamp = BCUtil.GetTimeStamp(DateTime.Now);

            JsonData data = new JsonData();
            data["app_id"] = BCCache.Instance.appId;
            data["app_sign"] = BCPrivateUtil.getAppSignature(BCCache.Instance.appId, BCCache.Instance.appSecret, timestamp.ToString());
            data["timestamp"] = timestamp;
            data["phone"] = phone;
            string paraString = data.ToJson();

            string smsURL = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.bcsendSMSURL;

            try
            {
                HttpWebResponse response = BCPrivateUtil.CreatePostHttpResponse(smsURL, paraString, BCCache.Instance.networkTimeout);

                string respString = BCPrivateUtil.GetResponseString(response);

                JsonData responseData = JsonMapper.ToObject(respString);

                if (responseData["result_code"].ToString() == "0")
                {
                    return responseData["sms_id"].ToString();
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }
            }
            catch (Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#7
0
        /// <summary>
        /// 跟新订阅记录
        /// </summary>
        /// <param name="id"></param>
        /// <param name="buyerID"></param>
        /// <param name="planID"></param>
        /// <param name="cardID"></param>
        /// <param name="amount"></param>
        /// <param name="coupon"></param>
        /// <param name="trialEnd"></param>
        /// <param name="optional"></param>
        /// <returns></returns>
        public static string updateSubscription(string id, string buyerID, string planID, string cardID, double? amount, string coupon, long? trialEnd, Dictionary<string, string> optional)
        {
            long timestamp = BCUtil.GetTimeStamp(DateTime.Now);

            JsonData data = new JsonData();
            data["app_id"] = BCCache.Instance.appId;

            data["app_sign"] = BCPrivateUtil.getAppSignature(BCCache.Instance.appId, BCCache.Instance.appSecret, timestamp.ToString());

            data["timestamp"] = timestamp;
            if (buyerID != null)
            {
                data["buyer_id"] = buyerID;
            }
            if (cardID != null)
            {
                data["card_id"] = cardID;
            }
            if (planID != null)
            {
                data["plan_id"] = planID;
            }
            if (coupon != null)
            {
                data["coupon"] = coupon;
            }
            if (amount.HasValue)
            {
                data["amount"] = amount.Value;
            }
            if (trialEnd.HasValue)
            {
                data["trial_end"] = trialEnd.Value;
            }

            if (optional != null && optional.Count > 0)
            {
                data["optional"] = new JsonData();
                foreach (string key in optional.Keys)
                {
                    data["optional"][key] = optional[key];
                }
            }

            string paraString = data.ToJson();

            string subscriptionURL = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.bcsubscriptionURL + "/" + id;

            try
            {
                HttpWebResponse response = BCPrivateUtil.CreatePutHttpResponse(subscriptionURL, paraString, BCCache.Instance.networkTimeout);

                string respString = BCPrivateUtil.GetResponseString(response);

                JsonData responseData = JsonMapper.ToObject(respString);

                if (responseData["result_code"].ToString() == "0")
                {
                    return responseData["id"].ToString();
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }
            }
            catch (Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#8
0
 //处理退款回调
 public static BCRefund handleRefundResult(string respString, BCRefund refund)
 {
     JsonData responseData = JsonMapper.ToObject(respString);
     if (responseData["result_code"].ToString() == "0")
     {
         refund.id = responseData["id"].ToString();
         try
         {
             refund.url = responseData["url"].ToString();
         }
         catch
         {
             //
         }
     }
     else
     {
         var ex = new BCException(responseData["err_detail"].ToString());
         throw ex;
     }
     return refund;
 }
示例#9
0
 //处理退款状态查询回调
 public static string handleRefundStatusQueryResult(string respString)
 {
     JsonData responseData = JsonMapper.ToObject(respString);
     string refundStatus = "";
     if (responseData["result_code"].ToString() == "0")
     {
         refundStatus = responseData["refund_status"].ToString();
     }
     else
     {
         var ex = new BCException(responseData["err_detail"].ToString());
         throw ex;
     }
     return refundStatus;
 }
示例#10
0
        //处理退款条件查询回调
        public static List<BCRefund> handleRefundQueryByConditionResult(string respString, bool? needDetail)
        {
            JsonData responseData = JsonMapper.ToObject(respString);
            List<BCRefund> refunds = new List<BCRefund>();
            if (responseData["result_code"].ToString() == "0")
            {
                if (responseData["refunds"].IsArray)
                {
                    foreach (JsonData refundData in responseData["refunds"])
                    {
                        BCRefund refund = new BCRefund();
                        refund.id = refundData["id"].ToString();
                        refund.title = refundData["title"].ToString();
                        refund.billNo = refundData["bill_no"].ToString();
                        refund.refundNo = refundData["refund_no"].ToString();
                        refund.totalFee = int.Parse(refundData["total_fee"].ToString());
                        refund.refundFee = int.Parse(refundData["refund_fee"].ToString());
                        refund.channel = refundData["channel"].ToString();
                        refund.finish = (bool)refundData["finish"];
                        refund.result = (bool)refundData["result"];
                        refund.optional = JsonMapper.ToObject<Dictionary<string, string>>(refundData["optional"].ToString());
                        if (needDetail == true)
                        {
                            refund.messageDetail = refundData["message_detail"].ToString();
                        }
                        refund.createdTime = BCUtil.GetDateTime((long)refundData["create_time"]);
                        refunds.Add(refund);
                    }
                }
            }
            else
            {
                var ex = new BCException(responseData["err_detail"].ToString());
                throw ex;
            }

            return refunds;
        }
示例#11
0
        //处理退款Id查询回调
        public static BCRefund handleRefundQueryByIdResult(string respString)
        {
            JsonData responseData = JsonMapper.ToObject(respString);
            BCRefund refund = new BCRefund();
            if (responseData["result_code"].ToString() == "0")
            {
                JsonData refundData = responseData["refund"];
                refund.id = refundData["id"].ToString();
                refund.title = refundData["title"].ToString();
                refund.billNo = refundData["bill_no"].ToString();
                refund.refundNo = refundData["refund_no"].ToString();
                refund.totalFee = int.Parse(refundData["total_fee"].ToString());
                refund.refundFee = int.Parse(refundData["refund_fee"].ToString());
                refund.channel = refundData["channel"].ToString();
                refund.finish = (bool)refundData["finish"];
                refund.result = (bool)refundData["result"];
                refund.optional = JsonMapper.ToObject<Dictionary<string, string>>(refundData["optional"].ToString());
                refund.messageDetail = refundData["message_detail"].ToString();
                refund.createdTime = BCUtil.GetDateTime((long)refundData["create_time"]);
            }
            else
            {
                var ex = new BCException(responseData["err_detail"].ToString());
                throw ex;
            }

            return refund;
        }
示例#12
0
        /// <summary>
        /// 身份实名验证,支持二要素,三要素,四要素验证
        /// </summary>
        /// <param name="name">身份证姓名</param>
        /// <param name="IDNo">身份证号</param>
        /// <param name="cardNo">用户银行卡号(选填)</param>
        /// <param name="mobile">用户银行卡预留手机号(选填)</param>
        /// <returns></returns>
        public static bool BCAuthentication(string name, string IDNo, string cardNo, string mobile)
        {
            long timestamp = BCUtil.GetTimeStamp(DateTime.Now);

            JsonData data = new JsonData();
            data["app_id"] = BCCache.Instance.appId;
            data["app_sign"] = BCPrivateUtil.getAppSignature(BCCache.Instance.appId, BCCache.Instance.appSecret, timestamp.ToString());
            data["timestamp"] = timestamp;
            data["name"] = name;
            data["id_no"] = IDNo;
            data["card_no"] = cardNo;
            data["mobile"] = mobile;
            string paraString = data.ToJson();

            string authURL = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.authULR;

            try
            {
                HttpWebResponse response = BCPrivateUtil.CreatePostHttpResponse(authURL, paraString, BCCache.Instance.networkTimeout);

                string respString = BCPrivateUtil.GetResponseString(response);

                JsonData responseData = JsonMapper.ToObject(respString);

                if (responseData["result_code"].ToString() == "0")
                {
                    return (bool)responseData["auth_result"];
                }
                else
                {
                    var ex = new BCException(responseData["errMsg"].ToString());
                    throw ex;
                }
            }
            catch (Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#13
0
 //处理订单/退款单数量
 public static int handleQueryCountResult(string respString)
 {
     JsonData responseData = JsonMapper.ToObject(respString);
     if (responseData["result_code"].ToString() == "0")
     {
         if (responseData["count"].IsInt)
         {
             return int.Parse(responseData["count"].ToString());
         }
         else
         {
             var ex = new BCException("服务出错啦:-(");
             throw ex;
         }
     }
     else
     {
         var ex = new BCException(responseData["err_detail"].ToString());
         throw ex;
     }
 }
示例#14
0
        //处理支付回调
        public static BCBill handlePayResult(string respString, BCBill bill)
        {
            JsonData responseData = JsonMapper.ToObject(respString);

            if (bill.channel == "WX_NATIVE")
            {
                if (responseData["result_code"].ToString() == "0")
                {
                    bill.id = responseData["id"].ToString();
                    if (BCCache.Instance.testMode)
                    {
                        bill.codeURL = responseData["url"].ToString();
                    }
                    else
                    {
                        bill.codeURL = responseData["code_url"].ToString();
                    }
                    return bill;
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }

            }
            if (bill.channel == "WX_JSAPI")
            {
                if (BCCache.Instance.testMode)
                {
                    throw new BCException("微信公众号内支付不支持测试模式");
                }
                if (responseData["result_code"].ToString() == "0")
                {
                    bill.id = responseData["id"].ToString();
                    bill.appId = responseData["app_id"].ToString();
                    bill.package = responseData["package"].ToString();
                    bill.noncestr = responseData["nonce_str"].ToString();
                    bill.timestamp = responseData["timestamp"].ToString();
                    bill.paySign = responseData["pay_sign"].ToString();
                    bill.signType = responseData["sign_type"].ToString();

                    return bill;
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }
            }
            if (bill.channel == "ALI_WEB" || bill.channel == "ALI_WAP")
            {
                if (responseData["result_code"].ToString() == "0")
                {
                    bill.id = responseData["id"].ToString();
                    if (BCCache.Instance.testMode)
                    {
                        bill.html = string.Format("<html><head></head><body><script>location.href='{0}'</script></body></html>", responseData["url"].ToString());
                    }
                    else
                    {
                        bill.html = responseData["html"].ToString();
                    }
                    bill.url = responseData["url"].ToString();

                    return bill;
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }
            }
            if (bill.channel == "ALI_QRCODE")
            {
                if (responseData["result_code"].ToString() == "0")
                {
                    bill.id = responseData["id"].ToString();
                    bill.url = responseData["url"].ToString();
                    if (BCCache.Instance.testMode)
                    {
                        bill.html = string.Format("<html><head></head><body><script>location.href='{0}'</script></body></html>", responseData["url"].ToString());
                    }
                    else
                    {
                        bill.html = responseData["html"].ToString();
                    }
                    return bill;
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }
            }
            if (bill.channel == "JD_WAP" || bill.channel == "JD_WEB" || bill.channel == "KUAIQIAN_WAP" || bill.channel == "KUAIQIAN_WEB" || bill.channel == "UN_WEB" || bill.channel == "UN_WAP")
            {
                if (responseData["result_code"].ToString() == "0")
                {
                    bill.id = responseData["id"].ToString();
                    if (BCCache.Instance.testMode)
                    {
                        bill.html = string.Format("<html><head></head><body><script>location.href='{0}'</script></body></html>", responseData["url"].ToString());
                    }
                    else
                    {
                        bill.html = responseData["html"].ToString();
                    }
                    return bill;
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }
            }
            if (bill.channel == "BD_WEB" || bill.channel == "BD_WAP" || bill.channel == "YEE_WEB" || bill.channel == "YEE_WAP")
            {
                if (responseData["result_code"].ToString() == "0")
                {
                    bill.id = responseData["id"].ToString();
                    if (BCCache.Instance.testMode)
                    {
                        bill.html = string.Format("<html><head></head><body><script>location.href='{0}'</script></body></html>", responseData["url"].ToString());
                    }
                    else
                    {
                        bill.url = responseData["url"].ToString();
                    }

                    return bill;
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }
            }
            if (bill.channel == "BC_GATEWAY")
            {
                if (responseData["result_code"].ToString() == "0")
                {
                    bill.id = responseData["id"].ToString();
                    if (BCCache.Instance.testMode)
                    {
                        bill.html = string.Format("<html><head></head><body><script>location.href='{0}'</script></body></html>", responseData["url"].ToString());
                    }
                    else
                    {
                        bill.html = responseData["html"].ToString();
                    }
                    return bill;
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }
            }
            if (bill.channel == "BC_EXPRESS")
            {
                if (responseData["result_code"].ToString() == "0")
                {
                    bill.id = responseData["id"].ToString();
                    if (BCCache.Instance.testMode)
                    {
                        bill.html = string.Format("<html><head></head><body><script>location.href='{0}'</script></body></html>", responseData["url"].ToString());
                    }
                    else
                    {
                        bill.html = responseData["html"].ToString();
                        bill.url = responseData["url"].ToString();
                    }
                    return bill;
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }
            }
            if (bill.channel == "BC_NATIVE")
            {
                if (responseData["result_code"].ToString() == "0")
                {
                    bill.id = responseData["id"].ToString();
                    if (BCCache.Instance.testMode)
                    {
                        //bill.codeURL = responseData["url"].ToString();
                    }
                    else
                    {
                        bill.codeURL = responseData["code_url"].ToString();
                    }
                    return bill;
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }

            }
            if (bill.channel == "BC_WX_WAP")
            {
                if (responseData["result_code"].ToString() == "0")
                {
                    bill.id = responseData["id"].ToString();
                    if (BCCache.Instance.testMode)
                    {
                        //bill.codeURL = responseData["url"].ToString();
                    }
                    else
                    {
                        bill.url = responseData["url"].ToString();
                    }
                    return bill;
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }

            }
            if (bill.channel == "BC_WX_JSAPI")
            {
                if (BCCache.Instance.testMode)
                {
                    throw new BCException("微信公众号内支付不支持测试模式");
                }
                if (responseData["result_code"].ToString() == "0")
                {
                    bill.id = responseData["id"].ToString();
                    bill.appId = responseData["app_id"].ToString();
                    bill.package = responseData["package"].ToString();
                    bill.noncestr = responseData["nonce_str"].ToString();
                    bill.timestamp = responseData["timestamp"].ToString();
                    bill.paySign = responseData["pay_sign"].ToString();
                    bill.signType = responseData["sign_type"].ToString();

                    return bill;
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }

            }
            return bill;
        }
示例#15
0
        public static BCCJTransferWithBackCard BCCJBankCardTransfer(BCCJTransferWithBackCard transfer)
        {
            string transferUrl = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.cjtransferURL;
            long timestamp = BCUtil.GetTimeStamp(DateTime.Now);

            JsonData data = new JsonData();
            data["app_id"] = BCCache.Instance.appId;
            data["app_sign"] = BCPrivateUtil.getAppSignatureByMasterSecret(BCCache.Instance.appId, BCCache.Instance.masterSecret, timestamp.ToString());
            data["timestamp"] = timestamp;

            data["total_fee"] = transfer.totalFee;
            data["bill_no"] = transfer.billNo;
            data["title"] = transfer.title;
            data["bank_branch"] = transfer.bankBranch;
            data["bank_name"] = transfer.bankName;
            data["province"] = transfer.province;
            data["city"] = transfer.city;
            data["card_type"] = transfer.cardType;
            data["card_attribute"] = transfer.cardAttribute;
            data["bank_account_no"] = transfer.bankAccountNo;
            data["account_name"] = transfer.accountName;

            if (transfer.optional != null && transfer.optional.Count > 0)
            {
                data["optional"] = new JsonData();
                foreach (string key in transfer.optional.Keys)
                {
                    data["optional"][key] = transfer.optional[key];
                }
            }

            string paraString = data.ToJson();
            try
            {
                HttpWebResponse response = BCPrivateUtil.CreatePostHttpResponse(transferUrl, paraString, BCCache.Instance.networkTimeout);
                string respString = BCPrivateUtil.GetResponseString(response);
                JsonData responseData = JsonMapper.ToObject(respString);

                if (responseData["result_code"].ToString() == "0")
                {
                    transfer.id = responseData["id"].ToString();
                    return transfer;
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }
            }
            catch (Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#16
0
 //处理(批量)打款回调
 public static string handleTransfersResult(string respString, string channel)
 {
     JsonData responseData = JsonMapper.ToObject(respString);
     string result = "";
     if (responseData["result_code"].ToString() == "0")
     {
         if (channel.Contains("ALI"))
         {
             result = responseData["url"].ToString();
         }
     }
     else
     {
         var ex = new BCException(responseData["err_detail"].ToString());
         throw ex;
     }
     return result;
 }
示例#17
0
        /// <summary>
        /// 按条件查询用户订阅
        /// </summary>
        /// <param name="buyerID">用户ID</param>
        /// <param name="planID">订阅计划ID</param>
        /// <param name="cardID">用户卡ID</param>
        /// <param name="createdBefore">创建时间前</param>
        /// <param name="createdAfter">创建时间后</param>
        /// <param name="skip">跳过数量</param>
        /// <param name="limit">查询限量</param>
        /// <param name="countOnly">设置为true时只返回数量,设置为false时只返回plan记录</param>
        /// <returns></returns>
        public static List<BCSubscription> querySubscriptionsByCondition(string buyerID, string planID, string cardID, long? createdBefore, long? createdAfter, int? skip, int? limit, bool countOnly)
        {
            long timestamp = BCUtil.GetTimeStamp(DateTime.Now);

            string subscriptionURL = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.bcsubscriptionURL;
            subscriptionURL += "?app_id=" + BCCache.Instance.appId + "&app_sign=" + BCPrivateUtil.getAppSignature(BCCache.Instance.appId, BCCache.Instance.appSecret, timestamp.ToString()) + "&timestamp=" + timestamp;
            if (buyerID != null)
            {
                subscriptionURL += "&buyer_id=" + buyerID;
            }
            if (planID != null)
            {
                subscriptionURL += "&plan_id=" + planID;
            }
            if (cardID != null)
            {
                subscriptionURL += "&card_id=" + cardID;
            }
            if (createdBefore.HasValue)
            {
                subscriptionURL += "&created_before=" + createdBefore.Value;
            }
            if (createdAfter.HasValue)
            {
                subscriptionURL += "&created_after=" + createdAfter.Value;
            }
            if (skip.HasValue)
            {
                subscriptionURL += "&skip=" + skip.Value;
            }
            if (limit.HasValue)
            {
                subscriptionURL += "&limit=" + limit.Value;
            }
            subscriptionURL += "&count_only=" + countOnly;

            try
            {
                HttpWebResponse response = BCPrivateUtil.CreateGetHttpResponse(subscriptionURL, BCCache.Instance.networkTimeout);

                string respString = BCPrivateUtil.GetResponseString(response);

                JsonData responseData = JsonMapper.ToObject(respString);

                if (responseData["result_code"].ToString() == "0")
                {
                    List<BCSubscription> subscriptions = new List<BCSubscription>();
                    if (responseData["subscriptions"].IsArray)
                    {
                        foreach (JsonData subData in responseData["subscriptions"])
                        {
                            BCSubscription sub = new BCSubscription();
                            sub.ID = subData["id"].ToString();
                            sub.buyerID = subData["buyer_id"].ToString();
                            sub.planID = subData["plan_id"].ToString();
                            sub.cardID = subData["card_id"].ToString();
                            sub.bankName = subData["bank_name"].ToString();
                            sub.IDName = subData["id_name"].ToString();
                            sub.IDNo = subData["id_no"].ToString();
                            sub.mobile = subData["mobile"].ToString();
                            sub.amount = (double)subData["amount"];
                            sub.couponID = subData["coupon_id"].ToString();
                            sub.trialEnd = (long)subData["trial_end"];
                            sub.optional = JsonMapper.ToObject<Dictionary<string, string>>(subData["optional"].ToJson().ToString());

                            sub.last4 = subData["last4"].ToString();
                            sub.status = subData["status"].ToString();
                            sub.valid = (bool)subData["valid"];
                            sub.cancelAtPeriodEnd = (bool)subData["cancel_at_period_end"];

                            subscriptions.Add(sub);
                        }
                    }
                    return subscriptions;
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }
            }
            catch (Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#18
0
        //准备单笔单款参数
        public static string prepareTransferParameters(BCTransferParameter para)
        {
            if (BCCache.Instance.masterSecret == null)
            {
                var ex = new BCException("masterSecret未注册, 请查看registerApp方法");
                throw ex;
            }

            long timestamp = BCUtil.GetTimeStamp(DateTime.Now);

            JsonData data = new JsonData();
            data["app_id"] = BCCache.Instance.appId;
            data["app_sign"] = BCPrivateUtil.getAppSignatureByMasterSecret(BCCache.Instance.appId, BCCache.Instance.masterSecret, timestamp.ToString());
            data["timestamp"] = timestamp;
            data["channel"] = para.channel;
            data["transfer_no"] = para.transferNo;
            data["total_fee"] = para.totalFee;
            data["desc"] = para.desc;
            data["channel_user_id"] = para.channelUserId;
            data["channel_user_name"] = para.channelUserName;
            data["account_name"] = para.accountName;
            if (para.info != null)
            {
                data["redpack_info"] = new JsonData();
                data["redpack_info"]["send_name"] = para.info.sendName;
                data["redpack_info"]["wishing"] = para.info.wishing;
                data["redpack_info"]["act_name"] = para.info.actName;
            }

            string paraString = data.ToJson();
            return paraString;
        }
示例#19
0
        /// <summary>
        /// 跟新订阅计划
        /// </summary>
        /// <param name="id">计划ID</param>
        /// <param name="name">计划名</param>
        /// <param name="optional">自定义字段</param>
        /// <returns></returns>
        public static string updatePlan(string id, string name, bool? valid, Dictionary<string, string> optional)
        {
            long timestamp = BCUtil.GetTimeStamp(DateTime.Now);

            JsonData data = new JsonData();
            data["app_id"] = BCCache.Instance.appId;

            data["app_sign"] = BCPrivateUtil.getAppSignature(BCCache.Instance.appId, BCCache.Instance.appSecret, timestamp.ToString());

            data["timestamp"] = timestamp;
            if (name != null)
            {
                data["name"] = name;
            }
            if (valid.HasValue)
            {
                data["valid"] = valid.Value;
            }

            if (optional != null && optional.Count > 0)
            {
                data["optional"] = new JsonData();
                foreach (string key in optional.Keys)
                {
                    data["optional"][key] = optional[key];
                }
            }

            string paraString = data.ToJson();

            string planURL = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.bcplanURL + "/" + id;

            try
            {
                HttpWebResponse response = BCPrivateUtil.CreatePutHttpResponse(planURL, paraString, BCCache.Instance.networkTimeout);

                string respString = BCPrivateUtil.GetResponseString(response);

                JsonData responseData = JsonMapper.ToObject(respString);

                if (responseData["result_code"].ToString() == "0")
                {
                    //BCPlan plan = new BCPlan();
                    //plan.ID = responseData["plan"]["id"].ToString();
                    //plan.fee = (int)responseData["plan"]["fee"];
                    //plan.interval = responseData["plan"]["interval"].ToString();
                    //plan.name = responseData["plan"]["name"].ToString();
                    //plan.currency = responseData["plan"]["currency"].ToString();
                    //plan.intervalCount = (int)responseData["plan"]["interval_count"];
                    //plan.trialDays = (int)responseData["plan"]["trial_days"];
                    //plan.optional = JsonMapper.ToObject<Dictionary<string, string>>(responseData["optional"].ToString());
                    return responseData["id"].ToString();
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }
            }
            catch (Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#20
0
        //准备批量打款参数
        public static string prepareTransfersParameters(BCTransfersParameter para)
        {
            if (BCCache.Instance.masterSecret == null)
            {
                var ex = new BCException("masterSecret未注册, 请查看registerApp方法");
                throw ex;
            }

            long timestamp = BCUtil.GetTimeStamp(DateTime.Now);

            JsonData data = new JsonData();
            data["app_id"] = BCCache.Instance.appId;
            data["app_sign"] = BCPrivateUtil.getAppSignatureByMasterSecret(BCCache.Instance.appId, BCCache.Instance.masterSecret, timestamp.ToString());
            data["timestamp"] = timestamp;
            data["channel"] = para.channel;
            data["batch_no"] = para.batchNo;
            data["account_name"] = para.accountName;
            JsonData list = new JsonData();
            foreach (var transfer in para.transfersData)
            {
                JsonData d = new JsonData();
                d["transfer_id"] = transfer.transferId;
                d["receiver_account"] = transfer.receiverAccount;
                d["receiver_name"] = transfer.receiverName;
                d["transfer_fee"] = transfer.transferFee;
                d["transfer_note"] = transfer.transferNote;
                list.Add(d);
            }
            data["transfer_data"] = list;
            string paraString = data.ToJson();
            return paraString;
        }
示例#21
0
        /// <summary>
        /// 境外支付
        /// </summary>
        /// <param name="channel">渠道类型
        ///     enum InternationalPay提供了三个境外支付渠道类型,分别是:
        ///     PAYPAL_PAYPAL : 跳转到paypal使用paypal内支付
        ///     PAYPAL_CREDITCARD : 直接使用信用卡支付(paypal渠道)
        ///     PAYPAL_SAVED_CREDITCARD : 使用存储的行用卡id支付(信用卡信息存储在PAYPAL)
        /// </param>
        /// <param name="totalFee">订单总金额
        ///     只能为整数,单位为分
        ///     必填
        /// </param>
        /// <param name="billNo">商户订单号
        ///     32个字符内,数字和/或字母组合,确保在商户系统中唯一(即所有渠道所有订单号不同)
        ///     必填
        /// </param>
        /// <param name="title">订单标题
        ///     32个字节内,最长支持16个汉字
        ///     必填
        /// </param>
        /// <param name="currency">三位货币种类代码
        ///     必填
        ///     类型如下:
        ///         Australian dollar	AUD
        ///         Brazilian real**	BRL
        ///         Canadian dollar	    CAD
        ///         Czech koruna	    CZK
        ///         Danish krone	    DKK
        ///         Euro	            EUR
        ///         Hong Kong dollar	HKD
        ///         Hungarian forint	HUF
        ///         Israeli new shekel	ILS
        ///         Japanese yen	    JPY
        ///         Malaysian ringgit	MYR
        ///         Mexican peso	    MXN
        ///         New Taiwan dollar	TWD
        ///         New Zealand dollar	NZD
        ///         Norwegian krone	    NOK
        ///         Philippine peso	    PHP
        ///         Polish złoty	    PLN
        ///         Pound sterling	    GBP
        ///         Singapore dollar	SGD
        ///         Swedish krona	    SEK
        ///         Swiss franc	        CHF
        ///         Thai baht	        THB
        ///         Turkish lira	    TRY
        ///         United States dollar	USD
        /// </param>
        /// <param name="info">信用卡信息
        ///     具体查看BCCreditCardInfo类
        ///     当channel 为PAYPAL_CREDITCARD必填
        /// </param>
        /// <param name="creditCardId">
        ///     当使用PAYPAL_CREDITCARD支付完成后会返回一个credit_card_id,商家可以存储这个id方便下次通过这个id发起支付无需再输入卡面信息
        /// </param>
        /// <param name="returnUrl">同步返回页面
        ///     支付渠道处理完请求后,当前页面自动跳转到商户网站里指定页面的http路径。
        ///     当channel参数为PAYPAL_PAYPAL时为必填
        /// </param>
        /// <returns></returns>
        public static BCInternationlBill BCInternationalPay(BCInternationlBill bill)
        {
            Random random = new Random();
            string payUrl = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.internationalURL;

            string paraString = prepareInternationalPayParameters(bill);

            try
            {
                HttpWebResponse response = BCPrivateUtil.CreatePostHttpResponse(payUrl, paraString, BCCache.Instance.networkTimeout);
                string respString = BCPrivateUtil.GetResponseString(response);
                return handleInternationalPayResult(respString, bill);
            }
            catch (Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#22
0
        /// <summary>
        /// BC银行卡代付
        /// </summary>
        /// <param name="transfer">具体参考初始化BCTransferWithBackCard</param>
        /// <returns></returns>
        public static BCTransferWithBackCard BCBankCardTransfer(BCTransferWithBackCard transfer)
        {
            string transferUrl = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.bctransferURL;

            string paraString = prepareBCTransferWithBankCard(transfer);

            try
            {
                HttpWebResponse response = BCPrivateUtil.CreatePostHttpResponse(transferUrl, paraString, BCCache.Instance.networkTimeout);
                string respString = BCPrivateUtil.GetResponseString(response);
                return handleBCTransferWithBankCardResult(respString, transfer);
            }
            catch (Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#23
0
        /// <summary>
        ///  微信支付宝扫码/被扫支付
        /// </summary>
        /// <param name="bill"></param>
        /// <returns></returns>
        public static BCBill BCOfflinePayByChannel(BCBill bill)
        {
            string payUrl = "";

            if (bill.channel.ToString().Contains("SCAN"))
            {
                payUrl = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.offlineBillURL;
            }
            else
            {
                payUrl = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.billURL;
            }

            long timestamp = BCUtil.GetTimeStamp(DateTime.Now);

            JsonData data = new JsonData();

            data["app_id"] = BCCache.Instance.appId;
            data["app_sign"] = BCPrivateUtil.getAppSignature(BCCache.Instance.appId, BCCache.Instance.appSecret, timestamp.ToString());
            data["timestamp"] = timestamp;
            data["channel"] = bill.channel;
            data["total_fee"] = bill.totalFee;
            data["bill_no"] = bill.billNo;
            data["title"] = bill.title;

            if (bill.authCode != null)
            {
                data["auth_code"] = bill.authCode;
            }

            if (bill.optional != null && bill.optional.Count > 0)
            {
                data["optional"] = new JsonData();
                foreach (string key in bill.optional.Keys)
                {
                    data["optional"][key] = bill.optional[key];
                }
            }

            string paraString = data.ToJson();

            try
            {
                HttpWebResponse response = BCPrivateUtil.CreatePostHttpResponse(payUrl, paraString, BCCache.Instance.networkTimeout);

                string respString = BCPrivateUtil.GetResponseString(response);

                JsonData responseData = JsonMapper.ToObject(respString);

                if (bill.channel == "BC_ALI_QRCODE")
                {
                    if (responseData["result_code"].ToString() == "0")
                    {
                        bill.id = responseData["id"].ToString();
                        bill.codeURL = responseData["code_url"].ToString();
                        return bill;
                    }
                    else
                    {
                        var ex = new BCException(responseData["err_detail"].ToString());
                        throw ex;
                    }
                }
                if (bill.channel == "BC_ALI_SCAN" || bill.channel == "BC_WX_SCAN")
                {
                    if (responseData["result_code"].ToString() == "0")
                    {
                        bill.id = responseData["id"].ToString();
                        bill.result = (bool)responseData["pay_result"];
                        return bill;
                    }
                    else
                    {
                        var ex = new BCException(responseData["err_detail"].ToString());
                        throw ex;
                    }
                }
                return bill;
            }
            catch (Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#24
0
        /// <summary>
        /// 根据ID查询订阅计划
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static BCPlan queryPlanByID(string id)
        {
            long timestamp = BCUtil.GetTimeStamp(DateTime.Now);

            string planURL = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.bcplanURL + "/" + id;
            planURL += "?app_id=" + BCCache.Instance.appId + "&app_sign=" + BCPrivateUtil.getAppSignature(BCCache.Instance.appId, BCCache.Instance.appSecret, timestamp.ToString()) + "&timestamp=" + timestamp;

            try
            {
                HttpWebResponse response = BCPrivateUtil.CreateGetHttpResponse(planURL, BCCache.Instance.networkTimeout);

                string respString = BCPrivateUtil.GetResponseString(response);

                JsonData responseData = JsonMapper.ToObject(respString);

                if (responseData["result_code"].ToString() == "0")
                {
                    BCPlan plan = new BCPlan();
                    plan.ID = responseData["plan"]["id"].ToString();
                    plan.fee = (int)responseData["plan"]["fee"];
                    plan.interval = responseData["plan"]["interval"].ToString();
                    plan.name = responseData["plan"]["name"].ToString();
                    plan.currency = responseData["plan"]["currency"].ToString();
                    plan.intervalCount = (int)responseData["plan"]["interval_count"];
                    plan.trialDays = (int)responseData["plan"]["trial_days"];
                    plan.valid = (bool)responseData["plan"]["valid"];
                    plan.optional = JsonMapper.ToObject<Dictionary<string, string>>(responseData["plan"]["optional"].ToJson().ToString());
                    return plan;
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }
            }
            catch (Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#25
0
        /// <summary>
        /// 支付订单查询
        /// </summary>
        /// <param name="channel">渠道类型
        ///     选填
        ///     可以通过enum BCPay.QueryChannel获取
        ///     channel的参数值含义:
        ///     WX_APP:       微信手机APP支付
        ///     WX_NATIVE:    微信公众号二维码支付
        ///     WX_JSAPI:     微信公众号支付
        ///     ALI_APP:      支付宝APP支付
        ///     ALI_WEB:      支付宝网页支付 
        ///     ALI_QRCODE:   支付宝内嵌二维码支付
        ///     UN_APP:       银联APP支付
        ///     UN_WEB:       银联网页支付
        ///     JD_WAP:       京东wap支付
        ///     JD_WEB:       京东web支付
        ///     YEE_WAP:      易宝wap支付 
        ///     YEE_WEB:      易宝web支付
        ///     KUAIQIAN_WAP: 快钱wap支付
        ///     KUAIQIAN_WEB: 快钱web支付
        ///     注意:不传channel也能查询的前提是保证所有渠道所有订单号不同,如果出现两个订单号重复,会报错提示传入channel进行区分
        /// </param>
        /// <param name="billNo">商户订单号
        /// </param>
        /// <param name="startTime">起始时间
        ///     毫秒时间戳, 13位, 可以使用BCUtil.GetTimeStamp()方法获取
        ///     选填
        /// </param>
        /// <param name="endTime">结束时间
        ///     毫秒时间戳, 13位, 可以使用BCUtil.GetTimeStamp()方法获取
        ///     选填
        /// </param>
        /// <param name="spayResult">订单状态
        ///     订单是否成功,null为全部返回,true只返回成功订单,false只返回失败订单
        ///     选填
        /// </param>
        /// <param name="needDetail">是否需要返回渠道详细信息
        ///     决定是否需要返回渠道的回调信息,true为需要
        ///     选填
        /// </param>
        /// <param name="skip">查询起始位置
        ///     默认为0。设置为10表示忽略满足条件的前10条数据
        ///     选填
        /// </param>
        /// <param name="limit">查询的条数
        ///     默认为10,最大为50。设置为10表示只返回满足条件的10条数据
        ///     选填
        /// </param>
        /// <returns></returns>
        public static List<BCBill> BCPayQueryByCondition(BCQueryBillParameter para)
        {
            Random random = new Random();
            string payQueryUrl = "";
            if (!BCCache.Instance.testMode)
            {
                payQueryUrl = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.billsURL;
            }
            else
            {
                payQueryUrl = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.billsTestURL;
            }

            string paraString = preparePayQueryByConditionParameters(para);

            try
            {
                string url = payQueryUrl + "?para=" + HttpUtility.UrlEncode(paraString, Encoding.UTF8);
                HttpWebResponse response = BCPrivateUtil.CreateGetHttpResponse(url, BCCache.Instance.networkTimeout);
                string respString = BCPrivateUtil.GetResponseString(response);
                return handlePayQueryByConditionResult(respString, para.needDetail);
            }
            catch(Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#26
0
        /// <summary>
        /// 按条件查询订阅计划
        /// </summary>
        /// <param name="nameWithSubstring">订阅计划名</param>
        /// <param name="interval">订阅周期</param>
        /// <param name="intervalCount">周期长度</param>
        /// <param name="trialDays">订阅发生时间与实际扣款时间之间的时长</param>
        /// <param name="createdBefore">创建时间前</param>
        /// <param name="createdAfter">创建时间后</param>
        /// <param name="skip">跳过数量</param>
        /// <param name="limit">查询限量</param>
        /// <param name="countOnly">设置为true时只返回数量,设置为false时只返回plan记录</param>
        /// <returns></returns>
        /// 
        public static List<BCPlan> queryPlansByCondition(string nameWithSubstring, string interval, int? intervalCount, int? trialDays, long? createdBefore, long? createdAfter, int? skip, int? limit, bool countOnly)
        {
            long timestamp = BCUtil.GetTimeStamp(DateTime.Now);

            string planURL = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.bcplanURL;
            planURL += "?app_id=" + BCCache.Instance.appId + "&app_sign=" + BCPrivateUtil.getAppSignature(BCCache.Instance.appId, BCCache.Instance.appSecret, timestamp.ToString()) + "&timestamp=" + timestamp;
            if (nameWithSubstring != null)
            {
                planURL += "&name_with_substring=" + nameWithSubstring;
            }
            if (interval != null)
            {
                planURL += "&interval=" + interval;
            }
            if (intervalCount.HasValue)
            {
                planURL += "&interval_count=" + intervalCount.Value;
            }
            if (trialDays.HasValue)
            {
                planURL += "&trial_days=" + trialDays.Value;
            }
            if (createdBefore.HasValue)
            {
                planURL += "&created_before=" + createdBefore.Value;
            }
            if (createdAfter.HasValue)
            {
                planURL += "&created_after=" + createdAfter.Value;
            }
            if (skip.HasValue)
            {
                planURL += "&skip=" + skip.Value;
            }
            if (limit.HasValue)
            {
                planURL += "&limit=" + limit.Value;
            }
            planURL += "&count_only=" + countOnly;

            try
            {
                HttpWebResponse response = BCPrivateUtil.CreateGetHttpResponse(planURL, BCCache.Instance.networkTimeout);

                string respString = BCPrivateUtil.GetResponseString(response);

                JsonData responseData = JsonMapper.ToObject(respString);

                if (responseData["result_code"].ToString() == "0")
                {
                    List<BCPlan> plans = new List<BCPlan>();
                    if (responseData["plans"].IsArray)
                    {
                        foreach (JsonData planData in responseData["plans"])
                        {
                            BCPlan plan = new BCPlan();
                            plan.ID = planData["id"].ToString();
                            plan.fee = (int)planData["fee"];
                            plan.interval = planData["interval"].ToString();
                            plan.name = planData["name"].ToString();
                            plan.currency = planData["currency"].ToString();
                            plan.intervalCount = (int)planData["interval_count"];
                            plan.trialDays = (int)planData["trial_days"];
                            plan.valid = (bool)planData["valid"];
                            plan.optional = JsonMapper.ToObject<Dictionary<string, string>>(planData["optional"].ToJson().ToString());

                            plans.Add(plan);
                        }
                    }
                    return plans;
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }
            }
            catch (Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#27
0
        /// <summary>
        /// 退款订单查询(指定ID)
        /// </summary>
        /// <param name="id">退款记录的唯一标识,可用于查询单笔记录</param>
        /// <returns></returns>
        public static BCRefund BCRefundQueryById(string id)
        {
            Random random = new Random();
            string payQueryUrl = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.refundURL + "/" + id;

            string paraString = prepareQueryByIdParameters(id);

            try
            {
                string url = payQueryUrl + "?para=" + HttpUtility.UrlEncode(paraString, Encoding.UTF8);
                HttpWebResponse response = BCPrivateUtil.CreateGetHttpResponse(url, BCCache.Instance.networkTimeout);
                string respString = BCPrivateUtil.GetResponseString(response);
                return handleRefundQueryByIdResult(respString);
            }
            catch (Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#28
0
        /// <summary>
        /// 按ID查询订阅记录
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static BCSubscription querySubscriptionByID(string id)
        {
            long timestamp = BCUtil.GetTimeStamp(DateTime.Now);

            string subscriptionURL = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.bcsubscriptionURL + "/" + id;
            subscriptionURL += "?app_id=" + BCCache.Instance.appId + "&app_sign=" + BCPrivateUtil.getAppSignature(BCCache.Instance.appId, BCCache.Instance.appSecret, timestamp.ToString()) + "&timestamp=" + timestamp;

            try
            {
                HttpWebResponse response = BCPrivateUtil.CreateGetHttpResponse(subscriptionURL, BCCache.Instance.networkTimeout);

                string respString = BCPrivateUtil.GetResponseString(response);

                JsonData responseData = JsonMapper.ToObject(respString);

                if (responseData["result_code"].ToString() == "0")
                {
                    BCSubscription sub = new BCSubscription();
                    sub.ID = responseData["subscription"]["id"].ToString();
                    sub.buyerID = responseData["subscription"]["buyer_id"].ToString();
                    sub.planID = responseData["subscription"]["plan_id"].ToString();
                    sub.cardID = responseData["subscription"]["card_id"].ToString();
                    sub.bankName = responseData["subscription"]["bank_name"].ToString();
                    sub.IDName = responseData["subscription"]["id_name"].ToString();
                    sub.IDNo = responseData["subscription"]["id_no"].ToString();
                    sub.mobile = responseData["subscription"]["mobile"].ToString();
                    sub.amount = (double)responseData["subscription"]["amount"];
                    sub.couponID = responseData["subscription"]["coupon_id"].ToString();
                    sub.trialEnd = (long)responseData["subscription"]["trial_end"];
                    sub.optional = JsonMapper.ToObject<Dictionary<string, string>>(responseData["subscription"]["optional"].ToJson().ToString());

                    sub.last4 = responseData["subscription"]["last4"].ToString();
                    sub.status = responseData["subscription"]["status"].ToString();
                    sub.valid = (bool)responseData["subscription"]["valid"];
                    sub.cancelAtPeriodEnd = (bool)responseData["subscription"]["cancel_at_period_end"];
                    return sub;
                }
                else
                {
                    var ex = new BCException(responseData["err_detail"].ToString());
                    throw ex;
                }
            }
            catch (Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#29
0
        /// <summary>
        ///退款状态查询"
        /// </summary>
        /// <param name="channel">渠道类型
        ///     只有WX、YEE、KUAIQIAN、BD需要
        /// </param>
        /// <param name="refundNo">商户退款单号
        /// </param>
        /// <returns>
        /// </returns>
        public static string BCRefundStatusQuery(string channel, string refundNo)
        {
            Random random = new Random();
            string refundStatusUrl = BCPrivateUtil.getHost() + BCConstants.version + BCConstants.refundStatusURL;

            string paraString = prepareRefundStatusQueryParameters(channel, refundNo);

            string url = refundStatusUrl + "?para=" + HttpUtility.UrlEncode(paraString, Encoding.UTF8);
            try
            {
                HttpWebResponse response = BCPrivateUtil.CreateGetHttpResponse(url, BCCache.Instance.networkTimeout);
                string respString = BCPrivateUtil.GetResponseString(response);
                return handleRefundStatusQueryResult(respString);
            }
            catch (Exception e)
            {
                var ex = new BCException(e.Message);
                throw ex;
            }
        }
示例#30
0
        //处理订单Id查询回调
        public static BCBill handlePayQueryByIdResult(string respString)
        {
            JsonData responseData = JsonMapper.ToObject(respString);
            BCBill bill = new BCBill();
            if (responseData["result_code"].ToString() == "0")
            {
                JsonData billData = responseData["pay"];
                bill.id = billData["id"].ToString();
                bill.title = billData["title"].ToString();
                bill.totalFee = int.Parse(billData["total_fee"].ToString());
                bill.createdTime = BCUtil.GetDateTime((long)billData["create_time"]);
                bill.billNo = billData["bill_no"].ToString();
                bill.result = (bool)billData["spay_result"];
                bill.channel = billData["sub_channel"].ToString();
                bill.tradeNo = billData["trade_no"].ToString();
                bill.optional = JsonMapper.ToObject<Dictionary<string, string>>(billData["optional"].ToString());
                bill.messageDetail = billData["message_detail"].ToString();
                bill.revertResult = (bool)billData["revert_result"];
                bill.refundResult = (bool)billData["refund_result"];
            }
            else
            {
                var ex = new BCException(responseData["err_detail"].ToString());
                throw ex;
            }

            return bill;
        }