页面代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ICBCBankPay.aspx.cs" Inherits="ICBCBankPay" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body οnlοad="javascript:document.frm1.submit();">
<form action="https://B2C.icbc.com.cn/servlet/ICBCINBSEBusinessServlet" method="POST"
name="frm1" id="frm1">
<input name="interfaceName" type="text" value="ICBC_PERBANK_B2C" />
<input name="interfaceVersion" type="text" value="1.0.0.11" />
<input name="tranData" type="text" id="tranData" runat="server" value="" />
<input name="merSignMsg" type="text" id="merSignMsg" runat="server" value="" />
<input name="merCert" type="text" id="merCert" runat="server" value="" />
<input name="merReference" id="merReference" runat="server" type="hidden" value="" />
<input name="merCustomIp" id="merCustomIp" type="hidden" runat="server" value="" />
<input name="merURL" id="merURL" type="hidden" runat="server" value="" />
</form>
</body>
</html>
页面方法:
protected void Page_Load(object sender, EventArgs e)
{
string src = string.Empty;
string _ORDERID = ""//订单号
string _PAYMENT=""//订单金额
StringBuilder strSet = new StringBuilder();
strSet.Append("<?xml version=\"1.0\" encoding=\"GBK\" standalone=\"no\"?>");
strSet.Append("<B2CReq>");
strSet.Append("<interfaceName>ICBC_PERBANK_B2C</interfaceName>");
strSet.Append("<interfaceVersion>1.0.0.11</interfaceVersion>");
strSet.Append("<orderInfo>");
strSet.Append("<orderDate>" + DateTime.Now.ToString("yyyyMMddHHmmss") + "</orderDate>");
strSet.Append("<curType>001</curType>");//支付币种
strSet.Append("<merID>1111111111</merID>");//商户代码
strSet.Append("<subOrderInfoList>");
strSet.Append("<subOrderInfo>");
strSet.Append("<orderid>" + _ORDERID + "</orderid>");//订单号
strSet.Append("<amount>" + _PAYMENT + "</amount>");
strSet.Append("<installmentTimes>1</installmentTimes>");//分期付款期数
strSet.Append("<merAcct>11111111111</merAcct>");//商户账号
strSet.Append("<goodsID>001</goodsID>");//商品编号
strSet.Append("<goodsName></goodsName>");//商品名称
strSet.Append("<goodsNum>1</goodsNum>");//商品数量
strSet.Append("<carriageAmt></carriageAmt>");//已含运费金额
strSet.Append("</subOrderInfo>");
strSet.Append("</subOrderInfoList>");
strSet.Append("</orderInfo>");
strSet.Append("<custom>");
strSet.Append("<verifyJoinFlag>0</verifyJoinFlag>");//检验联名标志
strSet.Append("<Language>ZH_CN</Language>");//语言版本
strSet.Append("</custom>");
strSet.Append("<message>");
strSet.Append("<creditType>2</creditType>");//支持订单支付的银行卡种类
strSet.Append("<notifyType>HS</notifyType>");
strSet.Append("<resultType>0</resultType>");//结果发送类型
strSet.Append("<merReference>" + merReference.Value + "</merReference>");//商户reference
strSet.Append("<merCustomIp>" + merCustomIp.Value + "</merCustomIp>");//客户端IP
strSet.Append("<goodsType>1</goodsType>");//虚拟商品/实
strSet.Append("<merCustomID></merCustomID>");//买家用户号
strSet.Append("<merCustomPhone></merCustomPhone>");//买家联系电话
strSet.Append("<goodsAddress></goodsAddress>");//收货地址
strSet.Append("<merOrderRemark></merOrderRemark>");//订单备注
strSet.Append("<merHint></merHint>");//商城提示
strSet.Append("<remark1></remark1>");
strSet.Append("<remark2></remark2>");
strSet.Append("<merURL>" + merURL.Value + "</merURL>");
strSet.Append("<merVAR>icbc</merVAR>");
strSet.Append("</message>");
strSet.Append("</B2CReq>");
src = strSet.ToString();
var icbc = new ICBCEBANKUTILLib.B2CUtilClass();
int log = icbc.init("E:\\shyg10.crt", "E:\\shyg10.crt", "E:\\shyg10.key", "11111111");
if (log != 0)
icbc.getRC();
tranData.Value = EncodeBase64(Encoding.Default,src.Trim());
string mer = icbc.signC(src, src.Length);
merSignMsg.Value = mer;
string ff = icbc.verifySignC(src, src.Length, mer, mer.Length).ToString();
merCert.Value = icbc.getCert(1);
var aa = icbc.getRC();
}
/// <summary>
/// Base64加密
/// </summary>
/// <param name="codeName">加密采用的编码方式</param>
/// <param name="source">待加密的明文</param>
/// <returns></returns>
public static string EncodeBase64(Encoding encode, string source)
{
string decode = string.Empty;
byte[] bytes = encode.GetBytes(source);
try
{
decode = Convert.ToBase64String(bytes);
}
catch
{
decode = source;
}
return decode;
}
支付结果返回页面方法:
支付结果接受:
if (!string.IsNullOrEmpty(Request["merVAR"]) && Request["merVAR"].ToString().Equals("icbc"))
{
string xml = DecodeBase64(Encoding.Default, Request["notifyData"].ToString());
XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(xml);
string paystate = xmldoc.DocumentElement.SelectSingleNode("/B2CRes/bank/tranStat").InnerText;
string orderid= xmldoc.DocumentElement.SelectSingleNode("/B2CRes/orderInfo/subOrderInfoList/subOrderInfo/orderid").InnerText;
}
/// <summary>
/// Base64解密
/// </summary>
/// <param name="codeName">解密采用的编码方式,注意和加密时采用的方式一致</param>
/// <param name="result">待解密的密文</param>
/// <returns>解密后的字符串</returns>
public static string DecodeBase64(Encoding encode, string result)
{
string decode = "";
byte[] bytes = Convert.FromBase64String(result);
try
{
decode = encode.GetString(bytes);
}
catch
{
decode = result;
}
return decode;
}
注意:项目需要引用ICBCEBANKUTILLib.DLL,该DLL银行都会提供,在这就不上传了。