域名 | 名称 | 类型 | 备注 |
MERCHANTID | 商户代码 | CHAR(9) | 由建行统一分配 |
POSID | 商户柜台代码 | CHAR(9) | 由建行统一分配,缺省为000000000 |
BRANCHID | 分行代码 | CHAR(9) | 由建行统一指定 |
ORDERID | 定单号 | CHAR(30) | 由商户提供,最长30位,按实际长度给出 |
PAYMENT | 付款金额 | NUMBER(16,2) | 由商户提供,按实际金额给出 |
CURCODE | 币种 | CHAR(2) | 缺省为01-人民币 |
REMARK1 | 备注1 | CHAR(30) | 网银不处理,直接传到城综网 |
REMARK2 | 备注2 | CHAR(30) | 网银不处理,直接传到城综网 |
TXCODE | 交易码 | CHAR(6) | 由建行统一分配为520100 |
MAC | MAC校验域 | CHAR(32) | 采用标准MD5算法,由商户实现 |
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ClientSystem.AliPay
{
/// <summary>
/// 建行传入参数
/// </summary>
public class CBBTextModel
{
private string _MERCHANTID = "";
/// <summary>
/// 商户代码 由建行统一分配
/// </summary>
public string MERCHANTID
{
get { return _MERCHANTID; }
set { _MERCHANTID = value; }
}
private string _POSID = "";
/// <summary>
/// 商户柜台代码 由建行统一分配,缺省为000000000
/// </summary>
public string POSID
{
get { return _POSID; }
set { _POSID = value; }
}
private string _BRANCHID = "";
/// <summary>
/// 分行代码 由建行统一指定
/// </summary>
public string BRANCHID
{
get { return _BRANCHID; }
set { _BRANCHID = value; }
}
private string _ORDERID = "";
/// <summary>
/// 定单号 由商户提供,最长30位,按实际长度给出
/// </summary>
public string ORDERID
{
get { return _ORDERID; }
set { _ORDERID = value; }
}
private decimal _PAYMENT = 0m;
/// <summary>
/// 付款金额 由商户提供,按实际金额给出
/// </summary>
public decimal PAYMENT
{
get { return _PAYMENT; }
set { _PAYMENT = value; }
}
private string _CURCODE = "";
/// <summary>
/// 币种 缺省为01-人民币
/// </summary>
public string CURCODE
{
get { return _CURCODE; }
set { _CURCODE = value; }
}
private string REMARK1 = "";
/// <summary>
/// 备注1 网银不处理,直接传到城综网
/// </summary>
public string REMARK11
{
get { return REMARK1; }
set { REMARK1 = value; }
}
private string REMARK2 = "";
/// <summary>
/// 备注2 网银不处理,直接传到城综网
/// </summary>
public string REMARK21
{
get { return REMARK2; }
set { REMARK2 = value; }
}
private string _TXCODE = "";
/// <summary>
/// 交易码 由建行统一分配为520100
/// </summary>
public string TXCODE
{
get { return _TXCODE; }
set { _TXCODE = value; }
}
private string _MAC = "";
/// <summary>
/// MAC校验域 采用标准MD5算法,由商户实现
/// </summary>
public string MAC
{
get { return _MAC; }
set { _MAC = value; }
}
private string _url = "";
/// <summary>
/// URL
/// </summary>
public string Url
{
get { return _url; }
set { _url = value; }
}
}
}
#region //预定义方法或是变量
/// <summary>
/// 请求指定 URL 资源,并获取响应结果
/// </summary>
/// <param name="url">需要请求的 URL 资源</param>
/// <returns>
/// 响应结果;
/// 出现任意异常,均返回字串"Runtime Error"
/// </returns>
private string RequestContent(string url)
{
string content = string.Empty;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.KeepAlive = false;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
content = reader.ReadToEnd();
reader.Close();
}
catch (Exception)
{
content = "Runtime Error";
}
return content;
}
/// <summary>
/// 传入明文,返回用MD%加密后的字符串
/// </summary>
/// <param name="str">要加密的字符串</param>
/// <returns>用MD5加密后的字符串</returns>
public static string ToMD5(string str)
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "md5");
}
#endregion
if (textBox1.Text.Trim() == "" || textBox1.Text.Trim() == null)
{
MessageBoxForm objm = new MessageBoxForm("您输入的金额不能为空!!!", "提示信息");
objm.ShowDialog();
return;
}
string orid = OfficeInfo.ofId.ToString().Trim() + "_" + DateTime.Now.Ticks.ToString();
Alipay objalipay = new Alipay();
objalipay.APID = orid;
objalipay.addTime = DateTime.Now;
objalipay.total_fee = Convert.ToDecimal(textBox1.Text.ToString().Trim());
objalipay.trade_status = "客户端提交";
objalipay.Text1 = DateTime.Now.ToString();
objalipay.Text2 = "建行接口";
objalipay.Text3 = "";
objalipay.Text4 = "";
objalipay.Text5 = "";
decimal money = Convert.ToDecimal(user.GetListBy(OfficeInfo.ofPara1, 13).ToString().Trim());
if (money > Convert.ToDecimal(textBox1.Text.Trim()))
{
MessageBoxForm objm = new MessageBoxForm("你输入的最小金额不能低于" + money + "元!!!", "提示信息");
objm.ShowDialog();
return;
}
if (user.AddAlipay(OfficeInfo.ofPara1, objalipay))
{
CBBTextModel objcbbText = new CBBTextModel();
//商户代码 由建行统一分配
objcbbText.MERCHANTID = "00000000000000";
//商户柜台代码 由建行统一分配,缺省为000000000
objcbbText.POSID = "00000000000000";
//分行代码 由建行统一指定
objcbbText.BRANCHID = "00000000000000";
// 定单号 由商户提供,最长30位,按实际长度给出
objcbbText.ORDERID = orid.Trim();
//付款金额 由商户提供,按实际金额给出
objcbbText.PAYMENT = Convert.ToDecimal(textBox1.Text.Trim());
//币种 缺省为01-人民币
objcbbText.CURCODE = "01";
//备注1 网银不处理,直接传到城综网
objcbbText.REMARK11 = "";
//备注2 网银不处理,直接传到城综网
objcbbText.REMARK21 = "";
//交易码 由建行统一分配为520100
objcbbText.TXCODE = "520100";
//MAC校验域 采用标准MD5算法,由商户实现
objcbbText.MAC = "qwertyuioplkjhgfdsazxcvbnm901234";
//URL
objcbbText.Url = "https://ibsbjstar.ccb.com.cn/app/ccbMain";
//要加密的串
string canshu = "MERCHANTID=" + objcbbText.MERCHANTID.Trim() +
"&POSID=" + objcbbText.POSID.Trim() + "&BRANCHID=" + objcbbText.BRANCHID.Trim()
+ "&ORDERID=" + objcbbText.ORDERID.Trim() + "&PAYMENT=" + objcbbText.PAYMENT.ToString().Trim()
+ "&CURCODE=" + objcbbText.CURCODE + "&TXCODE=" + objcbbText.TXCODE.Trim()
+ "&REMARK1=&REMARK2=";
objcbbText.MAC = ToMD5(canshu.Trim()).ToLower().Trim();
string strURl = objcbbText.Url + "?" + canshu + "&MAC=" + objcbbText.MAC.Trim();
webBrowser1.Url = new Uri(strURl.Trim());
}
}
string orid = OfficeInfo.ofId.ToString().Trim() + "_" + DateTime.Now.Ticks.ToString();
Alipay objalipay = new Alipay();
objalipay.APID = orid;
objalipay.addTime = DateTime.Now;
objalipay.total_fee = Convert.ToDecimal(textBox1.Text.ToString().Trim());
objalipay.trade_status = "客户端提交";
objalipay.Text1 = DateTime.Now.ToString();
objalipay.Text2 = "建行接口";
objalipay.Text3 = "";
objalipay.Text4 = "";
objalipay.Text5 = "";
decimal money = Convert.ToDecimal(user.GetListBy(OfficeInfo.ofPara1, 13).ToString().Trim());
if (money > Convert.ToDecimal(textBox1.Text.Trim()))
{
MessageBoxForm objm = new MessageBoxForm("你输入的最小金额不能低于" + money + "元!!!", "提示信息");
objm.ShowDialog();
return;
}
域名 | 名称 | 类型 | 备注 |
POSID | 商户柜台代码 | CHAR(9) | 从商户传送的信息中获得 |
BRANCHID | 分行代码 | CHAR(9) | 从商户传送的信息中获得 |
ORDERID | 定单号 | CHAR(30) | 从商户传送的信息中获得 |
PAYMENT | 付款金额 | NUMBER(16,2) | 从商户传送的信息中获得 |
CURCODE | 币种 | CHAR(2) | 从商户传送的信息中获得 |
REMARK1 | 备注一 | CHAR(30) | 从商户传送的信息中获得 |
REMARK2 | 备注二 | CHAR(30) | 从商户传送的信息中获得 |
SUCCESS | 成功标志 | CHAR(1) | 成功时返回Y |
SIGN | 数字签名 | CHAR(256) |
string canshu = "POSID=000000000&BRANCHID=0000000&ORDERID=" + Request.QueryString["ORDERID"].Trim() + "&PAYMENT=" +
Request.QueryString["PAYMENT"].Trim() + "&CURCODE=" + Request.QueryString["CURCODE"].Trim() + "&REMARK1=" + Request.QueryString["REMARK1"].Trim()
+ "&REMARK2=" + Request.QueryString["REMARK2"].Trim() + "&ACC_TYPE=" + Request.QueryString["ACC_TYPE"].Trim()
+ "&SUCCESS=" + Request.QueryString["SUCCESS"].Trim();
//传过来的签名;
string sign = Request.QueryString["SIGN"];
//本地Key值
string mysign = ConfigurationManager.AppSettings["PublicKey"].ToString().Trim();
CCBRSA.RSASig rsa;
//注册一下regsvr32 CCBRSA.dll 文件
rsa = new CCBRSA.RSASigClass();
bool bRet;
rsa.setPublicKey(mysign);
bRet = rsa.verifySigature(sign, canshu);
//调试用,中国建设银行服务器返回时的完整路径。
if ( bRet && success == "Y" && Request.UserHostName.Trim() == "建行IP") //验证中国建设银行发过来的消息,签名是否正确
{
在这里写我们自己的代码吧。。。。。。。。。。。。
}
代码
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
using SystemModel;
using System.Net;
using ccbText;
using System.Text;
using System.Security.Cryptography;
public partial class _Default : System.Web.UI.Page
{
//加载事件
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//
try
{
//要加密的串
//要加密的串
string canshu = "POSID=0000000&BRANCHID=0000000&ORDERID=" + Request.QueryString["ORDERID"].Trim() + "&PAYMENT=" +Request.QueryString["PAYMENT"].Trim() + "&CURCODE=" + Request.QueryString["CURCODE"].Trim() + "&REMARK1=" + Request.QueryString["REMARK1"].Trim()
+ "&REMARK2=" + Request.QueryString["REMARK2"].Trim() + "&ACC_TYPE=" + Request.QueryString["ACC_TYPE"].Trim()+ "&SUCCESS=" + Request.QueryString["SUCCESS"].Trim();
//传过来的签名;
string sign = Request.QueryString["SIGN"];
//本地Key值
string mysign = ConfigurationManager.AppSettings["PublicKey"].ToString().Trim();
CCBRSA.RSASig rsa;
//注册一下regsvr32 CCBRSA.dll 文件
rsa = new CCBRSA.RSASigClass();
bool bRet;
rsa.setPublicKey(mysign);
bRet = rsa.verifySigature(sign, canshu);
string success = Request.QueryString["SUCCESS"].ToString().Trim();
//更新自己数据库的订单语句,请自己填写一下
string strOrderNO = Request.QueryString["ORDERID"];//订单号
string strPrice = Request.QueryString["PAYMENT"];//金额
string strTradeStatus = Request.QueryString["SUCCESS"];//订单状态
//调试用,中国建设银行服务器返回时的完整路径。
if ( bRet && success == "Y" && Request.UserHostName.Trim() == "建行IP") //验证中国建设银行发过来的消息,签名是否正确
{
//更新自己数据库的订单语句,请自己填写一下
result=.....这里写上你更新数据库的方法
//成功
if (result.Trim() == "0")
{
//这里要改变交易的状态,或是给用户上账
Response.Write("商户:" + login[0].ToString().Trim() + "<br>金额:" + strPrice + " 交易成功"); //成功,可美化该页面,提示信息
////写文本,纪录中国建设银行返回消息,比对md5计算结果(如网站不支持写txt文件,可改成写数据库)
string TOEXCELLR = "MD5结果:mysign=" + mysign + ",sign=" + sign + " 交易信息" + "商户:"
+ login[1].ToString().Trim() + "<br>金额:" + strPrice + " 交易成功" + Request.UserHostName.Trim();
StreamWriter fs = new StreamWriter(Server.MapPath("Return_DATA/" + DateTime.Now.ToString().Replace(":", "")) + ".txt", false, System.Text.Encoding.Default);
fs.Write(TOEXCELLR);
fs.Close();
//修改订单状态
}
else if (result == "-1")
{
//修改订单状态
////写文本,纪录中国建设银行返回消息,比对md5计算结果(如网站不支持写txt文件,可改成写数据库)
string TOEXCELLR = "MD5结果:mysign=" + mysign + ",sign=" + sign + "perky_" + result.Trim() + Request.UserHostName.Trim();
StreamWriter fs = new StreamWriter(Server.MapPath("Return_DATA/" + "e" + DateTime.Now.ToString().Replace(":", "")) + ".txt", false, System.Text.Encoding.Default);
fs.Write(TOEXCELLR);
fs.Close();
//修改订单状态
Response.Write("查询订单时失败!!! 请确定你是否下单!!!");
}
else
{
//修改订单状态
////写文本,纪录中国建设银行返回消息,比对md5计算结果(如网站不支持写txt文件,可改成写数据库)
string TOEXCELLR = "MD5结果:mysign=" + mysign + ",sign=" + sign + "perky_" + result.Trim() + Request.UserHostName.Trim();
StreamWriter fs = new StreamWriter(Server.MapPath("Return_DATA/" + "e" + DateTime.Now.ToString().Replace(":", "")) + ".txt", false, System.Text.Encoding.Default);
fs.Write(TOEXCELLR);
fs.Close();
Response.Write("重复使用界面无效!!!");
}
}
else
{
Response.Write("------------------------------------------");
Response.Write("<br>Result:responseTxt=");
Response.Write("<br>Result:mysign=" + mysign);
Response.Write("<br>Result:sign=" + sign);
Response.Write("支付失败");
////写文本,纪录中国建设银行返回消息,比对md5计算结果(如网站不支持写txt文件,可改成写数据库)
string TOEXCELLR = "MD5结果:mysign=" + mysign + ",sign=" + sign + Request.UserHostName.Trim();
StreamWriter fs = new StreamWriter(Server.MapPath("Return_DATA/" + "e" + DateTime.Now.ToString().Replace(":", "")) + ".txt", false, System.Text.Encoding.Default);
fs.Write(TOEXCELLR);
fs.Close();
//修改订单状态
}
}
catch (Exception ex)
{
////写文本,纪录中国建设银行返回消息,比对md5计算结果(如网站不支持写txt文件,可改成写数据库)
string TOEXCELLR = Request.Url.ToString() + " " + ex.Message.ToString() + Request.UserHostName.Trim();
StreamWriter fs = new StreamWriter(Server.MapPath("Return_DATA/" + "m" + DateTime.Now.ToString().Replace(":", "")) + ".txt", false, System.Text.Encoding.Default);
fs.Write(TOEXCELLR);
fs.Close();
}
}
}
}
wxdbaihe 发表于 2012-12-18 19:42
苏飞你好我想请教下bRet = rsa.verifySigature(sign, canshu);
这里的cashu变量是经过MD5withRSA加密过后的 ...
Joson 发表于 2013-9-5 08:58
弄过招行 和工行的
liqingboyou 发表于 2015-5-9 09:34
我想达到的功能: 自己输入用户名和密码后,能查询银行交易详单和余额。
这个需要向建行申请吗?还是像直 ...
anying 发表于 2015-7-28 10:35
请问用php开发应该怎么弄呢 需要什么环境,什么组件呢?
龟宝宝 发表于 2015-10-13 12:30
请问这个接口 收取手续费吗 怎么申请?
欢迎光临 苏飞论坛 (http://www.sufeinet.com/) | Powered by Discuz! X3.4 |