packagecom.kdyzm.utils;importjava.io.UnsupportedEncodingException;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;importjava.util.Arrays;public classPaymentUtil {private static String encodingCharset = "UTF-8";/*** 生成hmac方法
*
*@paramp0_Cmd 业务类型
*@paramp1_MerId 商户编号
*@paramp2_Order 商户订单号
*@paramp3_Amt 支付金额
*@paramp4_Cur 交易币种
*@paramp5_Pid 商品名称
*@paramp6_Pcat 商品种类
*@paramp7_Pdesc 商品描述
*@paramp8_Url 商户接收支付成功数据的地址
*@paramp9_SAF 送货地址
*@parampa_MP 商户扩展信息
*@parampd_FrpId 银行编码
*@parampr_NeedResponse 应答机制
*@paramkeyValue 商户密钥
*@return
*/
public staticString buildHmac(String p0_Cmd,String p1_MerId,
String p2_Order, String p3_Amt, String p4_Cur,String p5_Pid, String p6_Pcat,
String p7_Pdesc,String p8_Url, String p9_SAF,String pa_MP,String pd_FrpId,
String pr_NeedResponse,String keyValue) {
StringBuilder sValue= newStringBuilder();//业务类型
sValue.append(p0_Cmd);//商户编号
sValue.append(p1_MerId);//商户订单号
sValue.append(p2_Order);//支付金额
sValue.append(p3_Amt);//交易币种
sValue.append(p4_Cur);//商品名称
sValue.append(p5_Pid);//商品种类
sValue.append(p6_Pcat);//商品描述
sValue.append(p7_Pdesc);//商户接收支付成功数据的地址
sValue.append(p8_Url);//送货地址
sValue.append(p9_SAF);//商户扩展信息
sValue.append(pa_MP);//银行编码
sValue.append(pd_FrpId);//应答机制
sValue.append(pr_NeedResponse);returnPaymentUtil.hmacSign(sValue.toString(), keyValue);
}/*** 返回校验hmac方法
*
*@paramhmac 支付网关发来的加密验证码
*@paramp1_MerId 商户编号
*@paramr0_Cmd 业务类型
*@paramr1_Code 支付结果
*@paramr2_TrxId 易宝支付交易流水号
*@paramr3_Amt 支付金额
*@paramr4_Cur 交易币种
*@paramr5_Pid 商品名称
*@paramr6_Order 商户订单号
*@paramr7_Uid 易宝支付会员ID
*@paramr8_MP 商户扩展信息
*@paramr9_BType 交易结果返回类型
*@paramkeyValue 密钥
*@return
*/
public static booleanverifyCallback(String hmac, String p1_MerId,
String r0_Cmd, String r1_Code, String r2_TrxId, String r3_Amt,
String r4_Cur, String r5_Pid, String r6_Order, String r7_Uid,
String r8_MP, String r9_BType, String keyValue) {
StringBuilder sValue= newStringBuilder();//商户编号
sValue.append(p1_MerId);//业务类型
sValue.append(r0_Cmd);//支付结果
sValue.append(r1_Code);//易宝支付交易流水号
sValue.append(r2_TrxId);//支付金额
sValue.append(r3_Amt);//交易币种
sValue.append(r4_Cur);//商品名称
sValue.append(r5_Pid);//商户订单号
sValue.append(r6_Order);//易宝支付会员ID
sValue.append(r7_Uid);//商户扩展信息
sValue.append(r8_MP);//交易结果返回类型
sValue.append(r9_BType);
String sNewString=PaymentUtil.hmacSign(sValue.toString(), keyValue);returnsNewString.equals(hmac);
}/***@paramaValue
*@paramaKey
*@return
*/
public staticString hmacSign(String aValue, String aKey) {byte k_ipad[] = new byte[64];byte k_opad[] = new byte[64];bytekeyb[];bytevalue[];try{
keyb=aKey.getBytes(encodingCharset);
value=aValue.getBytes(encodingCharset);
}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();returntoHex(dg);
}public static String toHex(byteinput[]) {if (input == null)return null;
StringBuffer output= new StringBuffer(input.length * 2);for (int i = 0; i < input.length; i++) {int current = input[i] & 0xff;if (current < 16)
output.append("0");
output.append(Integer.toString(current,16));
}returnoutput.toString();
}/***
*@paramargs
*@paramkey
*@return
*/
public staticString getHmac(String[] args, String key) {if (args == null || args.length == 0) {return (null);
}
StringBuffer str= newStringBuffer();for (int i = 0; i < args.length; i++) {
str.append(args[i]);
}return(hmacSign(str.toString(), key));
}/***@paramaValue
*@return
*/
public staticString digest(String aValue) {
aValue=aValue.trim();bytevalue[];try{
value=aValue.getBytes(encodingCharset);
}catch(UnsupportedEncodingException e) {
value=aValue.getBytes();
}
MessageDigest md= null;try{
md= MessageDigest.getInstance("SHA");
}catch(NoSuchAlgorithmException e) {
e.printStackTrace();return null;
}returntoHex(md.digest(value));
}//public static void main(String[] args) {//System.out.println(hmacSign("AnnulCard1000043252120080620160450.0http://localhost/SZXpro/callback.asp杩?4564868265473632445648682654736324511","8UPp0KE8sq73zVP370vko7C39403rtK1YwX40Td6irH216036H27Eb12792t"));//}
}