U付

签名机制

需要参与签名的参数

在请求参数列表中,除去sign、sign_type 两个参数外,其他需要使用到的参数皆是要签名的参数。 在通知返回参数列表中,除去sign、sign_type两个参数外,凡是通知返回回来的参数皆是要签名的参数。

生成待签名字符串

对于如下的参数数组:

string[] parameters={
    "service= mer_cancel ",
    " charset =GBK",
    " mer_id =9996",
    "version =4.0",
    "res_format=HTML",
    "order_id =123456789 ",
    "mer_date =20110101",
" amount =500"
};

对数组里的每一个值从 a 到 z 的顺序排序,若遇到相同首字母,则看第二个字母,以此类推。 (sign、sign_type不参与签名) 对数组里的每一个值从 a 到 z 的顺序排序,若遇到相同首字母,则看第二个字母,以此类推。 排序完成之后,再把所有数组值以“&”字符连接起来,如: amount=500&charset=GBK&mer_date=20110101&mer_id=9996&order_id=123456789&res_format=HTML&service=mer_cancel&version=4.0 这串字符串便是待签名字符串。

API方法说明

一、生成请求联动的URL(商户--联动)

public static ReqData ReqDataByGet(Object obj) throws ReqDataException    方法所属类:com.umpay.api.paygate.v40. Mer2Plat_v40
输入参数:Map,为商户请求联动的参数
输出参数:ReqData,为请求联动的对象,该对象包含的url字段为请求联动平台的完整url(已经完成签名及url编码)
抛出异常:ReqDataException,为Exception的子类,表示验证字段规则或者数据签名发生异常,调用方法需要捕获或抛出。

二、解析联动平台同步响应商户数据

public static Map getResData(String html)throws RetDataException    方法所属类:com.umpay.api.paygate.v40. Plat2Mer_v40
输入参数:html,为联动响应商户后端请求的完整html串。
输出参数:Map,为联动平台返回商户的数据,如果没有抛出异常,代表验签成功,否则失败
抛出异常:RetDataException,为Exception的子类,表示校验失败,调用方法需要捕获或抛出

三、接收平台支付结果通知

public static Map getPlatNotifyData(Object obj) throws VerifyException
方法所属类:com.umpay.api.paygate.v40. Plat2Mer_v40
输入参数:Map对象,为商户接收到的平台通知数据
输出参数:Map对象,为商户接收到的平台通知数据,完成验签
抛出异常:VerifyException,为Exception的子类,表示验签失败,调用方法需要捕获或抛出。

四、商户响应平台的支付结果通知

public static String merNotifyResData(Object obj)throws ParameterCheckException
方法所属类:com.umpay.api.paygate.v40. Mer2Plat_v40
输入参数:Map对象,为商户响应平台的数据
输出参数:String,为商户响应平台放入META标签中的数据
抛出异常:ParameterCheckException,为Exception的子类,表示验签失败,调用方法需要捕获或抛出。

RSA签名

在签名时,需要商户私钥参与签名;在签名前加密数据时,需要平台公钥进行加密。商户使用的私钥与公钥皆是平台内部生成一套对应文件,联动优势技术人员会在平台配置商户的公钥,并将商户的私钥及平台的公钥发送给商户方。因此,在签名时,商户要用到的是商户的私钥及平台的公钥。

请求时签名

当拿到请求时的待签名字符串后,把待签名字符串与客户的私钥一同放入RSA的签名函数中进行签名运算,从而得到签名结果字符串。

当遇到需要加密的参数,需要先加密,后签名,再做url编码,此过程我方已封装入了接口,无需商户进行分解操作,商户方面需要保证数据在加密前能够正常。

通知返回时验证签名

当获得到通知返回时的待签名字符串后,把待签名字符串、平台提供的公钥、平台通知返回参数中的参数 sign 的值三者一同放入RSA的签名函数中进行非对称的签名运算,来判断签名是否验证通过。