easypay.pay.paystrategy

easypay.pay.paystrategy

package io.github.xiong_it.easypay.pay.paystrategy;



/**

* @author 注释者:王教成

* @version 注释版:1.0.0

* 支付策略上下文角色

*/

public class PayContext {

private PayStrategyInterf mStrategy;//声明支付策略接口

   public PayContext(PayStrategyInterf strategy) {

mStrategy = strategy;//支付策略接口初始赋值

   }//构造器



   /**

    * 支付

    */

   public void pay() {

if (mStrategy != null) {

mStrategy.doPay();//如果支付策略接口非空,执行支付

       }

}

}

package io.github.xiong_it.easypay.pay.paystrategy;



/**

* @author 注释者:王教成

* @version 注释版:1.0.0

* 支付策略接口

*/

public interface PayStrategyInterf {

void doPay();//进行支付

}package io.github.xiong_it.easypay.pay.paystrategy;



import io.github.xiong_it.easypay.EasyPay;

import io.github.xiong_it.easypay.PayParams;



/**

* @author 注释者:王教成

* @version 注释版:1.0.0

* 支付策略基类

*/

public abstract class BasePayStrategy implements PayStrategyInterf{

protected PayParams mPayParams;//声明支付参数

   protected String mPrePayInfo;//声明预支付信息字符串

   protected EasyPay.PayCallBack mOnPayResultListener;//声明支付回调接口

   public BasePayStrategy(PayParams params, String prePayInfo, EasyPay.PayCallBack resultListener) {

mPayParams = params;//支付参数初始赋值

       mPrePayInfo = prePayInfo;//预支付信息字符串初始赋值

       mOnPayResultListener = resultListener;//支付回调接口初始赋值

   }//构造器



   /**

    * 执行支付抽象方法

    */

   public abstract void doPay();

}package io.github.xiong_it.easypay.pay.paystrategy;



import android.os.Handler;

import android.os.Message;



import com.alipay.sdk.app.PayTask;



import java.util.Map;



import io.github.xiong_it.easypay.EasyPay;

import io.github.xiong_it.easypay.PayParams;

import io.github.xiong_it.easypay.pay.ALiPayResult;

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



/**

* @author 注释者:王教成

* @version 注释版:1.0.0

* 阿里支付策略

*/

public class ALiPayStrategy extends BasePayStrategy {

private static final int PAY_RESULT_MSG = 0;//支付结果信息

   Handler mHandler = new Handler() {

@Override

       public void handleMessage(Message msg) {

super.handleMessage(msg);//调用父类处理消息方法

           if (msg.what != PAY_RESULT_MSG) {

return;//如果what不是支付结果信息

           }

ThreadManager.shutdown();//调用线程管理器的关闭方法

           ALiPayResult result = new ALiPayResult((Map<String, String>) msg.obj);//创建阿里支付结果

           switch (result.getResultStatus()) {//阿里支付结果获取结果状态

               case ALiPayResult.PAY_OK_STATUS://如果是支付成功状态

                   mOnPayResultListener.onPayCallBack(EasyPay.COMMON_PAY_OK);//支付回调通用支付正常

                   break;

               case ALiPayResult.PAY_CANCLE_STATUS://如果是支付取消状态

                   mOnPayResultListener.onPayCallBack(EasyPay.COMMON_USER_CACELED_ERR);//支付回调通用用户取消错误

                   break;

               case ALiPayResult.PAY_FAILED_STATUS://如果是支付失败状态

                   mOnPayResultListener.onPayCallBack(EasyPay.COMMON_PAY_ERR);//支付回调通用支付错误

                   break;

               case ALiPayResult.PAY_WAIT_CONFIRM_STATUS://如果是支付等待确认状态

                   mOnPayResultListener.onPayCallBack(EasyPay.ALI_PAY_WAIT_CONFIRM_ERR);//支付回调阿里支付等待确认错误

                   break;

               case ALiPayResult.PAY_NET_ERR_STATUS://如果是支付网络错误状态

                   mOnPayResultListener.onPayCallBack(EasyPay.ALI_PAY_NET_ERR);//支付回调阿里支付网络错误

                   break;

               case ALiPayResult.PAY_UNKNOWN_ERR_STATUS://如果是支付未知错误状态

                   mOnPayResultListener.onPayCallBack(EasyPay.ALI_PAY_UNKNOW_ERR);//支付回调阿里支付未知错误

                   break;

               default://如果是其他状态

                   mOnPayResultListener.onPayCallBack(EasyPay.ALI_PAY_OTHER_ERR);//支付回调阿里支付其他错误

                   break;

           }

mHandler.removeCallbacksAndMessages(null);//处理器移除回调和消息

       }

};//创建处理器

   public ALiPayStrategy(PayParams params, String prePayInfo, EasyPay.PayCallBack resultListener) {

super(params, prePayInfo, resultListener);//调用父类方法

   }//构造器



   /**

    * 实现父类的执行支付方法

    */

   @Override

   public void doPay() {

Runnable payRun = new Runnable() {

@Override

           public void run() {

PayTask task = new PayTask(mPayParams.getActivity());//创建支付任务

               // TODO 根据自身需求解析mPrePayinfo,最终的字符串值应该为一连串key=value形式

               Map<String, String> result = task.payV2(mPrePayInfo, true);//支付任务payV2方法获取结果字符串键值对Map

               Message message = mHandler.obtainMessage();//处理器获取消息

               message.what = PAY_RESULT_MSG;//支付结果消息赋值what

               message.obj = result;//结果字符串键值对Map赋值obj

               mHandler.sendMessage(message);//处理器发送消息

           }

};//创建线程

       ThreadManager.execute(payRun);//调用线程管理器的执行方法

   }

}package io.github.xiong_it.easypay.pay.paystrategy;



import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.support.v4.content.LocalBroadcastManager;



import com.tencent.mm.opensdk.openapi.IWXAPI;

import com.tencent.mm.opensdk.openapi.WXAPIFactory;



import io.github.xiong_it.easypay.EasyPay;

import io.github.xiong_it.easypay.PayParams;



/**

* @author 注释者:王教成

* @version 注释版:1.0.0

* 微信支付策略

*/

public class WeChatPayStrategy extends BasePayStrategy {

private Context mContext;//声明上下文

   private LocalBroadcastManager mBroadcastManager;//声明本地广播管理器

   public static final String WECHAT_PAY_RESULT_ACTION = "com.tencent.mm.opensdk.WECHAT_PAY_RESULT_ACTION";//微信支付结果操作

   public static final String WECHAT_PAY_RESULT_EXTRA = "com.tencent.mm.opensdk.WECHAT_PAY_RESULT_EXTRA";//微信支付结果附加

   public WeChatPayStrategy(PayParams params, String prePayInfo, EasyPay.PayCallBack resultListener) {

super(params, prePayInfo, resultListener);//调用父类方法

       mContext = params.getActivity();//支付参数获取活动,赋值上下文

   }//构造器



   /**

    * 实现父类的执行支付方法

    */

   @Override

   public void doPay() {

IWXAPI wxapi = WXAPIFactory.createWXAPI(mContext.getApplicationContext(), mPayParams.getWeChatAppID(), true);//创建微信API

       if (!wxapi.isWXAppInstalled()) {//如果微信API未安装

           super.mOnPayResultListener.onPayCallBack(EasyPay.WECHAT_NOT_INSTALLED_ERR);//支付回调微信未安装错误

           return;

       }

if (!wxapi.isWXAppSupportAPI()) {//如果微信应用支持API

           super.mOnPayResultListener.onPayCallBack(EasyPay.WECHAT_UNSUPPORT_ERR);//支付回调微信不支持错误

           return;

       }

wxapi.registerApp(mPayParams.getWeChatAppID());//微信API注册应用

       registPayResultBroadcast();//调用本类中的注册支付结果广播方法

       // TODO 需要做正式解析,修改PrePayInfo.java类,并解开此处注释

       /*

       Gson gson = new Gson();//创建GSON

       PrePayInfo payInfo = gson.fromJson(mPrePayInfo, PrePayInfo.class);//创建预支付信息

       PayReq req = new PayReq();//创建支付请求

       req.appId = payInfo.appid;//应用API赋值

       req.partnerId = payInfo.partnerid;//合作者ID赋值

       req.prepayId = payInfo.prepayid;//预支付ID赋值

       req.packageValue = http://www.gunmi.cn/v/payInfo.packageValue;//包值赋值

       req.nonceStr = payInfo.noncestr;//目前字符串赋值

       req.timeStamp = payInfo.timest//时间戳赋值

       req.sign = payInfo.sign;//签名赋值

       wxapi.sendReq(req);//发送请求,跳转到微信客户端

       */

   }

/**

    * 注册支付结果广播

    */

   private void registPayResultBroadcast() {

mBroadcastManager = LocalBroadcastManager.getInstance(mContext.getApplicationContext());//获取本地广播管理器实例

       IntentFilter filter = new IntentFilter(WECHAT_PAY_RESULT_ACTION);//创建意图过滤器

       mBroadcastManager.registerReceiver(mReceiver, filter);//本地广播管理器注册接收器

   }

/**

    * 取消注册支付结果广播

    */

   private void unRegistPayResultBroadcast() {

if (mBroadcastManager != null && mReceiver != null) {

mBroadcastManager.unregisterReceiver(mReceiver);//本地广播管理器取消注册接收器

           mBroadcastManager = null;//本地广播管理器赋值null

           mReceiver = null;//广播接收器赋值null

       }//如果本地广播管理器非空,且广播接收器非空

   }

private BroadcastReceiver mReceiver = new BroadcastReceiver() {

@Override

       public void onReceive(Context context, Intent intent) {

int result = intent.getIntExtra(WECHAT_PAY_RESULT_EXTRA, -100);//意图获取整形扩展数据

           mOnPayResultListener.onPayCallBack(result);//支付回调

           unRegistPayResultBroadcast();//调用本类中的取消注册支付结果广播方法

       }//实现接收回调方法

   };//创建广播接收器

}package io.github.xiong_it.easypay.pay.paystrategy;



import com.unionpay.UPPayAssistEx;



import io.github.xiong_it.easypay.EasyPay;

import io.github.xiong_it.easypay.PayParams;



/**

* @author 注释者:王教成

* @version 注释版:1.0.0

* 银联支付策略

*/

public class UPPayStrategy extends BasePayStrategy {

private final String OFFICIAL_MODE = "00";//创建官方模式,启动银联正式环境

   private final String DEV_MODE = "01";//创建开发模式,连接银联测试环境

   private final String sMODE = OFFICIAL_MODE;//官方模式赋值我的模式

   // TODO 根据实际情况修改上述环境mode

   private static final int PLUGIN_VALID = 0;//插件有效响应码

   private static final int PLUGIN_NOT_INSTALLED = -1;//银联支付插件未安装

   private static final int PLUGIN_NEED_UPGRADE = 2;//银联支付插件环境需要更新

   public UPPayStrategy(PayParams params, String prePayInfo, EasyPay.PayCallBack resultListener) {

super(params, prePayInfo, resultListener);//调用父类方法

   }//构造器



   /**

    * 实现父类的执行支付方法

    */

   @Override

   public void doPay() {

String tn = getTn(mPrePayInfo);//调用本类中的获取预支付订单号方法

       int ret = UPPayAssistEx.startPay(mPayParams.getActivity(), null, null, tn, sMODE);//开始银联支付

       if (ret == PLUGIN_VALID) {//如果插件有效

           mOnPayResultListener.onPayCallBack(EasyPay.COMMON_PAY_OK);//支付回调通用支付正常

       } else if (ret == PLUGIN_NOT_INSTALLED) {//如果插件未安装

           mOnPayResultListener.onPayCallBack(EasyPay.UPPAY_PLUGIN_NOT_INSTALLED);//支付回调银联插件未安装

       } else if (ret == PLUGIN_NEED_UPGRADE) {//如果插件需更新

           mOnPayResultListener.onPayCallBack(EasyPay.UPPAY_PLUGIN_NEED_UPGRADE);//支付回调银联插件需更新

       } else {//如果是其他

           mOnPayResultListener.onPayCallBack(EasyPay.COMMON_PAY_ERR);//支付回调通用支付错误

       }

}



/**

    * 获取预支付订单号

    * @param mPrePayInfo 预支付信息

    * @return 返回预支付订单号

    */

   private String getTn(String mPrePayInfo) {

// TODO 根据自身需求解析mPrePayinfo得到预支付订单号tn

       return "";

   }

}

easypay.pay.paystrategy