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 "";
}
}
- VS2015中调试提示未能正确加载TraceLogPackage包
- Driver Package Installer可以删除吗
- sublime text 3怎么安装package control
- sublime text3 怎么安装package control
- 【海旗环球快讯】TPEs for advanced product packaging!
- easypay.pay
- easypay.network3/3
- easypay.network2/3
- easypay.network1/3