Пример #1
0
        /// <summary>
        /// 退款
        /// </summary>
        /// <param name="channel">渠道类型
        ///     选填
        ///     可以通过enum BCPay.RefundChannel获取
        ///     ALI:支付宝
        ///     WX:微信
        ///     UN:银联
        ///     注意:不传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="optional">附加数据
        ///     用户自定义的参数,将会在webhook通知中原样返回,该字段主要用于商户携带订单的自定义数据
        ///     选填
        ///     {"key1":"value1","key2":"value2",...}
        /// </param>
        /// <returns>
        ///     BCRefundResult
        /// </returns>
        public static BCRefundResult BCRefundByChannel(string channel, string refundNo, string billNo, int refundFee, Dictionary <string, string> optional)
        {
            Random random    = new Random();
            string refundUrl = BCPrivateUtil.mLocalDefaultHosts[random.Next(0, 4)] + BCConstants.version + BCConstants.refundURL;

            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"]    = channel;
            data["refund_no"]  = refundNo;
            data["bill_no"]    = billNo;
            data["refund_fee"] = refundFee;
            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();

            try
            {
                HttpWebResponse response     = BCPrivateUtil.CreatePostHttpResponse(refundUrl, paraString);
                string          respString   = BCPrivateUtil.GetResponseString(response);
                JsonData        responseData = JsonMapper.ToObject(respString);
                BCRefundResult  result       = new BCRefundResult();
                result.resultCode = int.Parse(responseData["result_code"].ToString());
                result.resultMsg  = responseData["result_msg"].ToString();
                if (responseData["result_code"].ToString() == "0")
                {
                    if (channel.Contains("ALI"))
                    {
                        result.url = responseData["url"].ToString();
                    }
                }
                else
                {
                    result.errDetail = responseData["err_detail"].ToString();
                }
                return(result);
            }
            catch (Exception e)
            {
                BCRefundResult result = new BCRefundResult();
                result.resultCode = 99;
                result.resultMsg  = e.Message;
                return(result);
            }
        }
Пример #2
0
 protected void QueryGridView_RowCommand(object sender, GridViewCommandEventArgs e)
 {
     if (e.CommandName == "refund")
     {
         int    rowIndex = Convert.ToInt32(e.CommandArgument);
         string billNo   = bills[rowIndex].billNo;
         int    totalFee = bills[rowIndex].totalFee;
         if (typeChannel == "Ali")
         {
             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);
             }
             else
             {
                 Response.Write("<span style='color:#00CD00;font-size:20px'>" + refundResult.resultCode + "</span><br/>");
                 Response.Write("<span style='color:#00CD00;font-size:20px'>" + refundResult.resultMsg + "</span><br/>");
                 Response.Write("<span style='color:#00CD00;font-size:20px'>" + refundResult.errDetail + "</span><br/>");
             }
         }
         if (typeChannel == "WX")
         {
             BCRefundResult refundResult = BCPay.BCRefundByChannel(BCPay.RefundChannel.WX.ToString(), DateTime.Today.ToString("yyyyMMdd") + BCUtil.GetUUID().Substring(0, 8), billNo, totalFee, null);
             if (refundResult.resultCode == 0)
             {
                 Response.Write("<script>alert('退款成功!')</script>");
             }
             else
             {
                 Response.Write("<span style='color:#00CD00;font-size:20px'>" + refundResult.resultCode + "</span><br/>");
                 Response.Write("<span style='color:#00CD00;font-size:20px'>" + refundResult.resultMsg + "</span><br/>");
                 Response.Write("<span style='color:#00CD00;font-size:20px'>" + refundResult.errDetail + "</span><br/>");
             }
         }
         if (typeChannel == "UN")
         {
             BCRefundResult refundResult = BCPay.BCRefundByChannel(BCPay.RefundChannel.UN.ToString(), DateTime.Today.ToString("yyyyMMdd") + BCUtil.GetUUID().Substring(0, 8), billNo, totalFee, null);
             if (refundResult.resultCode == 0)
             {
                 Response.Write("<script>alert('退款成功!')</script>");
             }
             else
             {
                 Response.Write("<span style='color:#00CD00;font-size:20px'>" + refundResult.resultCode + "</span><br/>");
                 Response.Write("<span style='color:#00CD00;font-size:20px'>" + refundResult.resultMsg + "</span><br/>");
                 Response.Write("<span style='color:#00CD00;font-size:20px'>" + refundResult.errDetail + "</span><br/>");
             }
         }
     }
 }