Android 微信退款

来源:互联网 发布:二次元软件 编辑:程序博客网 时间:2024/06/02 22:45

/**

 *  Android 微信退款

 **/

// 存放微信退款参数参数

Map<String, String> map = new HashMap<String, String>();

params.put("appid", appid); // 公众账号ID
params.put("mch_id", mch_id); // 商户号
params.put("nonce_str", nonce_str); // 随机字符串
params.put("sign_type", "MD5"); // 签名类型
params.put("out_trade_no", out_trade_no); // 商户退款原订单号
params.put("out_refund_no", out_refund_no); // 商户退款新单号
params.put("total_fee", "100"))); // 订单金额
params.put("refund_fee", "100"))); // 退款金额

if (!"".equals(sub_mch_id())) { // 子商户号
            params.put("sub_mch_id", sub_mch_id()); // 子商户id
 }

// 签名 按微信要求

String sign = sign;

String cert_text = cert_text; // 微信证书后台证书转成的base64编码的字符串

/**

*  根据需求 把微信退款证书转成 InputStream

**/

InputStream inStream = new ByteArrayInputStream(Base64.decode(cert_text));

/**

 **  证书在android上的使用

 **/

KeyStore keyStore = null;
       
try {
            keyStore = KeyStore.getInstance("PKCS12");
            try {
                keyStore.load(inStream, mch_id().toCharArray());  // inStream :证书流,mch_id :密码,注意当证书和密码不对应的时候会出现异常
            } finally {
                inStream.close();
            }
        } catch (KeyStoreException e) {
            // TODO Auto-generated catch block

            e.printStackTrace();

}

KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");

kmf.init(keyStore, payRefund.getWxMch_id().toCharArray());

KeyManager[] keyManagers = kmf.getKeyManagers();

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagers, null, null);


String wx_xml = " "; // 参数生成xml

String urladdress = "https://api.mch.weixin.qq.com/secapi/pay/refund";


// 发送https请求

byte[] xml = content.getBytes();

URL url = new URL(urladdress);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
 if (conn instanceof HttpURLConnection) {
      ((HttpsURLConnection) conn).setSSLSocketFactory(sslContext.getSocketFactory());
 }

if (conn instanceof HttpURLConnection) {      

((HttpsURLConnection) conn).setSSLSocketFactory(sslContext.getSocketFactory());

 }

                conn.setConnectTimeout(10000);
                conn.setRequestMethod("POST");
                conn.setDoOutput(true);
                // 设置HTTP请求的头字段
                conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8"); // 内容类型
                conn.setRequestProperty("Content-Length", String.valueOf(xml.length)); // 实体内容的长度
                conn.getOutputStream().write(xml);
                conn.getOutputStream().flush();
                conn.getOutputStream().close();

                if (conn.getResponseCode() != 200)
                    throw new RuntimeException("请求url失败");

                InputStream is = conn.getInputStream(); // 获取返回的数据
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                byte[] buf = new byte[1024];
                int len;
                while ((len = is.read(buf)) != -1) {
                    out.write(buf, 0, len);
                }
                String string = out.toString("UTF-8");
                result = string;
                out.close();

              // 解析文本 查看退款结果


原创粉丝点击