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;
}
}