测试类:Test

package fuiou.h5;

import java.io.IOException;
import net.sf.json.JSONObject;
import fuiou.sdk.CommonReq;
import fuiou.sdk.QueryOrderReq;

public class Test {

    //测试环境查询接口地址
    public static String url = "https://aggpc-test.fuioupay.com/getOpenid.fuiou"; 
    //生产地址
    //public static String url = "https://aggpc.fuioupay.com/getOpenid.fuiou"; 
    //测试环境商户号
     public static String mchnt_cd = "0001000F0040992";
     //测试环境商户公钥//如秘钥不对,请联系富友技术人员重新提供测试秘钥
     public static String mchnt_pub_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTK/DZ0Ve73u2ORRAYrpv07FNHyuTb87xabGMTwEIQV2PhDdAYtiRIO/dAtZ45PUN1N+rtiQQxwIgyKJpYIesFpCbBZ+3YIVf3wlkl9VVSfnUSDWcteN9n0WifBqrKbzJ3gaXi4wXveCMJViqTfgDkfgTV/EC/7h5nwj5VUF6LPQIDAQAB";
     //测试环境商户私钥
     public static String mchnt_pri_key = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJMr8NnRV7ve7Y5FEBium/TsU0fK5NvzvFpsYxPAQhBXY+EN0Bi2JEg790C1njk9Q3U36u2JBDHAiDIomlgh6wWkJsFn7dghV/fCWSX1VVJ+dRINZy1432fRaJ8GqspvMneBpeLjBe94IwlWKpN+AOR+BNX8QL/uHmfCPlVQXos9AgMBAAECgYAzqbMs434m50UBMmFKKNF6kxNRGnpodBFktLO7FTybu/HF6TFp21a1PMe5IYhfk5AAsBZ6OCUOygWFhhdYZN+5W+dweF3kp1rLE4y5CjwqNlk/g22TAndf9znh/ltHFLvITToqu/eh/34tE1gyNxRbsi1olw/1wv8ZRjM3vtM9QQJBANvNwFq+CJHUyFzkXQB7+ycQFnY8wDq8Uw2Hv9ZMjgIntH7FSlJtdu5mAYPPo6f74slO5tFUMNP7EVppqsjYaNkCQQCraD6iKHo+OIlvvYIKiMXatJGD7N1GNhq5CrhUNPWLHwv/Ih2D3JJdF8IUZOPIJfUxTfM2fZYI+EVdsv6s4RcFAkAGjNYbnighOGcUJZYD6q3sVxVkRqEv3ubWs2HrH/Lna4l8caKqXCq8JfwLkod8/QugFiLYwBqIZqX4vMdjHtfZAkBsAl9dbWZCaPvpxp/4JWGPxDLhz9NLV/KU4bVvkoObq++yUHwKyGYOdVcd5MlIKOsNq5Hzp0Vw14lWVuF2bMxFAkBuNrZksvUULNIaWDKd4rQ6GVzUxXuIZW0ZE6atHYDiXPB4jVAjKRtLxZAV1qH9cr1zNJlcg+RbGYUdF9t4A9n5";
     //测试环境富友公钥
     public static String ins_pub_key   = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCKPD4f/3xMjPuHcQSGxPIYZNgF2i0sJhzmKpN3dmzhbKH/1nG+aXUJDhswyitzrI+U0ic/GL/IWB1wQ3noWuLFr8jDSGafenTFiY9c0H9ZAEfqW/oywx95G5JWu5y/ffp4yCmlt8k5kHO/4kE1qnJcGaQlb6/+7t3MPSV5ybmBZwIDAQAB";

    public static void main(String[] args) {  
        try {
            postRequestTest();
        } catch (IOException e) {
            e.printStackTrace();
        }  
    }    

    private static void postRequestTest() throws IOException {  
        //查询
        GetOpenidReqData query = new QueryOrderReq();
        query.setMchnt_cd("0001000F0040992");
        query.setRedirect_uri("http://www-2.wg.fuioupay.com:13195/pay_test/callback.jsp?a=1");
        query.setVer("1.0.0");
        JSONObject jsonParam = JSONObject.fromObject(query); 
        //用富友公钥加密得到密文。
        String message = RsaUtil.encryptByRsaPub(jsonParam.toString(), ins_pub_key, "GBK");

        CommonReq req = new CommonReq();
        req.setMchnt_cd("0001000F0040992");
        req.setMessage(message);

        JSONObject reqJson = JSONObject.fromObject(req); 
        JSONObject respJson = HttpRequestUtil.httpPost(url, reqJson);
        System.out.println("返回的报文=="+respJson);
        message = respJson.getString("message");
        //商户私钥解密出来密文
        String plain = RsaUtil.decryptByRsaPri(message, ins_pub_key, "GBK");
        System.out.println("商户私钥解密出来的明文plain=="+plain);
    }  
}

RsaUtil加密类

import java.security.Key; import java.security.KeyFactory; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import javax.crypto.Cipher; import org.apache.commons.codec.binary.Base64;

public class RsaUtil {

private static final String KEY_ALGORITHM = "RSA";
private static final String ALGORITHM_SHA1 = "SHA1withRSA";
private static final String ALGORITHM_SHA2 = "SHA256withRSA";
private static final String ALGORITHM_MD5RSA = "MD5WithRSA";

static {
    try {
        java.security.Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/** SHA1withRSA     */
public static String sign2Base64(String base64PriRsa, String inputStr) {
    return sign2Base64ByAlg(base64PriRsa, inputStr, ALGORITHM_SHA1, "GBK");
}

/** SHA256withRSA */
public static String sign2Base64BySha2(String base64PriRsa, String inputStr) {
    return sign2Base64ByAlg(base64PriRsa, inputStr, ALGORITHM_SHA2,"GBK");
}
/** MD5WithRSA  */
public static String sign2Base64ByMd5Rsa(String base64PriRsa, String inputStr) {
    return sign2Base64ByAlg(base64PriRsa, inputStr, ALGORITHM_MD5RSA,"GBK");
}

/** SHA1withRSA     */
public static String sign2Base64(String base64PriRsa, String inputStr,String charset) {
    return sign2Base64ByAlg(base64PriRsa, inputStr, ALGORITHM_SHA1,charset);
}

/** SHA256withRSA */
public static String sign2Base64BySha2(String base64PriRsa, String inputStr,String charset) {
    return sign2Base64ByAlg(base64PriRsa, inputStr, ALGORITHM_SHA2,charset);
}
/** MD5WithRSA  */
public static String sign2Base64ByMd5Rsa(String base64PriRsa, String inputStr,String charset) {
    return sign2Base64ByAlg(base64PriRsa, inputStr, ALGORITHM_MD5RSA,charset);
}

private static String sign2Base64ByAlg(String base64PriRsa, String inputStr, String algorithm,String charset) {
    try {
        PrivateKey privateKey = genPrivateKey(base64PriRsa);
        Signature signature = Signature.getInstance(algorithm, "BC");
        signature.initSign(privateKey);
        signature.update(inputStr.getBytes(charset));
        return Base64.encodeBase64String(signature.sign());
    } catch (Exception e) {
        e.printStackTrace();
        throw new IllegalArgumentException("");
    }
}

/**
 * SHA1withRSA
 * @return
 */
public static boolean verifySign(String base64PubRsa, String src, String base64SignValue) {
    return verifySignByAlg(base64PubRsa, src, base64SignValue, ALGORITHM_SHA1, "GBK");
}

/** 
 * SHA256withRSA 
 * @return
 */
public static boolean verifySignBySha2(String base64PubRsa, String src, String base64SignValue) {
    return verifySignByAlg(base64PubRsa, src, base64SignValue, ALGORITHM_SHA2, "GBK");
}

/** 
 * MD5WithRSA  
 * @return
 */
public static boolean verifySignByMd5Rsa(String base64PubRsa, String src, String base64SignValue) {
    return verifySignByAlg(base64PubRsa, src, base64SignValue, ALGORITHM_MD5RSA, "GBK");
}

/**
 * SHA1withRSA
 * @return
 */
public static boolean verifySign(String base64PubRsa, String src, String base64SignValue,String charset) {
    return verifySignByAlg(base64PubRsa, src, base64SignValue, ALGORITHM_SHA1,charset);
}

/** SHA256withRSA
 *  @return
 */
public static boolean verifySignBySha2(String base64PubRsa, String src, String base64SignValue,String charset) {
    return verifySignByAlg(base64PubRsa, src, base64SignValue, ALGORITHM_SHA2,charset);
}

/**MD5WithRSA  */
public static boolean verifySignByMd5Rsa(String base64PubRsa, String src, String base64SignValue,String charset) {
    return verifySignByAlg(base64PubRsa, src, base64SignValue, ALGORITHM_MD5RSA,charset);
}

private static boolean verifySignByAlg(String base64PubRsa, String src, String base64SignValue, String algorithm,String charset) {
    try {
        PublicKey publicKey = genPublicKey(base64PubRsa);
        Signature signature = Signature.getInstance(algorithm, "BC");
        signature.initVerify(publicKey);
        signature.update(src.getBytes(charset));
        return signature.verify(Base64.decodeBase64(base64SignValue));
    } catch (Exception e) {
        e.printStackTrace();
        throw new IllegalArgumentException("RSA异常");
    }
}

private static PrivateKey genPrivateKey(String base64Rsa) {
    try {
        KeyFactory kf = KeyFactory.getInstance(KEY_ALGORITHM, "BC");
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(base64Rsa));
        return kf.generatePrivate(keySpec);
    } catch (Exception e) {
        e.printStackTrace();
        throw new IllegalArgumentException("RSA异常");
    }
}

private static PublicKey genPublicKey(String base64Rsa) {
    try {
        KeyFactory kf = KeyFactory.getInstance(KEY_ALGORITHM, "BC");
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.decodeBase64(base64Rsa));
        return kf.generatePublic(keySpec);
    } catch (Exception e) {
        e.printStackTrace();
        throw new IllegalArgumentException("RSA异常");
    }
}

public static String convertPubRsaFile2Str(String fileStr){
    PublicKey pk = genPublicKey(fileStr);
    return Base64.encodeBase64String(pk.getEncoded());
}

public static String convertPriRsaFile2Str(String fileStr){
    PrivateKey pk = genPrivateKey(fileStr);
    return Base64.encodeBase64String(pk.getEncoded());
}



public static String encryptByRsaPub(String src, String base64PubRsa) {
    try {
        PublicKey publicKey = genPublicKey(base64PubRsa);
        byte[] encryptBytes = encryptByKey(src.getBytes("GBK"), publicKey);
        return Base64.encodeBase64String(encryptBytes);
    } catch (Exception e) {
        e.printStackTrace();
        throw new IllegalArgumentException("RSA异常");
    }
}

public static String encryptByRsaPub(String src, String base64PubRsa,String charset) {
    try {
        PublicKey publicKey = genPublicKey(base64PubRsa);
        byte[] encryptBytes = encryptByKey(src.getBytes(charset), publicKey);
        return Base64.encodeBase64String(encryptBytes);
    } catch (Exception e) {
        e.printStackTrace();
        throw new IllegalArgumentException("RSA异常");
    }
}

public static String encryptByRsaPri(String src, String base64PubRsa) {
    try {
        PrivateKey privateKey = genPrivateKey(base64PubRsa);
        byte[] encryptBytes = encryptByKey(src.getBytes("GBK"), privateKey);
        return Base64.encodeBase64String(encryptBytes);
    } catch (Exception e) {
        e.printStackTrace();
        throw new IllegalArgumentException("RSA异常");
    }
}

public static String encryptByRsaPri(String src, String base64PubRsa,String charset) {
    try {
        PrivateKey privateKey = genPrivateKey(base64PubRsa);
        byte[] encryptBytes = encryptByKey(src.getBytes(charset), privateKey);
        return Base64.encodeBase64String(encryptBytes);
    } catch (Exception e) {
        e.printStackTrace();
        throw new IllegalArgumentException("RSA异常");
    }
}

public static String decryptByRsaPri(String base64Src, String base64PriRsa) {
    try {
        PrivateKey privateKey = genPrivateKey(base64PriRsa);
        return new String(decryptKey(Base64.decodeBase64(base64Src), privateKey), "GBK");
    } catch (Exception e) {
        e.printStackTrace();
        throw new IllegalArgumentException("RSA异常");
    }
}

public static String decryptByRsaPri(String base64Src, String base64PriRsa,String charset) {
    try {
        PrivateKey privateKey = genPrivateKey(base64PriRsa);
        return new String(decryptKey(Base64.decodeBase64(base64Src), privateKey), charset);
    } catch (Exception e) {
        e.printStackTrace();
        throw new IllegalArgumentException("RSA异常");
    }
}

public static String decryptByRsaPub(String base64Src, String base64PriRsa) {
    try {
        PublicKey publicKey = genPublicKey(base64PriRsa);
        return new String(decryptKey(Base64.decodeBase64(base64Src), publicKey), "GBK");
    } catch (Exception e) {
        e.printStackTrace();
        throw new IllegalArgumentException("RSA异常");
    }
}

public static String decryptByRsaPub(String base64Src, String base64PriRsa,String charset) {
    try {
        PublicKey publicKey = genPublicKey(base64PriRsa);
        return new String(decryptKey(Base64.decodeBase64(base64Src), publicKey),charset);
    } catch (Exception e) {
        e.printStackTrace();
        throw new IllegalArgumentException("RSA异常");
    }
}

/**
 * 用公钥加密
 */
private static byte[] encryptByKey(byte[] srcData, Key publicKey) {
    try {
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        int blockSize = cipher.getOutputSize(srcData.length) - 11;
        byte[] encryptedData = null;
        for (int i = 0; i 

< srcData.length; i += blockSize) { byte[] doFinal = cipher.doFinal(subarray(srcData, i, i + blockSize)); encryptedData = addAll(encryptedData, doFinal); } return encryptedData;

    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

private static byte[] decryptKey(byte[] srcData, Key key) {
    try {
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.DECRYPT_MODE, key);
        int blockSize = cipher.getOutputSize(srcData.length);
        byte[] decryptData = null;

        for (int i = 0; i 

< srcData.length; i += blockSize) { byte[] doFinal = cipher.doFinal(subarray(srcData, i, i + blockSize));

            decryptData = addAll(decryptData, doFinal);
        }
        return decryptData;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

private static byte[] subarray(byte[] array, int startIndexInclusive, int endIndexExclusive) {
    if (array == null) {
        return null;
    }
    if (startIndexInclusive 

< 0) { startIndexInclusive = 0; } if (endIndexExclusive > array.length) { endIndexExclusive = array.length; } int newSize = endIndexExclusive - startIndexInclusive;

    if (newSize 

< = 0) { return new byte[0]; }

    byte[] subarray = new byte[newSize];

    System.arraycopy(array, startIndexInclusive, subarray, 0, newSize);

    return subarray;
}

private static byte[] addAll(byte[] array1, byte[] array2) {
    if (array1 == null) {
        return clone(array2);
    } else if (array2 == null) {
        return clone(array1);
    }
    byte[] joinedArray = new byte[array1.length + array2.length];
    System.arraycopy(array1, 0, joinedArray, 0, array1.length);
    System.arraycopy(array2, 0, joinedArray, array1.length, array2.length);
    return joinedArray;
}

public static byte[] clone(byte[] array) {
    if (array == null) {
        return null;
    }
    return (byte[]) array.clone();
}

}


订单对象

package fuiou.h5;

public class QueryOrderReq{

//商户代码
private String mchnt_cd = "";
//支付方式
private String paymode_cd = "";
//订单日期
private String order_date = "";
//订单流水号
private String order_id = "";
//版本号 默认1.0.0
private String ver = "";

public String getMchnt_cd() {
    return mchnt_cd;
}
public void setMchnt_cd(String mchnt_cd) {
    this.mchnt_cd = mchnt_cd;
}
public String getPaymode_cd() {
    return paymode_cd;
}
public void setPaymode_cd(String paymode_cd) {
    this.paymode_cd = paymode_cd;
}
public String getOrder_date() {
    return order_date;
}
public void setOrder_date(String order_date) {
    this.order_date = order_date;
}
public String getOrder_id() {
    return order_id;
}
public void setOrder_id(String order_id) {
    this.order_id = order_id;
}
public String getVer() {
    return ver;
}
public void setVer(String ver) {
    this.ver = ver;
}

}


#### HttpRequestUtil http请求工具 {#httprequestutil-http请求工具}

package fuiou.h5;

import java.io.IOException; import java.net.URLDecoder; import net.sf.json.JSONObject; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils;

public class HttpRequestUtil{

public static JSONObject httpGet(String url){
JSONObject jsonResult = null;
try {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
HttpResponse response = client.execute(request);

        if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {  
            String strResult = EntityUtils.toString(response.getEntity());  
            jsonResult = JSONObject.fromObject(strResult);  
            url = URLDecoder.decode(url, "UTF-8");  
        } else {  

        }  
    } catch (IOException e) {  
        e.printStackTrace();
    }  
    return jsonResult;  
}  

public static JSONObject httpPost(String url,JSONObject jsonParam){  
    return httpPost(url, jsonParam.toString(), false);  
}  


public static JSONObject httpPost(String url,String json, boolean noNeedResponse){  
    DefaultHttpClient httpClient = new DefaultHttpClient();  
    JSONObject jsonResult = null;  
    HttpPost method = new HttpPost(url);  
    try {  
        if (null != json) {  
            StringEntity entity = new StringEntity(json, "utf-8");  
            entity.setContentEncoding("UTF-8");  
            entity.setContentType("application/json");  
            method.setEntity(entity);  
        }  
        HttpResponse result = httpClient.execute(method);  
        url = URLDecoder.decode(url, "UTF-8");  
        if (result.getStatusLine().getStatusCode() == 200) {  
            String str = "";  
            try {  
                str = EntityUtils.toString(result.getEntity());  
                if (noNeedResponse) {  
                    return null;  
                }  
                jsonResult = JSONObject.fromObject(str);  
            } catch (Exception e) {  
                e.printStackTrace();
            }  
        }  
    } catch (IOException e) {  
        e.printStackTrace();
    }  
    return jsonResult;  
}  

}


#### 公共请求数据 {#公共请求数据}

package fuiou.h5;

public class CommonReq{

//商户代码
private String mchnt_cd;
//密文
private String message;
public String getMchnt_cd() {
    return mchnt_cd;
}
public void setMchnt_cd(String mchnt_cd) {
    this.mchnt_cd = mchnt_cd;
}
public String getMessage() {
    return message;
}
public void setMessage(String message) {
    this.message = message;
}

} ```

results matching ""

    No results matching ""