你的位置:首页 > 软件开发 > ASP.net > 工行在线支付接口实战开发流程及源码

工行在线支付接口实战开发流程及源码

发布时间:2016-08-22 14:00:06
作为刚毕业的我来说,第一次开发在线支付功能,还是工行的,真的是被坑死了,和工行的技术真的是太难沟通了,而且那个技术明显是他们接口问题还死不承认,总是让我细读开发文档,结果我代码什么都没改,他调试接口后可以运行支付了,他无话可说……希望这 ...

作为刚毕业的我来说,第一次开发在线支付功能,还是工行的,真的是被坑死了,和工行的技术真的是太难沟通了,而且那个技术明显是他们接口问题还死不承认,总是让我细读开发文档,结果我代码什么都没改,他调试接口后可以运行支付了,他无话可说……希望这篇能让一些人少走一些弯路。进入正题:

一、  前期准备

  1. 支付组件注册(PS:当时工行技术根本没有给我这个组件,被坑了,当时还想骂那个技术一下,签名什么的,难道我随便按照自己的想法签一个也可以?后来终于给我了)

组件注册说明

一、API配置说明:

1.将ICBCEBankUtil.dll和infosecapi.dll两个dll文件拷贝到系统system32目录下(其中,如果是64位系统,则拷贝到SysWOW64目录下);

2.打开DOS窗口,进入system32目录/SysWOW64目录;

3.运行“regsvr32 ICBCEBankUtil.dll”命令注册控件;

 

二、函数说明:

1、初始化

init(

BSTR certFN,银行证书文件名

BSTR certFNM,商户证书文件名

BSTR keyFN,私钥文件名

BSTR key私钥保护口令

)

返回值:

-100:银行证书文件名传递错

-101:商户证书文件名传递错

-102:私钥文件名传递错

-103:私钥保护口令传递错

-110:打开银行证书文件错

-111:打开商户证书文件错

-112:打开私钥文件错

2、签名

signC(

BSTR src,明文字符串

     int srcLen,明文长度

     )

返回值:

如果成功则返回BASE64编码后的签名串,否则返回空串

如果返回空串,可调用getRC取得错误码

3、获取错误码(只在出错时有效)

getRC

返回值

        -100:明文字符串传递错误

        -1:明文错误

-2:私钥错 

-3:私钥解密错

-4:私钥保护口令错

4、验证签名

verifySignC(

BSTR src,明文字符串

int srcLen,明文字符串长度

BSTR sSrc,签名BASE64编码字符串

int sSrcLen签名BASE64编码字符串长度

)

返回值:

0:成功

-1:验证失败

-2:解码失败

-100:明文字符串传递有误

-101:签名字符串传递有误

5、获取证书

getCert(

int which证书类型:0银行证书,1商户证书

)

返回值:BASE64编码后的证书

注册好以后将infosecapi.dll引用到项目中。

2.证书引用

 然后将public.crt、商户.crt、商户.key 这三个文件放到项目某个文件夹下

二、      开发阶段

  1. 首先必须细读:《中国工商银行网上银行新B2C在线支付接口说明V1.0.0.11》这个文档(PS:工行人员当时没有给我这个文档,打电话过去问技术,技术让我细读这个文档,根本没有这个文档,还说他发给客户了的,问客户也说没有发过,当时真的是被坑好多,后来网上找到了一个)。
  2. 以下是源码:
/// <summary>  /// 工商银行签名验证类  /// </summary>  public class ICBCTest  {    string strCertFN = @"f:\aa\ahhfycYQHLTEST.pfx";    string strCertFNM = @"f:\aa\ahhfyc.crt";    string strKeyFN = @"f:\aa\ahhfyc.key";     //string strCertFN = System.Web.HttpContext.Current.Server.MapPath(@"user\user.crt");    //string strCertFNM = System.Web.HttpContext.Current.Server.MapPath(@"user\user.crt");    //string strKeyFN = System.Web.HttpContext.Current.Server.MapPath(@"user\user.key");    //string strKey = "12345678";    string strKey = "12345678";     /// <summary>    /// 获取工商银行验证信息    /// </summary>    /// <returns></returns>    public ICBC GetCheckInfo(ICBC argIcbc)    {      string strMerSignMsg = string.Empty;      B2CUtil icbcObj = new B2CUtil();       if (icbcObj.init(strCertFN, strCertFNM, strKeyFN, strKey) == 0)      {        //对订单数据进行签名,得到订单签名数据 MerSignMsg        argIcbc.MerSignMsg = icbcObj.signC(argIcbc.TranData, argIcbc.TranData.Length);         //证书公钥  商户用二进制方式读取证书公钥文件后,进行BASE64编码后产生的字符串        argIcbc.MerCert = icbcObj.getCert(1);        argIcbc.TranData = Base64Encode(argIcbc.TranData);      }      else      {        return null;      }      return argIcbc;    }     /// <summary>    /// 获取工商银行验证信息    /// </summary>    /// <returns></returns>    public ICBC GetCheckReturnInfo(ICBC argIcbc)    {      string strMerSignMsg = string.Empty;      B2CUtil icbcObj = new B2CUtil();       if (icbcObj.init(strCertFN, strCertFNM, strKeyFN, strKey) == 0)      {        argIcbc.TranData = Base64Decode(argIcbc.TranData);         if (icbcObj.verifySignC(argIcbc.TranData, argIcbc.TranData.Length, argIcbc.MerSignMsg, argIcbc.MerSignMsg.Length) == 0) //判断验证银行签名是否成功        {          argIcbc.IsCheck = true;        }        else          argIcbc.IsCheck = true;      }      else      {        argIcbc.IsCheck = false;      }      return argIcbc;    }     ///<summary>     ///转成Base64形式的System.String     ///</summary>     ///<param name="str"></param>     ///<returns></returns>     public static string Base64Encode(string str)    {       byte[] b = System.Text.Encoding.Default.GetBytes(str);       //转成Base64形式的System.String       return Convert.ToBase64String(b);     }     public static string Base64Encode(Byte[] b)    {       ///转成Base64形式的System.String       return Convert.ToBase64String(b);     }     ///<summary>     /// Base64转回到原来的 System.String     ///</summary>     ///<param name="str"></param>     ///<returns></returns>     public static string Base64Decode(string str)    {       byte[] c = Convert.FromBase64String(str);       //转回到原来的 System.String       return System.Text.Encoding.Default.GetString(c);     }  }

原标题:工行在线支付接口实战开发流程及源码

关键词:接口

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。