网上支付一般分俩种方式,一种是直接与银行对接,一种是使用第三方支付平台与银行对接,与银行直接对接固然好,安全系数比较高,但是比较麻烦,尤其是当你资金不是很充沛的时候银行都不会怎么在意你,而且要是你使用其他工具与银行对接,当银行升级系统或者做了某些修改后你也得坐出相应的修改,十分麻烦,因此很多商户都选择第二种方式,其优点也有很多种,尤其胜在方便,而且通过第三方平台可以一次性和多个银行打交道,大大节省了时间,当然使用的时候也会收取一定的费用,大约为1%,收商户的钱,不收支付顾客的钱,下面来看代码
yeepay.properties:
#商户
#商户编号
p1_MerId = 10001126856
#商户密匙
keyValue=69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl
#支付成功重定向地址
p8_Url = http://localhost:80/MyYeepayDemo/PayEndServlet
工具类:
这个工具其实使用的是MD5加密,该类由易宝支付公司编写(HMACMD5 是从 MD5 哈希函数构造的一种键控哈希算法,被用作基于哈希的消息验证代码 (HMAC)。此 HMAC 进程将密钥与消息数据混合,使用哈希函数对混合结果进行哈希计算,将所得哈希值与该密钥混合,然后再次应用哈希函数。输出的哈希值长度为 128 位。 from 百度百科)
package util;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
/**
* 加密工具类
*
* @author Lilanqi
*/
public class DigestUtil {
private static String ENCODING_CHARSET = "UTF-8";
/**
* @param aValue 加密的原文
* @param aKey 加密秘钥
* @return
*/
public static String hmacSign(String aValue, String aKey) {
byte k_ipad[] = new byte[64];
byte k_opad[] = new byte[64];
byte keyb[];
byte value[];
try {
keyb = aKey.getBytes(ENCODING_CHARSET);
value = aValue.getBytes(ENCODING_CHARSET);
} catch (UnsupportedEncodingException e) {
keyb = aKey.getBytes();
value = aValue.getBytes();
}
Arrays.fill(k_ipad, keyb.length, 64, (byte) 54);
Arrays.fill(k_opad, keyb.length, 64, (byte) 92);
for (int i = 0; i < keyb.length; i++) {
k_ipad[i] = (byte) (keyb[i] ^ 0x36);
k_opad[i] = (byte) (keyb[i] ^ 0x5c);
}
MessageDigest md = null;
try {
md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
return null;
}
md.update(k_ipad);
md.update(value);
byte dg[] = md.digest();
md.reset();
md.update(k_opad);
md.update(dg, 0, 16);
dg = md.digest();
return toHex(dg);
}
private static String toHex(byte input[]) {
if (input == null)
return null;
StringBuffer output = new String