支付结果通知验签

目录

1、关于验签明文的说明

我行常用的报文格式如下:

http://www.merchant.com/path/WAPProcResult.dll?Succeed=x&CoNo=xxxxxx&BillNo=xxxxxx&Amount=xxxx.xx&Date=YYYYMMDD&MerchantPara=xxxx&Msg=xxxxx[&DiscountFlag=Y&DiscountAmt=xxxx.xx]&Signature=xxxxxxx

以上报文只有“商户在立减活动期”并且“用户享受了交易立减”时才会返回“[]”内的字段。没有参加立减活动的商户不会收到这两个参数。(注意:返回的报文中并不存在“[]”标记,在这里是用于向读者强调新增加的两个字段。)

请注意,在验签时除了Signature字段,其他参数都要作为验签时的明文要素输入(如使用本文中的api进行通知内容验证,则直接输入整个通知报文参数串),而参数个数可能会因为具体业务变化而不同,如以上立减相关的两个字段。

因此,建议商户直接截取整个报文参数串进行验签。此方法扩展性较好,如今后我行进行参数调整,也不再需要对验签逻辑做任何变化。

如商户采用参数拼接的方式,则使用以上例子中的参数顺序进行拼接,并且拼接前做好以上可选参数是否存在的判断。

2、DLL版

2.1 开发包引用说明

2.1.1 使用Dll形式的商户开发包

  • 把FirmClient.dll拷贝到系统目录下或者商户系统自己的目录中,在Windows 95/98/NT/2000中,系统目录位于<WinRoot>\system32。
  • 如果商户开发语言是C或C++:

1. 申明一个HMODULE型变量;

2. 调用系统函数::LoadLibrary加载FirmClient.dll;

3. 申明dll中的函数指针;

4. 调用系统函数::GetProcAddress取得函数指针的值;

5. 使用函数指针调用dll中相应的函数;

6. 完成任务后调用系统函数释放FirmClient.dll。

2.1.2. 使用Lib形式的商户开发包

Lib形式的商户开发包实际上只是对DLL开发包的一个输出函数包装,其真正实现部分还是在 DLL中。Lib开发包可以在C/C++程序中按Lib的方式直接加入工程,方便C/C++的开发者。

  • 把FirmClient.dll拷贝到系统目录下或者商户系统自己的目录中,在Windows 95/98/NT/2000中,系统目录位于\system32.
  • 在C/C++源文件中Include FirmClientAPI.h;
  • 给C/C++连接器指明FirmClient.lib的位置;
  • 调用FirmClientAPI.h 中函数;

2.1.3. DLL的其他使用形式

如果商户开发语言不是C或C++,例如 VB、Java,等等,参考相应语言中关于dll调用的说明。

2.2. 支付结果通知内容验证API

INET_STATUS CheckInfoFromBank(char* pszPublickeyFilePath, char* pszMsg)

参数说明:

pszPublickeyFilePath 输入,银行Publickey文件路径。例如”C:\\PubKey\\Public.key”。 该文件可以在招商银行网上商户登结账系统的录后的页面界面上下载。
pszMsg 输入,银行发来的通知信息,形如“Succeed=..&BillNo=..&Amount=..&Date=..&Msg=..&signature=..”
返回值 是否成功。如果成功,返回值为0。返回非0的值表示错误。

3、控件版

3.1 注册控件

使用控件版商户开发包之前,必须先注册商户开发包控件。注册步骤如下:

  • 把控件版商户开发包的FirmClient.DLL和CMBChina.DLL这2个文件,复制到同一个目录下(建议放到SYSTEM32下面)
  • 在命令行窗口,把当前工作目录转到控件版商户开发包所在的目录
  • 执行命令regsvr32 CMBChina.dll

注意

64位WINDOWS系统注意,必须把这两个文件放到系统的SYSWOW64目录下再注册。同时需要放开SYSWOW64文件夹(和下面所有文件)的执行权限,运行程序的用户(例如ASP.NET的用户默认用的是Network Service用户)必须拥有这个文件夹的执行权限。

3.2 支付结果通知内容验证API

exCheckInfoFromBank(pszPublickeyFilePath as String, pszMsg as String) as Integer

参数说明:

pszPublickeyFilePath 输入,银行Publickey文件路径。例如”C:\PubKey\Public.key”。该文件可以在招商银行网上商户登结账系统的录界后的页面上下载。
PszMsg 输入,银行发来的通知信息,形如“Succeed=..&BillNo=..&Amount=..&Date=..&Msg=..&signature=..”
返回值 是否成功。如果成功,返回值为0。返回非0的值表示错误。

4、Java版

4.1 使用Java版商户开发包前的准备工作

使用Java版商户开发包前,必须先做好以下工作:

  • 检查JDK版本。商户开发包要求JDK版本为1.2.2以上。
  • 把开发包的类加入到CLASSPATH
  • 更新JRE/JDK的证书库。请确保JAVA自带的证书库文件是最新的。比较稳妥的方法是,下载最新版的JRE,从里面提取出CaCerts文件,替换正在使用中系统的相应文件。更新了证书库后,可能还需要重启一次机器,才能生效。

4.2 支付结果通知内容验证API

cmb.netpayment.Security

(1)构造方法。

public Security(String strPublicKeyFilePath)

参数说明:

strPublicKeyFilePath Input.数字签名公钥文件路径名。例如”C:\\PubKey\\Public.key”。可以从招商银行网站商户登录后的页面下载该文件,或向当地分行索取。

(2)检验数字签名。

public boolean checkInfoFromBank(byte[] baMessage)

参数说明:

baMessage 从银行返回的信息。类似“Succeed=..&BillNo=..&Amount=..&Date=..&Msg=..&signature=..”
返回值 返回值指明银行通知真实与否。

说明:

某些Web服务器可以直接得到银行通知byte[]形式的参数,请用该方法检验数字签名。

注意:

从字符串转换为byte时,编码问题可能会引起校验失败。

如果从字符串转换成byte[]类型,则必须注意,应该用str.getByte(“GB2312”)。其他编码方式会导致在转换过程中改变数据,从而使数字签名校验失败。

相关问题

我要提问    |    历史提问查询


*请输入您的问题:(500个字以内)

*请输入您的昵称:(10个字以内)

 

*请输入您的邮箱(查询依据):