I MISS YOU !
使用环境:
需要用到支付的地方
使用方法:
1 copy jar包
1
2 copy支付工具类:
<string name="pay_success">支付成功</string>
<string name="none_ali">未检测到支付宝</string>
<string name="pay_fail">支付失败</string>
<string name="pay_cancle">支付被取消</string>
<string name="pay_waiting">支付结果确认中</string>
<string name="wrong_money">请输入正确的金额</string>
<string name="alipay">支付宝支付</string>
public class AliPayResult {
private String resultStatus;
private String result;
private String memo;
public AliPayResult(String rawResult) {
if (TextUtils.isEmpty(rawResult))
return;
String[] resultParams = rawResult.split(";");
for (String resultParam : resultParams) {
if (resultParam.startsWith("resultStatus")) {
resultStatus = gatValue(resultParam, "resultStatus");
}
if (resultParam.startsWith("result")) {
result = gatValue(resultParam, "result");
}
if (resultParam.startsWith("memo")) {
memo = gatValue(resultParam, "memo");
}
}
}
@Override
public String toString() {
return "resultStatus={" + resultStatus + "};memo={" + memo
+ "};result={" + result + "}";
}
private String gatValue(String content, String key) {
String prefix = key + "={";
return content.substring(content.indexOf(prefix) + prefix.length(),
content.lastIndexOf("}"));
}
/**
* @return the resultStatus
*/
public String getResultStatus() {
return resultStatus;
}
/**
* @return the memo
*/
public String getMemo() {
return memo;
}
/**
* @return the result
*/
public String getResult() {
return result;
}
}
/**
* Created by SensYang on 2018/09/08 14:24
*/
public class AliPayUtil {
private static AliPayUtil instance;
//支付结果回调接口
private PayStateCallback payStateCallback;
private Activity activity;
/**
* 设置支付结果监听
*/
public AliPayUtil setPayStateCallback(PayStateCallback payStateCallback) {
this.payStateCallback = payStateCallback;
return this;
}
private AliPayUtil() {
}
public static AliPayUtil getInstance(Activity activity, PayStateCallback payStateCallback) {
if (instance == null) {
instance = new AliPayUtil();
}
instance.setActivity(activity);
instance.setPayStateCallback(payStateCallback);
return instance;
}
private void setActivity(Activity activity) {
this.activity = activity;
}
/**
* 调用支付宝SDK支付
*
* @param orderstr 编码后的订单信息
*/
public void startPay(String orderstr) {
if (CommonUtils.isFastDoubleClick()){return;}
new PayThread(orderstr).start();
}
class PayThread extends Thread {
String orderstr;
public PayThread(String orderstr) {
this.orderstr = orderstr;
}
@Override
public void run() {
// 构造PayTask 对象
PayTask alipay = new PayTask(activity);
String result = alipay.pay(orderstr, true);
// 调用支付接口,获取支付结果
payStateCallBack(result);
}
}
private void payStateCallBack(String result) {
AliPayResult aliPayResult = new AliPayResult(result);
/**
* 同步返回的结果必须放置到服务端进行验证(验证的规则请看
* https://doc.open.alipay.com/doc2/detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665&docType=1
* ) 建议商户依赖异步通知
* 服务端验证安全
*/
// String resultInfo = aliPayResult.getResult();// 同步返回需要验证的信息
String resultStatus = aliPayResult.getResultStatus();
// 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档
if (TextUtils.equals(resultStatus, "9000")) {
//ToastUtil.showToast("支付成功");
if (payStateCallback != null) {
payStateCallback.onPaySuccess(activity.getString(R.string.pay_success));
}
} else {
// 判断resultStatus 为非"9000"则代表可能支付失败
// "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
if (TextUtils.equals(resultStatus, "8000")) {
//ToastUtil.showToast("支付结果确认中");
if (payStateCallback != null) {
payStateCallback.onPayWatting(activity.getString(R.string.pay_waiting));
}
} else if (TextUtils.equals(resultStatus, "6001")) {
//ToastUtil.showToast("支付结果确认中");
if (payStateCallback != null) {
payStateCallback.onPayFailed(activity.getString(R.string.pay_cancle));
}
} else if (TextUtils.equals(resultStatus, "4000")) {
if (payStateCallback != null) {
payStateCallback.onPayFailed(activity.getString(R.string.none_ali));
}
} else {
// 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误
//ToastUtil.showToast("支付失败");
if (payStateCallback != null) {
payStateCallback.onPayFailed(activity.getString(R.string.pay_fail));
}
}
}
}
}
payStateCallback
请单独创建一个类
/**
* Created by SensYang on 2018/09/08 14:28
*/
public interface PayStateCallback {
/**
* 支付成功
*/
void onPaySuccess(String describe);
/**
* 支付结果确认中
*/
void onPayWatting(String describe);
/**
* 支付失败
*/
void onPayFailed(String describe);
}
3 发送支付的数据给后台,接收后台返回值,并调用支付宝进行支付:
//主要调用方法
// alipayBean.getData()是服务器返回的支付字符串
AliPayUtil.getInstance((Activity) mcontext, orderCallback).startPay(alipayBean.getData());
private PayStateCallback orderCallback = new PayStateCallback() {
@Override
public void onPaySuccess(String describe) {
//支付成功的处理
ToastUtils.showToast(mcontext,"支付成功");
}
@Override
public void onPayWatting(String describe) {
}
@Override
public void onPayFailed(String describe) {
//支付失败的处理
ToastUtils.showToast(mcontext,"支付失败");
}
};
好了,现在的支付宝支付就是这么简单。
如果有什么需要讨论的请添加QQ群:88627109
欢迎您的光临!