最近更換了公司的服務(wù)器,系統(tǒng)從原來的32位2003換成了64位2008R2。網(wǎng)站提供在線支付功能(用ASP開發(fā)的),結(jié)果銀聯(lián)在線支付(Chinapay)模塊不能使用了。后來咨詢Chinapay,他們給的答案是,ASP需要調(diào)用的DLL文件只支持32操作系統(tǒng),不支持64位,如果要在64位上使用,只能用.NET方式......
要是把整個支付模塊都換成.NET,不是馬上能做好的,畢竟還有快錢、支付寶等等。后來和同事商量一下,Chinapay ASP模塊其實只有簽名模塊不能運行,其余的程序其實都是正常的。那么,把這一塊功能單獨用.NET web services來做,然后在ASP里面調(diào)用,這樣不是解決了嗎。
部分ASP代碼如下:
'256字節(jié)長的ASCII碼,為此次交易提交關(guān)鍵數(shù)據(jù)的數(shù)字簽名,必填
'===============================就是這一塊有問題=============================
'Set NPC = Server.CreateObject("CPNPC.NPC")
'ChkValue=NPC.signData(MerId,MerId & OrdId & TransAmt & CuryId & TransDate & TransType & Priv1)
'===============================就是這一塊有問題=============================
'把上面有問題的部分替換成調(diào)用.net web services
Set objHTTP = Server.CreateObject("MSXML2.XMLHTTP")
Set xmlDOC =Server.CreateObject("MSXML.DOMDocument")
strWebserviceURL="http://xxx.com/Service/Chinapay.asmx/GetChkValue"
tmp="MerId="&MerId&"&OrdId="&OrdId&"&TransAmt="&TransAmt&"&CuryId="&CuryId&"&TransDate="&TransDate&"&TransType="&TransType&"&Priv1="&Priv1
objHTTP.Open "POST", strWebserviceURL, False
objHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.Send(tmp)
bOK = xmlDOC.load(objHTTP.responseXML)
if objHTTP.Status=200 then
xmlStr = xmlDOC.xml
xmlStr = Replace(xmlStr,"<","<",1,-1,1)
xmlStr = Replace(xmlStr,">",">",1,-1,1)
ChkValue = xmlDOC.documentElement.childNodes.item(0).text
else
Response.Write "數(shù)據(jù)校驗失敗,請重試。錯誤代碼:" & objHTTP.StatusText
Response.End()
end if
web服務(wù)Chinapay.cs部分代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
/// <summary>
///Chinapay 的摘要說明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
//若要允許使用 ASP.NET AJAX 從腳本中調(diào)用此 Web 服務(wù),請取消對下行的注釋。
// [System.Web.Script.Services.ScriptService]
public class Chinapay : System.Web.Services.WebService {
public Chinapay () {
//如果使用設(shè)計的組件,請取消注釋以下行
//InitializeComponent();
}
[WebMethod]
public string GetChkValue(string MerId, string OrdId, string TransAmt, string CuryId, string TransDate, string TransType, string Priv1)
{
string ChkValue = String.Empty;
string plain = String.Empty;
//測試是否有值
plain = MerId + OrdId + TransAmt + CuryId + TransDate + TransType + Priv1;
try
{
ChkValue = ChinapaySignData.sign(MerId, plain);
if (ChkValue == null || ChkValue.Length != 256)
{
return "error";
}
}
catch
{
return "error";
}
return ChkValue;
}
}
這樣處理后,頁面果然正常運行了,而且返回的數(shù)據(jù)一切正常。說起來,上面其實就是使用ASP來調(diào)用.NET的web services。當(dāng)然,以上代碼還沒有認(rèn)真處理,寫出來希望對大家有點幫助。
新手,正在學(xué)習(xí).NET,共勉!
如對本文有疑問,請?zhí)峤坏浇涣髡搲瑥V大熱心網(wǎng)友會為你解答?。?點擊進(jìn)入論壇