㈠ ASP網站的建行網銀介面怎麼弄啊
建行的介面相對於支付寶,Q業務充值和移動,聯通,電信,繳費介面要復雜一些,介面分為兩塊,一塊是商戶到銀行,另外一塊是銀行到商戶
1) 客戶登錄商戶網站,選擇商戶網站商品。
2) 客戶將選好的商品放入購物車,並下訂單。商戶提供商戶代碼、訂單號、合計金額等信息;
3) 客戶選擇代理付款的銀行-建行,確認後,商戶代碼、訂單信息、合計金額通過瀏覽器URL傳到建行網上銀行站點; 網上銀行自動顯示支付頁面,客戶首先選擇是否使用建行證書,然後輸入龍卡號和密碼,選擇「確定」。支付信息經加密後傳送到網銀中心;
4) 網銀中心接收客戶支付信息,轉發到銀行後台業務處理系統;
5) 銀行後台業務系統處理後,返回處理結果給網銀;
6) 網銀通知客戶支付(扣帳)是否成功。如果扣帳成功,提示客戶注意接收商戶返回的送貨信息;對於不需要立即響應的商戶, 跳過步驟7、8;
7) 對於需要立即響應的商戶,如果支付成功,網銀將成功結果反饋給商戶。若支付失敗,不返回給商戶信息
8) 對於需要立即響應的商戶,收到銀行扣帳成功的通知後,發給客戶送貨信息。如客戶收到銀行支付(扣帳)成功通知(步驟6), 但未收到商戶送貨信息,則需向商戶查詢。 日終時,商戶與開設結算帳戶的建設銀行(網銀成員行)進行流水核對,對已支付但未得到商戶確認的交易進行退款處理。
商戶到銀行
--------------------------------------------------------------------------------
其實這一步是把自己卡里的錢轉到商戶的帳上,就是轉賬,
代碼實現其實很簡單,我們先來分析一上要傳的參考吧
個人客戶在商戶網站選擇商品後,商戶網站生成以下信息,傳送到建行網站:
域名
名稱
類型
備注
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演算法,由商戶實現
註:商戶要保證定單號的唯一性。
為了加快站點間介面開發,站點間介面的參數傳送採用普通的URL方式,商戶將以上信息包含在FORM中,在SUBMIT後將生成URL,如下所示:
https://ibsbjstar.ccb.com.cn/app/ccbMain?MERCHANTID=123456789&POSID=000000000&BRANCHID=110000000&ORDERID=19991101234&PAYMENT=500.00&CURCODE=01
&TXCODE=520100&REMARK1=&REMARK2=&MAC=
參與MAC運算的字元及其順序如下:
MERCHANTID=123456789&POSID=000000000&BRANCHID=110000000&ORDERID=19991101234&PAYMENT=500.00&CURCODE=01&
TXCODE=520100&REMARK1=&REMARK2=
註:字元串中變數名必須是大寫字母。
這是建行文檔說的說明,很明顯這是使用Http的方式來實現的
下面我們動手來實現 一下吧,
我是把所有的參數生成了一個實體類這樣方便,而且規范化,
來看看這個Model吧
代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ClientSystem.AliPay
{
///
/// 工行傳入參數
///
public class CBBTextModel
{
private string _MERCHANTID = "";
///
/// 商戶代碼 由建行統一分配
///
public string MERCHANTID
{
get { return _MERCHANTID; }
set { _MERCHANTID = value; }
}
private string _POSID = "";
///
/// 商戶櫃台代碼 由建行統一分配,預設為000000000
///
public string POSID
{
get { return _POSID; }
set { _POSID = value; }
}
private string _BRANCHID = "";
///
/// 分行代碼 由建行統一指定
///
public string BRANCHID
{
get { return _BRANCHID; }
set { _BRANCHID = value; }
}
private string _ORDERID = "";
///
/// 定單號 由商戶提供,最長30位,按實際長度給出
///
public string ORDERID
{
get { return _ORDERID; }
set { _ORDERID = value; }
}
private decimal _PAYMENT = 0m;
///
/// 付款金額 由商戶提供,按實際金額給出
///
public decimal PAYMENT
{
get { return _PAYMENT; }
set { _PAYMENT = value; }
}
private string _CURCODE = "";
///
/// 幣種 預設為01-人民幣
///
public string CURCODE
{
get { return _CURCODE; }
set { _CURCODE = value; }
}
private string REMARK1 = "";
///
/// 備注1 網銀不處理,直接傳到城綜網
///
public string REMARK11
{
get { return REMARK1; }
set { REMARK1 = value; }
}
private string REMARK2 = "";
///
/// 備注2 網銀不處理,直接傳到城綜網
///
public string REMARK21
{
get { return REMARK2; }
set { REMARK2 = value; }
}
private string _TXCODE = "";
///
/// 交易碼 由建行統一分配為520100
///
public string TXCODE
{
get { return _TXCODE; }
set { _TXCODE = value; }
}
private string _MAC = "";
///
/// MAC校驗域 採用標准MD5演算法,由商戶實現
///
public string MAC
{
get { return _MAC; }
set { _MAC = value; }
}
private string _url = "";
///
/// URL
///
public string Url
{
get { return _url; }
set { _url = value; }
}
}
}
我們來准備兩個方法吧,一個是Http連接來使用的一個是Md5加密,因為在文檔里寫到要使用Md5加密哦
代碼
#region //預定義方法或是變數
///
/// 請求指定 URL 資源,並獲取響應結果
///
/// 需要請求的 URL 資源
///
/// 響應結果;
/// 出現任意異常,均返回字串"Runtime Error"
///
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;
}
///
/// 傳入明文,返回用MD%加密後的字元串
///
/// 要加密的字元串
/// 用MD5加密後的字元串
public static string ToMD5(string str)
{
return System.Web.Security.FormsAuthentication.(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 = "105411248160006";
//商戶櫃台代碼 由建行統一分配,預設為000000000
objcbbText.POSID = "768362719";
//分行代碼 由建行統一指定
objcbbText.BRANCHID = "410000000";
// 定單號 由商戶提供,最長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 = "";
//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());
}
}
在這里大家一定要注意把 objcbbText.MAC = ToMD5(canshu.Trim()).ToLower().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;
}
if (user.AddAlipay(OfficeInfo.ofPara1, objalipay))
{
這一部分代碼是記錄日誌的,大家可以參考一下
我們現在只要運行程序就會出現如下界面所顯示的內容
下面的操作就是輸入你的卡號密碼就可以了,
轉賬成功後我們這一步的工作就算是做完了
㈡ 新開發的APP,帶有便民繳費功能,如何與銀行對接
新開發的APP,帶有便民交費功能,可以拿著身份證去銀行對接。