/// <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); } }
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/>"); } } } }