您现在的位置: 365建站网 > 365文章 > 银联在线支付ASP代码不支持64位系统的解决办法

银联在线支付ASP代码不支持64位系统的解决办法

文章来源:365jz.com     点击数:491    更新时间:2011-06-18 12:08   参与评论

最近更换了公司的服务器,系统从原来的32位2003换成了64位2008R2。网站提供在线支付功能(用ASP开发的),结果银联在线支付(Chinapay)模块不能使用了。后来咨询Chinapay,他们给的答案是,ASP需要调用的DLL文件只支持32操作系统,不支持64位,如果要在64位上使用,只能用.NET方式......

要是把整个支付模块都换成.NET,不是马上能做好的,毕竟还有快钱、支付宝等等。后来和同事商量一下,Chinapay ASP模块其实只有签名模块不能运行,其余的程序其实都是正常的。那么,把这一块功能单独用.NET web services来做,然后在ASP里面调用,这样不是解决了吗。

部分ASP代码如下:

</>code

  1. '256字节长的ASCII码,为此次交易提交关键数据的数字签名,必填
    '
    ===============================就是这一块有问题=============================
    '
    Set NPC = Server.CreateObject("CPNPC.NPC")
    '
    ChkValue=NPC.signData(MerId,MerId & OrdId & TransAmt & CuryId & TransDate & TransType & Priv1)
    '
    ===============================就是这一块有问题=============================

    '把上面有问题的部分替换成调用.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,"&lt;","<",1,-1,1)
    xmlStr
    = Replace(xmlStr,"&gt;",">",1,-1,1)
    ChkValue
    = xmlDOC.documentElement.childNodes.item(0).text
    else
    Response.Write
    "数据校验失败,请重试。错误代码:" & objHTTP.StatusText
    Response.End()
    end if

web服务Chinapay.cs部分代码

</>code

  1. 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 从脚本中调用此 Web 服务,请取消对下行的注释。
    // [System.Web.Script.Services.ScriptService]
    public class Chinapay : System.Web.Services.WebService {

    public Chinapay () {

    //如果使用设计的组件,请取消注释以下行
    //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;
    }

    }

这样处理后,页面果然正常运行了,而且返回的数据一切正常。说起来,上面其实就是使用ASP来调用.NET的web services。当然,以上代码还没有认真处理,写出来希望对大家有点帮助。

新手,正在学习.NET,共勉!

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (491人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号