微信退款

hanfengzqh 2015-12-24 11:51:16

在WeChatFragment 类中点击退款
case R.id.button:
wechatRefundUtils = new WechatRefundUtils(mContext);
new Thread(){
@Override
public void run() {
try {
wechatRefundUtils.refundMoney(1);
} catch (Exception e) {
e.printStackTrace();
}
super.run();
}
}.start();
break;



在下面这个类里面具体执行退款操作:
package com.zng.cashier.utils;

import java.io.File;
import java.io.FileInputStream;
import java.security.KeyStore;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import javax.net.ssl.SSLContext;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;

import android.content.Context;
import android.util.Log;



/**
* 退款工具类
* @author zqh
*
*/
public class WechatRefundUtils {
private int mTotalFee;
private Context mContext;
private KeyStore keyStore;
private FileInputStream instream;
public WechatRefundUtils(Context context) {
mContext = context;
}

public Map<String, String> refundMoney(int totalFee) throws Exception{

mTotalFee = totalFee;
String url = String.format(WeChatUrl.REFUND_URL);
String entity = genProductArgs();//设置请求的参数 为 XML形式

byte[] buf = httpPost(url, entity);//请求返回的数据转换为 byte数组

String content = new String(buf);//将byte数组 数据转换为字符串

Map<String, String> xml = WeChatutils.decodeXml(content);//将字符串转换为Map key=value集合的形式

Log.e("退款请求返回的数据key=value;result : ", xml+"");

return xml;

}



@SuppressWarnings("deprecation")
public byte[] httpPost(String url, String entity) throws Exception {

if (url == null || url.length() == 0) {
// Log.e(TAG, "httpPost, url is null");
return null;
}
//HttpClient httpClient = getNewHttpClient();
//指定读取证书格式为PKCS12
KeyStore keyStore = KeyStore.getInstance("PKCS12");
//读取本机存放的PKCS12证书文件
Log.e("存储路径", mContext.getFilesDir().getAbsolutePath()+"/apiclient_cert.p12");
FileInputStream instream = new FileInputStream(new File("mnt/sdcard/cert/apiclient_cert.p12"));
try {
//指定PKCS12的密码(商户ID)
keyStore.load(instream, "111111111".toCharArray());
} finally {
instream.close();
}
SSLContext sslcontext = SSLContexts.custom()
.loadKeyMaterial(keyStore, "11111111".toCharArray()).build();
//指定TLS版本
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslcontext,new String[] { "TLSv1" },null,SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
//设置httpclient的SSLSocketFactory
CloseableHttpClient httpclient = HttpClients.custom()
.setSSLSocketFactory(sslsf).build();











HttpPost httpPost = new HttpPost(url);

try {
httpPost.setEntity(new StringEntity(entity));
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");

HttpResponse resp = httpclient.execute(httpPost);
if (resp.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
Log.e("TAG", "httpGet fail, status code = " + resp.getStatusLine().getStatusCode());
return null;
}

return EntityUtils.toByteArray(resp.getEntity());
} catch (Exception e) {
Log.e("TAG", "httpPost exception, e = " + e.getMessage());
e.printStackTrace();
return null;
}
}



//拼接要发送的请求参数 其中还要获得签名信息
private String genProductArgs() {
StringBuffer xml = new StringBuffer();
try {
String nonceStr = WeChatutils.genNonceStr();//获取随机字符串
xml.append("</xml>");
List<NameValuePair> packageParams = new LinkedList<NameValuePair>();

/*String outTradeNo = RandomUtil.getOutTradeNo();

SharePreUtil.putString(mContext, "outTradeNo", outTradeNo);*/

packageParams.add(new BasicNameValuePair("appid", Contacts.APP_ID));//appid
packageParams.add(new BasicNameValuePair("mch_id", Contacts.MCH_ID));//商户号
packageParams.add(new BasicNameValuePair("nonce_str", nonceStr));//随机数
packageParams.add(new BasicNameValuePair("op_user_id", "11111111"));//操作员
packageParams.add(new BasicNameValuePair("out_trade_no","2015122210502200276904538"));//商户 后台的贸易单号
packageParams.add(new BasicNameValuePair("out_refund_no","201512221050220027690453"+"1"));//商户退款单号
packageParams.add(new BasicNameValuePair("refund_fee", mTotalFee+""));//退款金额必须为整数 单位为分
packageParams.add(new BasicNameValuePair("total_fee", mTotalFee+""));//总金额必须为整数 单位为分

String sign = WeChatutils.genPackageSign(packageParams);//生成签名
packageParams.add(new BasicNameValuePair("sign", sign));//根据微信签名规则,生成签名

String xmlstring = WeChatutils.toXml(packageParams);
Log.e("xmlstring = ", xmlstring);
return xmlstring;

} catch (Exception e) {
Log.e("TAG", "genProductArgs fail, ex = " + e.getMessage());
return null;
}

}
}


但是运行过之后 就会出现
12-24 11:19:43.030: D/dalvikvm(28432): DexOpt: couldn't find static field Lorg/apache/http/conn/ssl/StrictHostnameVerifier;.INSTANCE
12-24 11:19:43.030: I/dalvikvm(28432): DexOpt: unable to optimize static field ref 0x1121 at 0x08 in Lorg/apache/http/conn/ssl/SSLConnectionSocketFactory;.<clinit>
12-24 11:19:43.030: W/dalvikvm(28432): Exception Ljava/lang/NoSuchFieldError; thrown while initializing Lorg/apache/http/conn/ssl/SSLConnectionSocketFactory;
12-24 11:19:43.030: W/dalvikvm(28432): threadid=13: thread exiting with uncaught exception (group=0x40a6b1f8)
12-24 11:19:43.030: W/System.err(28432): java.lang.ExceptionInInitializerError
12-24 11:19:43.030: W/System.err(28432): at com.zng.cashier.utils.WechatRefundUtils.httpPost(WechatRefundUtils.java:94)
12-24 11:19:43.030: W/System.err(28432): at com.zng.cashier.utils.WechatRefundUtils.refundMoney(WechatRefundUtils.java:52)
12-24 11:19:43.030: W/System.err(28432): at com.zng.cashier.fragment.WeChatFragment$4.run(WeChatFragment.java:435)
12-24 11:19:43.030: W/System.err(28432): Caused by: java.lang.NoSuchFieldError: org.apache.http.conn.ssl.AllowAllHostnameVerifier.INSTANCE
12-24 11:19:43.030: W/System.err(28432): at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:144)
12-24 11:19:43.030: W/System.err(28432): ... 3 more
错误,哪个大神能解决一下
...全文
1128 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_41980516 2019-08-06
  • 打赏
  • 举报
回复
你好 老铁了解一下 银联线下聚合码 能做回调吗

1,170

社区成员

发帖
与我相关
我的任务
社区描述
移动支付相关内容讨论专区
社区管理员
  • 移动支付
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧