easypay.network2/3

easypay.network2/3

package io.github.xiong_it.easypay.network;



import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.HttpURLConnection;

import java.net.URL;



import io.github.xiong_it.easypay.PayParams;

import io.github.xiong_it.easypay.util.ThreadManager;



/**

* @author 注释者:王教成

* @version 注释版:1.0.0

* 网络统一资源定位器连接客户端

*/

public class HttpUrlConnectionClient implements NetworkClientInterf {

/**

    * 实现父类获取方法

    * @param payParams 支付参数

    * @param callBack 网络客户端接口中回调接口

    */

   @Override

   public void get(final PayParams payParams, final CallBack callBack) {

Runnable command = new Thread() {//创建新线程

           @Override

           public void run() {

super.run();//调用父类方法

               String apiUrl = payParams.getApiUrl();//支付参数获取API统一资源定位器

               URL url = null;//声明统一资源定位器

               HttpURLConnection connection = null;//声明网络统一资源定位器连接

               InputStream inputStream = null;//声明输入流

               try {

StringBuffer sburl = new StringBuffer();

                   // TODO 与服务器开发人员协商接口形式,需要为微信、支付宝、银联等,预支付信息走一个接口,通过pay_way或者其他字段进行区分

                   // 以下信息除商品详情介绍(goods_introduction)外,均为必须上传字段,key值与服务器人员协商自行定义

                   sburl.append(apiUrl)//添加API统一资源定位器

                           .append("?")

.append("pay_way=").append(payParams.getPayWay())//添加支付方式

                           .append("&")

.append("price=").append(payParams.getGoodsPrice())//添加商品价格

                           .append("&")

.append("goods_name=").append(payParams.getGoodsName())//添加商品名称

                           .append("&")

.append("goods_introduction=").append(payParams.getGoodsIntroduction());//添加商品介绍

                   url = new URL(sburl.toString());//创建统一资源定位器

                   connection = (HttpURLConnection) url.openConnection();//打开连接

                   connection.setRequestMethod("GET");//设置请求方法

                   connection.setConnectTimeout(20 * 1000);//设置连接超时2秒

                   connection.setReadTimeout(10 * 1000);//设置读取超时1秒



                   connection.connect();//连接



                   if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {//如果连接请求代码是网络正常

                       inputStream = connection.getInputStream();//连接获取输入流

                       byte[] data = http://www.gunmi.cn/v/new byte[512];//创建字节数组

                       int len = 0;//声明长度

                       StringBuffer sb = new StringBuffer();//创建线程安全字符串变量

                       while ((len = inputStream.read(data)) > 0) {

sb.append(new String(data, 0, len));//迭代添加输入流到线程安全字符串变量

                       }

callBack.onSuccess(sb.toString());//成功回调

                   } else {

callBack.onFailure();//否则失败回调

                   }

} catch (Exception e) {

callBack.onFailure();//捕获异常,失败回调

               } finally {

if (connection != null) {

connection.disconnect();//如果连接非空,取消连接

                   }

if (inputStream != null) {

try {

inputStream.close();//如果输入流非空,关闭输入流

                       } catch (IOException e) {

e.printStackTrace();//捕获输入输出异常,打印异常跟踪栈

                       }

}

}

}

};

       ThreadManager.execute(command);//线程管理器执行线程

   }

/**

    * 实现父类邮寄方法

    * @param payParams 支付参数

    * @param callBack 网络客户端接口中回调接口

    */

   @Override

   public void post(final PayParams payParams, final CallBack callBack) {

Runnable command = new Thread() {//创建新线程

           @Override

           public void run() {

super.run();//调用父类方法

               String apiUrl = payParams.getApiUrl();//支付参数获取API统一资源定位器

               URL url = null;//声明统一资源定位器

               HttpURLConnection connection = null;//声明网络统一资源定位器连接

               InputStream inputStream = null;//声明输入流

               OutputStream outputStream = null;//声明输出流

               // TODO 与服务器开发人员协商接口形式,需要为微信、支付宝、银联等,预支付信息走一个接口,通过pay_way或者其他字段进行区分

               // 以下信息除商品详情介绍(goods_introduction)外,均为必须上传字段,key值与服务器人员协商自行定义

               try {

url = new URL(apiUrl);//创建统一资源定位器

                   connection = (HttpURLConnection) url.openConnection();//打开连接

                   connection.setRequestMethod("POST");//设置请求方法

                   connection.setConnectTimeout(20 * 1000);//设置连接超时2秒

                   connection.setReadTimeout(10 * 1000);//设置读取超时1秒

                   connection.setDoOutput(true);//设置允许输出



                   outputStream = connection.getOutputStream();//获取输出流

                   StringBuffer stringBuffer = new StringBuffer();//创建线程安全字符串变量

                   stringBuffer.append("pay_way=").append(payParams.getPayWay())//添加支付方式

                           .append("&")

.append("price=").append(payParams.getGoodsPrice())//添加商品价格

                           .append("&")

.append("goods_name=").append(payParams.getGoodsName())//添加商品名称

                           .append("&")

.append("goods_introduction=").append(payParams.getGoodsIntroduction());//添加商品介绍

                   String params = stringBuffer.toString();//线程安全字符串变量转字符串

                   outputStream.write(params.getBytes());//输出流写字符串字节数组

                   outputStream.flush();//输出流清空缓冲区



                   connection.connect();//连接



                   if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {//如果连接请求代码是网络正常

                       inputStream = connection.getInputStream();//连接获取输入流

                       byte[] data = http://www.gunmi.cn/v/new byte[512];//创建字节数组

                       int len = 0;//声明长度

                       StringBuffer sb = new StringBuffer();//创建线程安全字符串变量

                       while ((len = inputStream.read(data)) > 0) {

sb.append(new String(data, 0, len));//迭代添加输入流到线程安全字符串变量

                       }

callBack.onSuccess(sb.toString());//成功回调

                   } else {

callBack.onFailure();//否则失败回调

                   }

} catch (Exception e) {

callBack.onFailure();//捕获异常,失败回调

               } finally {

if (connection != null) {

connection.disconnect();//如果连接非空,取消连接

                   }

if (inputStream != null) {

try {

inputStream.close();//如果输入流非空,关闭输入流

                       } catch (IOException e) {

e.printStackTrace();//捕获输入输出异常,打印异常跟踪栈

                       }

}

if (outputStream != null) {

try {

outputStream.close();//如果输出流非空,管理输出流

                       } catch (IOException e) {

e.printStackTrace();//捕获输入输出异常,打印异常跟踪栈

                       }

}

}

}

};

       ThreadManager.execute(command);//线程管理器执行线程

   }

}

easypay.network2/3