Android微信支付的预支付获取优化版

第一句,微信支付sdk非常的狗血,那么大的公司,sdk竟然没什么人维护,支付宝甩他几十条街。神奇的sdk接入操作,必须要自己写一个特定wxapi命名包在代码根目录,对不起,我是强迫症患者,看了就接受不了。

下面主要吐槽的是,每次优化代码或者重构项目的的时候,官网的例子工程,还是eclipse 工程,13年的货。这也就算了,支付流程第一步,统一下单的网络请求例子给的是httpclient 请求。谷歌都在Android里舍弃掉了httpclient ,它还没人改。
这个就算了,支付交互还是xml。真恶心。
下面贴出自己写的HttpsUrlConnection 替换掉获取预支付的代码,直接替换掉,官方例子里面给的httpPost()方法就行 了。不用再使用微信支付还得接入httpclient的apache包了。


					URL url;
					try {

						HttpsURLConnection.setDefaultHostnameVerifier((arg0, arg1) -> true);
						class HTTPSTrustManager implements X509TrustManager {


							private  final X509Certificate[] _AcceptedIssuers = new X509Certificate[] {};

							@SuppressLint("TrustAllX509TrustManager")
                            @Override
							public void checkClientTrusted(
									java.security.cert.X509Certificate[] x509Certificates, String s)
									 {

							}
                            @SuppressLint("TrustAllX509TrustManager")
							@Override
							public void checkServerTrusted(
									java.security.cert.X509Certificate[] x509Certificates, String s)
									{

							}
                            @SuppressLint("TrustAllX509TrustManager")
							@Override
							public X509Certificate[] getAcceptedIssuers() {
								return _AcceptedIssuers;
							}


						}
						SSLContext context = null;
						TrustManager[] trustManagers= new TrustManager[] { new HTTPSTrustManager() };
						try {
							context = SSLContext.getInstance("TLS");
							context.init(null, trustManagers, new SecureRandom());
						} catch (NoSuchAlgorithmException e) {
							e.printStackTrace();
						} catch (KeyManagementException e) {
							e.printStackTrace();
						}

                        HttpsURLConnection.setDefaultSSLSocketFactory(Objects.requireNonNull(context).getSocketFactory());
						url = new URL(urlPath);
						HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
						conn.setConnectTimeout(50000);//5
						conn.setReadTimeout(50000);
						conn.setDoOutput(true);// 设置允许输出
						conn.setRequestMethod("POST");
						conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");
						conn.setRequestProperty("Charset", "UTF-8");
						conn.setRequestProperty("Content-Type", "text/xml");
						DataOutputStream out = new DataOutputStream(conn
								.getOutputStream());
						out.writeBytes(entity);
						out.flush();
						out.close();

						/* 服务器返回的响应码 */
						int code = conn.getResponseCode();
						Log.i("https","code="+code);
						if (code == 200) {
							BufferedReader in = new BufferedReader(
									new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8.name()));
							String retData ;
							StringBuilder responseData = new StringBuilder();
							while ((retData = in.readLine()) != null) {
								responseData.append(retData);
							}
							in.close();
							return responseData.toString().getBytes();
						} else {
							Log.i("https","return error");
							return null;
						}

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




}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值